Bagaimana cara menulis GML dengan Geotools?

Jawaban:

9

Saya akan mencoba untuk memigrasi dokumentasi geotool ke teknologi yang berbeda (selain wiki) sehingga contoh kode tidak ketinggalan zaman.

Perbarui ini sekarang dilakukan (saya mengumpulkan semuanya sehingga semua contoh geometri bersama-sama):

Ini adalah contoh lengkap dari halaman itu:

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

Contoh tambahan tentang cara menggunakan 4 teknologi parsing GML yang berbeda adalah kasus uji yang disertakan dengan kode sumber.

  1. SAKSOFON
  2. DOM
  3. GTXML versi 1.x (digunakan untuk GML2 di WFSDataStore VERSION = 1.0)
  4. GTXML versi 4.x (digunakan untuk yang lainnya sekarang)

Kedua teknologi GTXML pada dasarnya merupakan kombinasi bagian terbaik dari SAX parser dengan kemampuan untuk mencari tahu fragmen kode mana (yang disebut binding) untuk digunakan untuk mengurai setiap elemen saat masuk (berdasarkan melihat elemen di dalam skema).

Jody Garnett
sumber
Saya mendapatkan pengecualian berikut ketika mencoba untuk menyandikan SimpleFeatureCollection menggunakan kode di atas. "java.lang.IllegalStateException: Tidak dapat menyandikan koleksi fitur menggunakan GML2 (hanya WFS)". Saya menggunakan 8.3, ada ide?
Thomas
3

Mencoba:

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

Dokumentasi:

Mapperz
sumber
Tautan yang benar, contoh kode yang salah? ;) ... Tebak maksudmu org.geotools.xml.Encoder dan bukan parser
underdark
ya seperti diatas. hari internet yang flaky ...
Mapperz
Saya melakukan kesalahan [copy / paste];)
Mapperz