GeotoolsでGMLを書く方法は?


回答:


9

コード例が古くならないように、geotoolsのドキュメントを別のテクノロジ(wiki以外)に移行しようとしています。

これが更新されました(すべてのジオメトリの例が一緒になるようにまとめました):

そのページの完全な例を次に示します。

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

4つの異なるGML解析技術の使用方法の追加例は、ソースコードに含まれているテストケースです。

  1. サックス
  2. DOM
  3. GTXMLバージョン1.x(WFSDataStore VERSION = 1.0のGML2に使用)
  4. GTXMLバージョン4.x(現在、他のすべてに使用されています)

2つのGTXMLテクノロジーは、基本的に、SAXパーサーの最良の部分と、各要素を(要素の検索に基づいて)解析するために使用するコードのフラグメント(バインディングと呼ばれる)を判別する機能の組み合わせです。スキーマ)。


上記のコードを使用してSimpleFeatureCollectionをエンコードしようとすると、次の例外が発生します。「java.lang.IllegalStateException:GML2(WFSのみ)を使用して機能コレクションをエンコードできません」。8.3を使用していますが、何かアイデアはありますか?
トーマス

5

また、http://svn.osgeo.org/geotools/trunk/modules/library/xml/src/test/java/org/geotools/GMLTest.javaを見て、テストがどのように実行するかを確認することもできます。重要なセクションは次のようです:

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

    out.close();

コレクションはfeatureCollectionです。


3

試してください:

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

ドキュメンテーション:


正しいリンク、間違ったコードサンプル?;)...パーサーではなくorg.geotools.xml.Encoderを意味していたと思います
アンダーダーク

上記のように。
不安定

[コピー/貼り付け]エラーが発生しました;)
Mapperz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.