9 votos

¿Cómo escribir GML con Geotools?

Me gustaría escribir GML utilizando Geotools. Desafortunadamente, no puedo encontrar documentación sobre un GML Writer (excepto este de 2006: http://docs.codehaus.org/display/GEOTOOLS/WFS+++GML+DataStore ).

¿Podría indicarme la documentación/ejemplos?

9voto

Voy a intentar migrar la documentación de geotools a una tecnología diferente (que no sea wiki) para que los ejemplos de código no queden desfasados.

Actualización esto ya está hecho (he reunido las 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();

Los casos de prueba que se incluyen con el código fuente son ejemplos adicionales de cómo utilizar las 4 tecnologías diferentes de análisis sintáctico de GML.

  1. SAX
  2. DOM
  3. GTXML versión 1.x (utilizado para GML2 en WFSDataStore VERSION=1.0)
  4. GTXML versión 4.x (utilizado 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 averiguar qué fragmento de código (llamado binding) se utiliza para analizar cada elemento a medida que entra (basándose en la búsqueda del elemento en el esquema).

5voto

Adam Ernst Puntos 6939

También puede consultar http://svn.osgeo.org/geotools/trunk/modules/library/xml/src/test/java/org/geotools/GMLTest.java para ver cómo lo hacen las pruebas. La sección clave parece ser:

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

    out.close();

Donde la colección es una featureCollection.

3voto

Erik Öjebo Puntos 6937

Inténtalo:

//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:

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X