Comment écrire du GML avec Geotools?

Réponses:

9

J'essaierai de migrer la documentation des géotools vers une technologie différente (autre que wiki) afin que les exemples de code ne soient pas obsolètes.

La mise à jour est maintenant terminée (j'ai rassemblé les choses pour que tous les exemples de géométrie soient ensemble):

Voici un exemple complet de cette page:

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

Des exemples supplémentaires de la façon d'utiliser les 4 différentes technologies d'analyse GML sont les cas de test inclus avec le code source.

  1. SAXO
  2. DOM
  3. GTXML version 1.x (utilisé pour GML2 dans WFSDataStore VERSION = 1.0)
  4. GTXML version 4.x (utilisé pour tout le reste maintenant)

Les deux technologies GTXML sont essentiellement une combinaison de la meilleure partie de l'analyseur SAX avec la possibilité de déterminer quel fragment de code (appelé liaison) utiliser pour analyser chaque élément à mesure qu'il arrive (basé sur la recherche de l'élément dans le schéma).

Jody Garnett
la source
J'obtiens l'exception suivante lorsque j'essaie d'encoder un SimpleFeatureCollection en utilisant le code ci-dessus. "java.lang.IllegalStateException: impossible de coder une collection d'entités à l'aide de GML2 (uniquement WFS)". J'utilise 8.3, une idée?
Thomas
3

Essayer:

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

Documentation:

Mapperz
la source
Lien correct, exemple de code incorrect? ;) ... Je suppose que vous vouliez dire org.geotools.xml.Encoder et non parser
underdark
oui comme ci-dessus. flaky internet day ...
Mapperz
J'ai fait un jour d'erreur [copier / coller];)
Mapperz