¿Cómo escribir GML con Geotools?


Respuestas:


9

Intentaré migrar la documentación de geotools a una tecnología diferente (que no sea wiki) para que los ejemplos de código no se desactualicen.

Actualice esto ya está hecho (reuní cosas para que todos los ejemplos de geometría estén juntos):

Aquí hay un ejemplo completo de esa página:

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

Ejemplos adicionales de cómo usar las 4 tecnologías de análisis GML diferentes son los casos de prueba incluidos con el código fuente.

  1. SAXÓFONO
  2. DOM
  3. GTXML versión 1.x (utilizado para GML2 en WFSDataStore VERSION = 1.0)
  4. GTXML versión 4.x (usado para todo lo demás ahora)

Las dos tecnologías GTXML son básicamente una combinación de la mejor parte del analizador SAX con la capacidad de descubrir qué fragmento de código (llamado enlace) usar para analizar cada elemento a medida que entra (basado en buscar el elemento en el esquema).


Recibo la siguiente excepción cuando intento codificar una colección SimpleFeatureCollection usando el código anterior. "java.lang.IllegalStateException: no se puede codificar una colección de características usando GML2 (solo WFS)". Estoy usando 8.3, ¿alguna idea?
Thomas


3

Tratar:

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

Documentación:


Enlace correcto, muestra de código incorrecto? ;) ... Supongo que te refieres a org.geotools.xml.Encoder y no analizador
underdark

Sí como arriba. flaky internet day ...
Mapperz

Hice un día de error [copiar / pegar];)
Mapperz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.