Voraussetzungen
In diesem Kapitel arbeiten wir in einer Implementation von ‚StandardManuelaUIPlugin‘, dessen ‚execute‘-Methode den beispielhaften Code enthält. Das Initialisieren und Aufrufen geschieht aus einem anderen (hier CursorTool-)Plugin heraus als Teil einer Debug-Methode, die mit einem entsprechenden Button verknüpft ist (inkl. try-catch-Bock):
Java |
---------- |
GeometryTestPlugin testGeometry = new GeometryTestPlugin();
testGeometry.execute(this.getSwingToFxView().getContext());
Dabei ist die Übergabe des OpenJump-‚PluginContext‘ wichtig.
Wir führen unseren ersten Test durch und lassen uns je die Listen Categories und Layer anzeigen, die dem LayerManager zugeordnet sind:

Den Categories sind Layer zugeordnet. Eine Liste dieser Layer kann unter Angabe des Kategorie-Namens ausgegeben werden, z.B.:
Java |
---------- |
Category category = context.getLayerManager().getCategory("2013");
System.out.println(category.getLayerables().toString());
Das Hinzufügen oder Entfernen von Weiteren Kategorien bzw. Layern übernimmt OpenJump automatisch. Dehalb muss Categories im Normalfall nicht bearbeitet werden.
Da wir nun den Namen eines Layers kennen, können wir ihn uns vom Layer-Manager holen:
Java |
---------- |
Layer layer = context.getLayerManager().getLayer("Nutzflächen");
Der wichtigste Inhalt des Layers ist der FeatureCollectionWrapper, der das FeatureSchema und die Features selbst enthält:
Java |
---------- |
FeatureCollectionWrapper featureCollectionWrapper = layer.getFeatureCollectionWrapper();
Das FeatureSchema enthält die Namen bzw. Überschriften der Daten aus der Liste der Features:
Java |
---------- |
FeatureSchema featureSchema = featureCollectionWrapper.getFeatureSchema();
int attributeCount = featureSchema.getAttributeCount();
for(int i = 0; i < attributeCount; i++) {
System.out.print(featureSchema.getAttributeName(i) + " ");
}
System.out.println("");
Die Ausgabe auf der Konsole der Attributnahmen stimmt mit weniger Ausnahmen mit den Daten aus der ‚Objektinfo‘ überein:

Eine Ausnahme bildet dabei ‚geom‘, das die Polygon-Daten für die Fläche enthält. Das führt zu einem weiteren wichtigen Punkt, denn in der Liste von FeatureSchema, die die Attribute enthält ist nicht nur der Name des Attributs gespeichert, sondern auch der Typ (vergleichbar mit Java-Objekttyp) des Attributs:
Java |
---------- |
FeatureSchema featureSchema = featureCollectionWrapper.getFeatureSchema();
int attributeCount = featureSchema.getAttributeCount();
for(int i = 0; i < attributeCount; i++) {
System.out.println(i +" Name: " + featureSchema.getAttributeName(i)
Auf der Konsole sehen wir, dass in unseren Nutzflächen hauptsächlich die Attributs-Typen String und Integer verwendet werden, aber auch Geometry für ‚geom‘:
Konsole |
---------- |
0 Name: geom, Type: GEOMETRY
1 Name: f_id, Type: INTEGER
2 Name: official_id, Type: INTEGER
3 Name: name, Type: STRING
4 Name: creation, Type: INTEGER
(…)
Der Attribut-Typ wird durch das Enum AttributeType dargestellt, das folgende Möglichkeiten bietet:

Wir holen uns zuerst die Features vom Layer:
Java |
---------- |
List featureCollection = featureCollectionWrapper.getFeatures();
Features enthält eine Liste des Typs Object. Natürlich kann diese Liste tatsächlich Objekte enthalten oder auch andere Features, doch im Fall von „Nutzflächen“ enthält die Liste Objekte des Typs ‚BasicFeature‘, was wir hier ermitteln:
Java |
---------- |
System.out.println(featureCollection.get(0).getClass());
Liefert auf der Konsole: class com.vividsolutions.jump.feature.BasicFeature
Momentan wird in allen Manuela-Layern das BasicFeature genutzt. Deshalb casten wir das Objekt zum BasicFeature. Ein BasicFeature enthält vor allem eine Liste von Attributen, deren Klassen wir uns genauer ansehen:
Java |
---------- |
BasicFeature basicFeature = (BasicFeature) featureCollection.get(0);
Object[] objects = basicFeature.getAttributes();
for(int i = 0; i < objects.length; i++) {
if(objects[i] != null) {
System.out.println(objects[i].getClass());
} else {
System.out.println("null");
}
}
Als Ergebnis erhalten wir auf der Konsole eine Aufzählung von Objekttypen, die mit dem FeatureSchema übereinstimmt, falls der Wert nicht null ist:
Java |
---------- |
class com.vividsolutions.jts.geom.Polygon
class java.lang.Integer
null
class java.lang.String
class java.lang.Integer
(…)
Die besondere Bedeutung von ‚geom‘ wird auch dadurch deutlich, dass auf die Geometrie auch direkt zugegriffen werden kann alternativ zum Zugriff über die Attribute:
Java |
---------- |
BasicFeature basicFeature = (BasicFeature) featureCollection.get(0);
System.out.println(basicFeature.getGeometry());
