Olyan könyvtárakat látok, mint a shape
a shapely.geometry
-ből, amelyek támogatják átalakítás WKB és WKT bináris fájlokká. Amit nem találok, az az EWKB-re való áttérés útmutatása.
Gyanítom, hogy ez azért van, mert a WKB átalakítást támogató könyvtárak is támogatják az EWKB-t? Honnan tudhatom, hogy EWKB-t hozok létre a WKB-vel szemben? Az összes WKB is EWKB (de nem fordítva)?
Ha az EWKB a WKB kiterjesztése, hogyan ellenőrizhetném, hogy mondjuk a Shapely támogatja-e az EWKB formátumot?
Megpróbálom megérteni, hogy az EWKB szabványos-e, vagy valami, ami épp a PostGIS-hez készült (ahol láttam használni), és hogyan tudok megbizonyosodni arról, hogy az EWKB-re számító függvény számára előállított adatok helyesen formázhatók-e.
A @shongololo hozzászólása miatt hozzá akartam adni egy részletet arról, hogy jelenleg miként fogom létrehozni az alakzat WKB-jét a GeoJSON-ból.
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")
Megjegyzések
- Formázással használja a wkb modult, és állítsa a hex opciót igazra, pl. wkb.loads (geom, hex = true)
- Köszönet @ shongololo – Bármilyen esély van arra, hogy részletezhesse, mit csinál a hexadolgú logikai paraméter paraméterként? Úgy tűnik, hogy wkb könyvtárat használ? Shapely-től származik?
Válasz
A Shapely alapja a GEOS, amely natív módon olvassa / írja az EWK-t B. Az EWKB (az ISO-tól eltérő) Z-dimenziós támogatását a GEOS / Shapely jól támogatja, de az SRID megszerzése / beállítása rejtett szolgáltatás. Itt a gyors bemutató:
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
Ne feledje, hogy ha az SRID-t nem használják és a geometriák egyszerűek 2D-vel, akkor az ISO WKB és az EWKB megegyezik.
Megjegyzések
- Köszönöm, ez egy fantasztikus válasz. Remélem, hogy nem ' t " rossz forma ", hogy ezt a legjobb válaszra kapcsolja, de ez a legközvetlenebben foglalkozik a kérdéssel, és azonnal alkalmazható példákkal szolgál.
Válasz
Válasz a kérdésére
Esetleg részletezheti, hogy mit csinál a hex boolean, mint paraméter?
Ez egy hexakódolt karakterláncot ad vissza. Az általa hivatkozott modul ( A wkb
) egy formás modul.
Itt található a formás dokumentációs oldal. kereshet az oldalon (ctrl + f) a shapely.wkb.loads
kifejezésre.
az utókor számára a fent idézett kérdés válaszként válaszolt shongololo válaszára.
A formás használat esetén a wkb modult állítsa igazra a hex opciót, pl. wkb.loads (geom, hex = true) – shongololo
Megjegyzések
- Köszönöm. És ha a hex értéke igaz, a termék egy EWKB fájl? Ez azt jelenti, hogy az összes EWKB WKB hex kódolású? Volt egy " sejtésem ", hogy az SRID felvétele szintén az EWKB alkotóeleme volt, és alapértelmezés szerint nem szerepel a WKB-ban. Bármilyen esély van rá, hogy igaz, vagy amit mondok, még van értelme is ebben a tekintetben?
- Úgy gondolom, hogy a hexakódolású WKB az EWKB. Azt hiszem, abban is igazad van, hogy az EWKB-nek SRID-je van. Itt található egy link egy másik kérdésre . Az első válasz sokat magyaráz az EWKB-ről. Azt is javasolnám, hogy a válaszból nézzük meg az összekapcsolt információkat.
- Nem, a hexakódolású WKB csak nem bináris ábrázolása a WKB-nek. Az EWKB tartalmazhat SRID-t. postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT