形式の理解:WKTからのWKB、および最初の形式を後者に変換する方法[終了]


8

データの形式がわかりません。列名はwkb_geomなので、データはWKB形式であると想定していましたが、確認してみたところ、その例が見つかりませんでした。データは次のとおりです:

"0106000020E6100000010000000103000000010000007218000007000060B1D42B4010000060A372454007000060B1D42B40030000009D724540030000E0D5D42B40030000009D724540030000E0D5D42B40050000C08A7245400B000040FAD42B40050000C08A7245400B000040FAD42B40130000807B7245400B000040FAD4 (...)

WKBまたはWKT形式ですか?2番目の質問です。WKB形式の場合、どうすればWKT形式に変換できますか?私はこの提案に従おうとしていました

WKBをWKTに変換する方法

だからクエリは

UPDATE "ita_adm1"
SET wkb_geometry  = ST_GeomFromWKB("wkb_geometry",4326)

しかし、関数ST_GeomFromWKBは存在しないと言い続けています。


1
これは、WKB自体ではなく、WKBの16進ダンプです。
ビンス

1
どのソフトウェア環境を使用していますか?例のようにそれはPostGISですか、それとも何か他のものですか?また、Postgresqlを使用している場合は、PostGISがインストールされていますか(Postgresqlの標準部分ではないため、関数が見つからない理由を説明している可能性があります-確認できますか?最後に、PostGISはジオメトリを16進形式で格納します(Vinceのコメントに注意)、 ST_AsTextを試したことがありますか?
MappaGnosis、

はい、PostgreSQL環境でPostGISを使用しています。すでにフォローしているスレッドで提案されていたので、私もそれを試しました... Paul Ramseyの機能すべて試しました。エラー:ジオメトリSRID(0)が列SRID(4326)と一致しません
user3520314

回答:


18

一般的に、これは16進エンコードされたWKBと呼ばれます。この特定の例は、EWKBと呼ばれる拡張バージョンです。これは、で見つかったSRID = 4326であるためE6100000です。

WKBはいくつかの形式で表示できます。16進エンコードされた文字列表現が最も一般的です。これが実際のテキストの場合、単純な::geometryキャストを使用して変換できます。

SELECT ST_AsText(wkb_geometry), ST_AsEWKT(wkb_geometry)
FROM (
  SELECT '0106000020620D000001000000010300000001000000040000000000000'
  '00000000000000000000000000000000000000000000000000000F03F000000000'
  '0000040000000000000004000000000000000000000000000000000'::geometry AS wkb_geometry
) AS f;
-[ RECORD 1 ]------------------------------------------
st_astext | MULTIPOLYGON(((0 0,0 1,2 2,0 0)))
st_asewkt | SRID=3426;MULTIPOLYGON(((0 0,0 1,2 2,0 0)))

ST_GeomFromWKBは、生のbyteaバイナリストリームの場合にのみ使用してください

さらに、ジオメトリデータがPostGISデータベースから選択されると、16進数にエンコードされたEWKB表現がクエリ結果に表示されます。WKTまたはEWKT表現を取得するために、使用ST_AsText又はST_AsEWKT上に示されているように、機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.