Как написать GML с Geotools?

Ответы:

9

Я буду пытаться перенести документацию geotools на другую технологию (кроме вики), чтобы примеры кода не устарели.

Обновление теперь сделано (я собрал все, чтобы все примеры геометрии были вместе):

Вот полный пример с этой страницы:

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

Дополнительные примеры того, как использовать 4 различные технологии синтаксического анализа GML, - это контрольные примеры, включенные в исходный код.

  1. SAX
  2. DOM
  3. GTXML версия 1.x (используется для GML2 в WFSDataStore VERSION = 1.0)
  4. GTXML версия 4.x (теперь используется для всего остального)

Две технологии GTXML представляют собой комбинацию лучшей части синтаксического анализатора SAX с возможностью выяснить, какой фрагмент кода (называемый привязкой) использовать для анализа каждого элемента по мере его поступления (на основе поиска элемента в схемы).

Джоди Гарнетт
источник
Я получаю следующее исключение при попытке закодировать SimpleFeatureCollection с помощью кода выше. msgstr "java.lang.IllegalStateException: невозможно кодировать коллекцию объектов с использованием GML2 (только WFS)". Я использую 8.3, любая идея?
Томас
5

Вы также можете посмотреть http://svn.osgeo.org/geotools/trunk/modules/library/xml/src/test/java/org/geotools/GMLTest.java, чтобы узнать, как это делают тесты. Ключевой раздел выглядит так:

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

    out.close();

Где коллекция - это особенность коллекции.

Ян Тертон
источник
3

Пытаться:

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

Документация:

Mapperz
источник
Правильная ссылка, неправильный пример кода? ;) ... думаю, вы имели в виду org.geotools.xml.Encoder, а не парсер
underdark
да, как указано выше.
ненадежный
Я сделал [копировать / вставить] день ошибки;)
Mapperz