¿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).

Jody Garnett
fuente
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:

Mapperz
fuente
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