Wie schreibe ich GML mit Geotools?


Antworten:


9

Ich werde versuchen, die Geotool-Dokumentation auf eine andere Technologie (außer Wiki) zu migrieren, damit die Codebeispiele nicht veraltet sind.

Das Update ist jetzt abgeschlossen (ich habe die Dinge so zusammengestellt, dass alle Geometriebeispiele zusammen sind):

Hier ist ein vollständiges Beispiel von dieser Seite:

SimpleFeatureType TYPE = DataUtilities.createType("location", "geom:Point,name:String");

File locationFile = new File("location.xsd");
locationFile = locationFile.getCanonicalFile();
locationFile.createNewFile();

URL locationURL = locationFile.toURI().toURL();
URL baseURL = locationFile.getParentFile().toURI().toURL();

FileOutputStream xsd = new FileOutputStream(locationFile);

GML encode = new GML(Version.GML2);
encode.setBaseURL(baseURL);
encode.setNamespace("location", locationURL.toExternalForm());
encode.encode(xsd, TYPE);

xsd.close();

SimpleFeatureCollection collection = FeatureCollections.newCollection("internal");
WKTReader2 wkt = new WKTReader2();

collection.add(SimpleFeatureBuilder.build(TYPE, new Object[] { wkt.read("POINT (1 2)"),"name1" }, null));
collection.add(SimpleFeatureBuilder.build(TYPE, new Object[] { wkt.read("POINT (4 4)"),"name2" }, null));

ByteArrayOutputStream xml = new ByteArrayOutputStream();

GML encode2 = new GML(Version.GML2);
encode2.setBaseURL(baseURL);
encode2.setNamespace("location", "location.xsd");
encode2.encode(out2, collection);

xml.close();

String gml = xml.toString();

Weitere Beispiele für die Verwendung der 4 verschiedenen GML-Parsing-Technologien sind die im Quellcode enthaltenen Testfälle.

  1. SAXOPHON
  2. DOM
  3. GTXML Version 1.x (wird für GML2 in WFSDataStore VERSION = 1.0 verwendet)
  4. GTXML Version 4.x (wird jetzt für alles andere verwendet)

Die beiden GTXML-Technologien sind im Grunde genommen eine Kombination aus dem besten Teil des SAX-Parsers und der Fähigkeit, herauszufinden, welches Codefragment (als Bindung bezeichnet) zum Parsen jedes eingehenden Elements verwendet werden soll (basierend auf dem Nachschlagen des Elements in der Schema).


Beim Versuch, eine SimpleFeatureCollection mit dem obigen Code zu codieren, wird die folgende Ausnahme angezeigt. "java.lang.IllegalStateException: Eine Feature-Sammlung kann nicht mit GML2 (nur WFS) codiert werden". Ich benutze 8.3, eine Idee?
Thomas


3

Versuchen:

//create the encoder with the gml 2.0 configuration
org.geotools.xml.Configuration configuration = new org.geotools.gml2.GMLConfiguration();
org.geotools.xml.Encoder encoder = new org.geotools.xml.Encoder( configuration );

//output stream to serialize to
OutputStream xml = ...

//encode
encoder.encode( featureCollection, new QName( "http://www.geotools.org/test", "featureType1"));

Dokumentation:


Richtiger Link, falsches Codebeispiel? ;) ... Vermutlich meintest du org.geotools.xml.Encoder und nicht Parser
underdark

ja wie oben. flockiger Internet-Tag ...
Mapperz

Ich habe [einen Kopier- /
Einfüge-
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.