shapely.geometry
のshape
などのライブラリがサポートされていますWKBおよびWKTバイナリへの変換。私が見つけられないのは、特にEWKBへの変換に関するガイダンスです。
これは、WKB変換をサポートするライブラリがEWKBもサポートしているためだと思いますか? EWKBとWKBのどちらを作成しているかを知るにはどうすればよいですか?すべてのWKBもEWKBですか(ただし、その逆ではありません)?
EWKBがWKBの拡張である場合、たとえば、ShapelyがEWKB形式をサポートしていることを確認するにはどうすればよいですか?
EWKBが標準なのか、PostGIS用に構築されたばかりなのか(使用されているのを見たところ)、EWKBを期待する関数用に生成しているデータを正しくフォーマットできることを確認する方法を理解しようとしています。
@shongololoのコメントのため、GeoJSONから形状のWKBを生成するために現在行っているもののスニペットを追加したいと思いました。
from shapely.geometry import shape import binascii # convert geom to wkb format geom_str = json.dumps(route["geometry"]) geom_geo = geojson.loads(geom_str) geom_shp = shape(geom_geo) geom_wkb = geom_shp.to_wkb() geom_cln = binascii.hexlify(geom_wkb).decode("ascii")
コメント
- wkbモジュールを適切に使用し、hexオプションをtrueに設定します(例:wkb.loads(geom、hex = true)
- ありがとう@ shongololo-パラメータとして16進ブール値を含めることで何が行われているのか詳しく説明できる可能性がありますか?ライブラリwkbを使用しているように見えますか?それはShapelyからのものですか?
回答
Shapelyは、EWKをネイティブに読み取り/書き込みするGEOSに基づいていますB。 EWKBのZ次元サポート(ISOとは異なります)はGEOS / Shapelyによって十分にサポートされていますが、SRIDの取得/設定は隠された機能です。ここに「簡単なデモ」があります:
from shapely import geos, wkb, wkt # Show EWKB p = wkt.loads("POINT Z(1 2 3)") print(p.wkb_hex) # This is little endian EWKB with just PointZ bit set # 0101000080000000000000F03F00000000000000400000000000000840 # Change a the default mode to add this, if SRID is set geos.WKBWriter.defaults["include_srid"] = True # Get/Set SRID print(geos.lgeos.GEOSGetSRID(p._geom)) # 0, or unset # Set it to EPSG:4326 geos.lgeos.GEOSSetSRID(p._geom, 4326) print(p.wkb_hex) # This is little endian EWKB with SRID and PointZ bit set # 01010000A0E6100000000000000000F03F00000000000000400000000000000840 # And for fun, change the output to big endian geos.WKBWriter.defaults["big_endian"] = True print(p.wkb_hex) # 00A0000001000010E63FF000000000000040000000000000004008000000000000
SRIDが使用されておらず、ジオメトリが単純な2Dの場合、ISOWKBとEWKBは同じであることに注意してください。
p>
コメント
- ありがとう、これは素晴らしい答えです。' t "不正な形式"は、これを最良の回答に切り替えますが、質問に最も直接的に対処し、すぐに適用できる例を提供します。
回答
質問に回答するには
パラメータとして16進ブール値を含めることで何が行われているのかを詳しく説明できる可能性はありますか?
16進エンコードされた文字列を返します。彼が参照したモジュール( wkb
)は形の良いモジュールです。
ここに形の良いドキュメントのページがあります。ページ(ctrl + f)でshapely.wkb.loads
を検索できます。
For後世、上で引用した質問は、shongololoによる回答への回答でした。
wkbモジュールを適切に使用し、hexオプションをtrueに設定します。 wkb.loads(geom、hex = true)– shongololo
コメント
- ありがとうございます。そして、16進数が真の場合、製品はEWKBファイルですか?それは、すべてのEWKBがWKB 16進エンコードされていることを意味しますか? " hunch "がありましたが、SRIDの包含もEWKBのコンポーネントであり、デフォルトではWKBに含まれていません。これが真実である可能性、または私が言っていることはその点でさえ意味がありますか?
- 16進エンコードされたWKBはEWKBであると思います。 EWKBにはSRIDがあると考えるのも正しいと思います。別の質問へのリンクは次のとおりです。最初の答えはEWKBについて多くを説明しています。また、回答からリンクされた情報を確認することをお勧めします。
- いいえ、16進エンコードされたWKBは、WKBの非バイナリ表現にすぎません。 EWKBにはSRIDを含めることができます。 postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT