Como escrever GML com Geotools?

Respostas:

9

Tentarei migrar a documentação do geotools para uma tecnologia diferente (que não seja a wiki) para que os exemplos de código não desatualizem.

A atualização agora está concluída (juntei as coisas para que todos os exemplos de geometria estejam juntos):

Aqui está um exemplo completo dessa 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();

Exemplos adicionais de como usar as quatro tecnologias de análise GML diferentes são os casos de teste incluídos no código-fonte.

  1. SAXOFONE
  2. DOM
  3. GTXML versão 1.x (usada para GML2 no WFSDataStore VERSION = 1.0)
  4. GTXML versão 4.x (usada para todo o resto agora)

As duas tecnologias GTXML são basicamente uma combinação da melhor parte do analisador SAX, com a capacidade de descobrir qual fragmento de código (chamado de ligação) a ser usado para analisar cada elemento à medida que ele entra (com base na procura do elemento no diretório esquema).

Jody Garnett
fonte
Estou recebendo a seguinte exceção ao tentar codificar uma SimpleFeatureCollection usando o código acima. "java.lang.IllegalStateException: não é possível codificar uma coleção de recursos usando o GML2 (apenas WFS)". Estou usando 8.3, alguma ideia?
Thomas
3

Tentar:

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

Documentação:

Mapperz
fonte
Link correto, amostra de código incorreta? ;) ... Acho que você quis dizer org.geotools.xml.Encoder e não parser
underdark
sim como acima. dia da internet esquisito ...
Mapperz
Eu fiz um dia de erro [copiar / colar];)
Mapperz