Jak pisać GML za pomocą Geotools?

Odpowiedzi:

9

Będę próbował migrować dokumentację narzędzi geotools do innej technologii (innej niż wiki), aby przykłady kodu nie były nieaktualne.

Aktualizacja jest już zakończona (zebrałem rzeczy, więc wszystkie przykłady geometrii są razem):

Oto kompletny przykład z tej strony:

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();

Dodatkowymi przykładami użycia 4 różnych technologii analizy GML są przypadki testowe dołączone do kodu źródłowego.

  1. SAX
  2. DOM
  3. GTXML wersja 1.x (używana dla GML2 w WFSDataStore VERSION = 1.0)
  4. GTXML wersja 4.x (używana teraz do wszystkiego innego)

Dwie technologie GTXML są w zasadzie połączeniem najlepszej części parsera SAX ze zdolnością do ustalenia, który fragment kodu (zwany wiązaniem) ma zostać użyty do parsowania każdego elementu w jego trakcie (na podstawie wyszukiwania elementu w elemencie schemat).

Jody Garnett
źródło
Otrzymuję następujący wyjątek podczas próby zakodowania SimpleFeatureCollection przy użyciu powyższego kodu. „java.lang.IllegalStateException: Nie można zakodować kolekcji funkcji przy użyciu GML2 (tylko WFS)”. Używam 8.3, jakiś pomysł?
Thomas
3

Próbować:

//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"));

Dokumentacja:

Mapperz
źródło
Prawidłowy link, nieprawidłowa próbka kodu? ;) ... Chyba miałeś na myśli org.geotools.xml.Encoder a not parser
underdark
tak jak wyżej. niestabilny dzień w Internecie ...
Mapperz
Zrobiłem [dzień kopiowania / wklejenia];)
Mapperz