Come scrivere GML con Geotools?


Risposte:


9

Cercherò di migrare la documentazione dei geotools su una tecnologia diversa (diversa da wiki) in modo che gli esempi di codice non vadano fuori moda.

Aggiorna questo fatto ora (ho raccolto le cose in modo che tutti gli esempi di geometria siano insieme):

Ecco un esempio completo da quella pagina:

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

Ulteriori esempi su come utilizzare le 4 diverse tecnologie di analisi GML sono i casi di test inclusi nel codice sorgente.

  1. SAX
  2. DOM
  3. GTXML versione 1.x (utilizzato per GML2 in VERSIONE WFSDataStore = 1.0)
  4. GTXML versione 4.x (utilizzato per tutto il resto ora)

Le due tecnologie GTXML sono fondamentalmente una combinazione della parte migliore del parser SAX con la capacità di capire quale frammento di codice (chiamato associazione) utilizzare per analizzare ogni elemento quando arriva (basato sulla ricerca dell'elemento nel schema).


Ricevo la seguente eccezione quando provo a codificare un SimpleFeatureCollection usando il codice sopra. "java.lang.IllegalStateException: impossibile codificare una raccolta di funzionalità utilizzando GML2 (solo WFS)". Sto usando 8.3, qualche idea?
Thomas


3

Provare:

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

Documentazione:


Collegamento corretto, esempio di codice errato? ;) ... Immagino che intendevi org.geotools.xml.Encoder e non parser
underdark

si come sopra. internet traballante ...
Mapperz

Ho fatto un giorno di errore [copia / incolla];)
Mapperz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.