📄 geoxygenereader.java
字号:
/** Convert a GM_LineString to a GeoLine */
private GeoLine geOxygeneLineStringToGeoLine(int id, GM_Object geom) {
GM_LineString geOxyLineString = (GM_LineString)geom;
DirectPositionList dpl = geOxyLineString.coord();
int nbPts = dpl.size();
GeoLine geoLine = new GeoLine(id,dpl.toArrayX(),dpl.toArrayY(),nbPts );
return geoLine;
}
/** Convert a GM_Polygon (single, without holes) to a Polygon */
private GeoPolygon geOxygenePolygonToGeoPolygon(int id, GM_Object geom) {
GM_Polygon geOxyPolygon = (GM_Polygon)geom;
DirectPositionList dpl = geOxyPolygon.coord();
int nbPts = dpl.size();
GeoPolygon geoPoly = new GeoPolygon (id,dpl.toArrayX(), dpl.toArrayY(), nbPts );
return geoPoly;
}
private void addGeoShape(FT_Feature feature, GM_Object geom) {
if (GM_Point.class.isAssignableFrom(geom.getClass())) {
((PointLayer)layer).addGeoPoint(geOxygenePointToGeoPoint(feature.hashCode(), geom));
}
else if (GM_MultiPoint.class.isAssignableFrom(geom.getClass())) {
GM_Aggregate aggr = (GM_Aggregate)geom;
aggr.initIterator();
while (aggr.hasNext())
((PointLayer)layer).addGeoPoint(geOxygenePointToGeoPoint(feature.hashCode(), aggr.next()));
}
else if (GM_LineString.class.isAssignableFrom(geom.getClass())) {
((LineLayer)layer).addGeoLine(geOxygeneLineStringToGeoLine(feature.hashCode(),geom));
}
else if (GM_MultiCurve.class.isAssignableFrom(geom.getClass())) {
GM_Aggregate aggr = (GM_Aggregate)geom;
aggr.initIterator();
while (aggr.hasNext())
((LineLayer)layer).addGeoLine(geOxygeneLineStringToGeoLine(feature.hashCode(),aggr.next()));
}
else if (GM_Polygon.class.isAssignableFrom(geom.getClass())) {
GM_Polygon poly = (GM_Polygon)geom;
GM_Polygon ext = new GM_Polygon (poly.getExterior());
((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon( feature.hashCode(), ext) );
for (int i=0; i<poly.sizeInterior(); i++) {
GM_Polygon inter = new GM_Polygon (poly.getInterior(i));
((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon(feature.hashCode(), inter) );
}
}
else if (GM_MultiSurface.class.isAssignableFrom(geom.getClass())) {
GM_Aggregate aggr = (GM_Aggregate)geom;
aggr.initIterator();
while (aggr.hasNext()) {
GM_Polygon poly = (GM_Polygon)aggr.next();
GM_Polygon ext = new GM_Polygon (poly.getExterior());
((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon( feature.hashCode(), ext) );
for (int i=0; i<poly.sizeInterior(); i++) {
GM_Polygon inter = new GM_Polygon (poly.getInterior(i));
((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon(feature.hashCode(), inter) );
}
}
}
else {
System.out.println(" ## GeOxygeneReader works only for GM_Point, GM_LineString or GM_Polygon or MultiPrimitives");
System.out.println(" ## Have tried to read : " + geom.getClass().getName());
return;
}
}
/** Fills geodata objects with all of the fields of the collection. */
public Object[] readData() {
Vector columnNames = new Vector();
Vector rowData = new Vector();
// Fill columnNames
Field[] fields = getAccessibleFields();
int nbFields = fields.length;
for (int i=0; i<nbFields; i++)
columnNames.add(fields[i].getName());
// Fill rowData
coll.initIterator();
while (coll.hasNext()) {
FT_Feature feature = coll.next();
Vector row = new Vector();
for (int i = 0; i < nbFields; i++)
try {
row.add ( fields[i].get(feature) );
} catch (Exception e) {
System.out.println(e.getMessage());
row.add(null);
}
rowData.add(row);
}
return new Vector[] {columnNames, rowData};
}
/** Fills a geodata objects with this field.
* Field type MUST be String ou double. */
private GeoData readData(String fieldName) {
SimpleGeoData data = new SimpleGeoData();
try {
Field field = getAccessibleField(fieldName);
coll.initIterator();
if (field.getType().equals(String.class)) {
data.setDataType(GeoData.CHARACTER);
while (coll.hasNext()) {
FT_Feature feature = coll.next();
Object obj = field.get(feature);
if (obj != null)
data.setText(feature.hashCode(), (String) obj );
}
} else if (field.getType().equals(double.class)) {
data.setDataType(GeoData.FLOATING);
while (coll.hasNext()) {
FT_Feature feature = coll.next();
Object obj = field.get(feature);
if (obj != null)
data.setValue(feature.hashCode(), ((Double)obj).doubleValue());
}
} else if (field.getType().equals(int.class)) {
data.setDataType(GeoData.FLOATING);
while (coll.hasNext()) {
FT_Feature feature = coll.next();
Object obj = field.get(feature);
if (obj != null)
data.setValue(feature.hashCode(), ((Integer)obj).doubleValue());
}
} else {
System.out.println("readData() : works only for String or double or int "+fieldName);
return data;
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
/** Returns all fields name. */
public String[] getFieldsNames() {
Field[] fields = ObjectBrowser.getAccessibleFields(featureClass, SHOW_PUBLIC_ATTRIBUTES, SHOW_PROTECTED_ATTRIBUTES);
String[] strings = new String[fields.length];
for (int i=0; i<strings.length; i++)
strings[i] = fields[i].getName();
return strings;
}
/** Returns all possible values for a litteral field. */
private String[] getPossibleValues (String fieldName) {
Set values = new HashSet();
Field field = getAccessibleField(fieldName);
coll.initIterator();
while (coll.hasNext()) {
FT_Feature feature = coll.next();
try {
values.add(field.get(feature));
} catch (Exception e) {
e.printStackTrace();
}
}
String[] result = new String[values.size()];
Iterator it = values.iterator();
int i= 0;
while (it.hasNext()) {
result[i] = (String) it.next();
i++;
}
return result;
}
public Class getFieldType (String fieldName) {
return getAccessibleField(fieldName).getType();
}
private Field getAccessibleField (String fieldName) {
Field[] fields = getAccessibleFields();
for (int i=0; i<fields.length; i++)
if (fields[i].getName().equals(fieldName)) return fields[i];
System.out.println("No field found : "+fieldName+" class "+featureClass);
return null;
}
private Field[] getAccessibleFields() {
return ObjectBrowser.getAccessibleFields(featureClass, SHOW_PUBLIC_ATTRIBUTES, SHOW_PROTECTED_ATTRIBUTES);
}
private Color getRandomColor() {
return new Color((float)Math.random(),(float)Math.random(),(float)Math.random());
}
public FT_FeatureCollection getFeatureCollection() {
return coll;
}
public FT_Feature getFeatureById (int id) {
coll.initIterator();
while (coll.hasNext()) {
FT_Feature f = coll.next();
if (f.hashCode() == id)
return f;
}
System.out.println("### No feature found - id = "+id);
return null;
}
class InitUniqueShader extends Thread {
Shader shader;
String shadedBy;
public InitUniqueShader(Shader sh, String field) {
shader = sh;
shadedBy = field;
}
public void run() {
UniqueShader uShader = (UniqueShader) shader;
Field field = getAccessibleField(shadedBy);
String[] values = getPossibleValues(shadedBy);
int n = values.length;
Color[] colors = new Color[n];
for (int i=0; i<n; i++)
colors[i] = getRandomColor();
coll.initIterator();
while (coll.hasNext()) {
FT_Feature feature = coll.next();
String value = null;
try {
value = (String) field.get(feature);
} catch (Exception e) {
e.printStackTrace();
}
for (int i=0; i<n; i++) {
if (value == null) {
uShader.setColor(feature.hashCode(),ObjectViewerThemeProperties.DEFAULT_MISSING_VALUE_SHADER_COLOR);
break;
}
if (value.equals(values[i])) {
uShader.setColor(feature.hashCode(),colors[i]);
break;
}
}
}
}
public Shader getShader() {
return shader;
}
}
class InitHSVShader extends Thread {
Shader shader;
String shadedBy;
public InitHSVShader(Shader sh, String field) {
shader = sh;
shadedBy = field;
}
public void run() {
SimpleGeoData data = (SimpleGeoData) readData(shadedBy);
theme.setGeoData(data);
shader.setRange(data);
}
public Shader getShader() {
return shader;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -