Vidím knihovny jako shape z shapely.geometry, které podporují převod na binární soubory WKB a WKT. To, co nemohu najít, je návod na konkrétní převod na EWKB.

Mám podezření, že je to proto, že knihovny, které podporují převod WKB, také podporují EWKB? Jak zjistím, zda vytvářím EWKB vs WKB? Jsou všechny WKB také EWKB (ale ne naopak)?

Pokud je EWKB rozšířením WKB, jak bych zkontroloval, že, řekněme, Shapely, podporuje formát EWKB?

Snažím se pochopit, jestli je EWKB standardní nebo něco, co bylo právě postaveno pro PostGIS (kde jsem to viděl použit) a jak se mohu ujistit, že data, která produkuji, pro funkci, která očekává, že EWKB mohou být správně formátována.

Z důvodu komentáře @shongololo jsem chtěl přidat úryvek z toho, co v současné době generuji, aby se vygeneroval WKB tvaru z GeoJSON.

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

Komentáře

  • S utvářením použijte modul wkb a nastavte volbu hex na true, např. wkb.loads (geom, hex = true)
  • Díky @shongololo – Nějaká šance, že byste mohli rozvinout, co dělá hexadecimální booleovský parametr? Vypadá to, že používáte knihovnu wkb? Je to od Shapelyho?

Odpověď

Shapely je založen na GEOS, který nativně čte / zapisuje EWK B. Podpora Z-dimenze EWKB (odlišná od ISO) je dobře podporována GEOS / Shapely, ale získávání / nastavování SRID je skrytá funkce. Zde je rychlá ukázka:

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 

Upozorňujeme, že pokud není použit SRID a geometrie jsou jednoduché 2D, jsou ISO WKB a EWKB stejné.

Komentáře

  • Díky, toto je úžasná odpověď. Doufám, že to nebylo ' t " špatná forma " přepnutí na nejlepší odpověď, ale nejpřímější řešení otázky a poskytnutí příkladů, které jsou okamžitě použitelné.

Odpověď

Odpověď na vaši otázku

Je nějaká šance, že byste mohli rozvinout, co dělá hexadecimální logická hodnota jako parametr?

Vrací řetězec kódovaný hexadecimálně. Modul, na který odkazoval ( wkb) je urostlý modul.

Zde je stránka dokumentace pro urovnání. může na stránce vyhledat (ctrl + f) výraz shapely.wkb.loads.

potomstvo, výše uvedená otázka byla odpovědí na odpověď od shongolola.

S tvarově použijte modul wkb a nastavte hex na true, např. wkb.loads (geom, hex = true) – shongololo

Komentáře

  • Děkuji. A když hex je pravda, produkt je soubor EWKB? Znamená to, že všechny EWKB jsou kódovány v hexadecimálním formátu WKB? Měl jsem " tušení ", že zahrnutí SRID bylo také součástí EWKB a není ve výchozím nastavení zahrnuto do WKB. Je nějaká šance, že je to pravda, nebo to, co říkám, má v tomto ohledu smysl?
  • Domnívám se, že hexadecimální kódovaný WKB je EWKB. Myslím, že máte také pravdu, když si myslíte, že EWKB má SRID. Zde je odkaz na další otázku . První odpověď hodně vysvětluje EWKB. Navrhoval bych také podívat se na související informace z odpovědi.
  • Ne, hexadecimální kód WKB je pouze ne-binární reprezentace WKB. EWKB může obsahovat SRID. postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *