Mehr

Hinzufügen von Features aus KML zu einem GeoPackage mit GeoTools

Hinzufügen von Features aus KML zu einem GeoPackage mit GeoTools


Mit GeoTools v13.2 muss ich einem GeoPackage aus KML Features hinzufügen. Bisher kann ich die Funktionen in einer SimpleFeatureCollection abrufen, die dem GeoPackage hinzugefügt werden kann:

public void addFeaturesToGeoPackage(InputStream featuresKML, GeoPackage-Geopaket) { Parser-Parser = neuer Parser (neue KMLConfiguration()); SimpleFeature f = (SimpleFeature) parser.parse(featuresKML); Ortsmarken der Sammlung = (Sammlung) f.getAttribute("Feature"); Aufführen featureList = neue ArrayList(Ortsmarken); //SimpleFeatureCollection abrufen SimpleFeatureCollection featureCollection = DataUtilities.collection(features); //Das Feature-Schema abrufen SimpleFeatureType-Schema = featureCollection.getSchema(); //TODO: FeatureEntry aus Schema erstellen FeatureEntry featureEntry = createFeatureEntry(schema); //Erzeuge die Geometrietabelle geopackage.create(featureEntry, schema); //Alle Features hinzufügen geopackage.add(featureEntry, featureCollection); }

Ich bin mir nicht sicher, wie der FeatureEntry erstellt wird, da das, was ich derzeit verwende, dem Attribut "geometryColumnName" einen willkürlichen Namen gibt, der eine java.lang.IllegalArgumentException verursacht:

Verursacht durch: java.lang.IllegalArgumentException: Geometriespalte featureVectors existiert nicht im Schema

Dies ist, was ich basierend auf der Dokumentation und den Beispielen finden konnte, die ich durch einige Google-Suchen finden konnte, aber ich würde gerne wissen, wie man dies richtig macht / den FeatureEntry erhält.


Die Antwort auf Ihre Frage scheint ein Code zu sein wie:

privater FeatureEntry createFeatureEntry(SimpleFeatureType-Schema, ReferencedEnvelope bbox) { FeatureEntry ret = new FeatureEntry(); ret.setGeometryColumn(schema.getGeometryDescriptor().getLocalName()); GeometryType-Typ = schema.getGeometryDescriptor().getType(); Geometrien gType = Geometries.getForName(type.getName().getLocalPart()); ret.setGeometryType(gType); ret.setBounds(bbox); Rückkehr ret; }

Aber ich muss gestehen, dass es jetzt funktioniert und ein GeoPackage schreibt, wenn ich versuche, es in QGis einzulesen, aber keine Karte bekomme, weil QGis die Geometrie als String liest. Ich bin mir nicht sicher, ob es an mir oder an QGis liegt. Ich schau mal, ob ich Zeit finde, weiter zu recherchieren.

Wenn Sie das gleiche Problem sehen, können Sie in der Geotools-Benutzerliste nachfragen.


Schau das Video: QGIS GML Application Schema. Simple GML file conversion