3

WKB 文字列に苦労して数日が経ちました。同等のジオメトリを取得し、ポイント座標 (X、Y、Z) を抽出するには、それを解析できる必要があります。PostGIS 関数が使えません。私が見つけた唯一の Java ライブラリは、次のように使用する JTS Topology Suite でした。

String wkb = "01ea030000020000009b4d3899fe95154153d97e8f43875941000000000000454003085bc23f9615411b4dc406578759410000000000004740"
byte[] aux = WKBReader.hexToBytes(wkb);
try {
    Geometry geom = new WKBReader().read(aux);
} catch (ParseException e) {
    e.printStackTrace();
    System.err.println("Bad WKB string.");
}

しかし、それは私に次のエラーを与えます:

com.vividsolutions.jts.io.ParseException: 不明な WKB タイプ 234

234 は、16 進文字列「ea」の 10 進値です。JTS ライブラリは、リトル エンディアンの 1002 (つまり LineStringZ) に対応する 4 バイトの 'ea03' を調べる代わりに、最初の 2 バイトだけを調べていたようです。

私の質問は次のとおりです。JTS Topology Suite は LineStringZ を処理しますか? そうでない場合、ポイントが Z 値を持つことができるのはなぜですか? どうすれば正しく解析できますか?

読んでくれてありがとう!

4

3 に答える 3

0

JTS、少なくとも読み取りと書き込みで 3D ジオメトリをサポートしています。サポートは実際の 3D よりもむしろ 2.5D かもしれませんが、Z 値は操作で引き続き使用されます。問題は、WKB で XYZ、XYM、および XYZM ジオメトリを表示する方法が 2 つあることです。ソース コード ファイルhttps://sourceforge.net/p/jts-topo-suite/code/HEAD/tree/trunk/jts/java/src/com/のコメントからわかるように、JTS は PostGIS EWKB バリアントをサポートしています。 vividsolutions/jts/io/WKBWriter.java

  • この実装は、拡張 WKBもサポートしています。
  • 標準。拡張 WKB により、3 次元座標を書き込むことができます
  • ジオメトリ SRID 値を含みます。
  • 3D 座標の存在が示されます
  • wkbType ワードの上位ビットを設定します。
  • SRID の存在が示される
  • wkbType ワードの 3 番目のビットを設定します。
  • EWKB 形式は、元の SFS WKB 形式と上位互換性があります。

あなたの WKB は、OGC ドキュメントhttp://portal.opengeospatial.org/files/?artifact_id=25355で定義されている OGC バリアントです。

JTS は 4 桁のジオメトリ タイプ コードを認識しません。このメール スレッドは、さらに詳しい情報を提供します https://lists.osgeo.org/pipermail/geos-devel/2013-December/006757.html

于 2016-02-11T10:58:25.467 に答える
0

JT は 2D ジオメトリのみをサポートし、Z 値はサポートしていません。ポイントには X と Y しかありません。

于 2015-05-04T16:41:04.010 に答える