Як писати 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, використовуючи наведений вище код. "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"));

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


Правильне посилання, неправильний зразок коду? ;) ... Здогадайтесь, ви мали на увазі org.geotools.xml.Encoder, а не парсер
underdark

так, як вище. лускатий день в Інтернеті ...
Mapperz

Я зробив [копію / вставити] день помилки;)
Mapperz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.