Näen kirjastot, kuten shape osoitteesta shapely.geometry, jotka tukevat muuntaminen WKB- ja WKT-binaareiksi. Mitä en löydä, on ohjeet erityisesti EWKB: ksi siirtymisestä.

Epäilen tämän johtuvan siitä, että WKB-muunnosta tukevat kirjastot tukevat myös EWKB: tä? Mistä tiedän, luonko EWKB vs. WKB? Ovatko kaikki WKB myös EWKB (mutta eivät päinvastoin)?

Jos EWKB on WKB: n laajennus, kuinka voin tarkistaa, että esimerkiksi Shapely tukee EWKB-muotoa?

Yritän ymmärtää, onko EWKB vakio vai jotain, joka on juuri rakennettu PostGIS: ää varten (missä olen nähnyt sen käytetyn) ja kuinka voin varmistaa, että EWKB: n odottavalle toiminnolle tuottamani tiedot voidaan muotoilla oikein.

@shongololon kommentin takia halusin lisätä katkelman siitä, mitä aion tällä hetkellä luoda muodon WKB GeoJSONista.

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

Kommentit

  • Käytä wkb-moduulia muodollisesti ja aseta hex-asetukseksi true, esim. wkb.loads (geom, hex = true)
  • Kiitos @shongololo – Mahdollisuudet voisit tarkentaa, mitä hex-looginen parametri mukaan lukien tekee? Näyttää siltä, että käytät kirjastoa wkb? Onko se peräisin Shapelystä?

Vastaus

Shapely perustuu GEOS: iin, joka lukee / kirjoittaa luonnollisesti EWK: ta B. GEOS / Shapely tukee hyvin EWKB: n Z-ulottuvuustukea (erilainen kuin ISO), mutta SRID-tunnusten saaminen / asettaminen on piilotettu ominaisuus. Tässä on nopea esittely:

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 

Huomaa, että jos SRID: tä ei käytetä ja geometriat ovat yksinkertaisia 2D, ISO WKB ja EWKB ovat samat.

Kommentit

  • Kiitos, tämä on loistava vastaus. Toivon, että sitä ei ollut ' t " huono muoto " vaihtaaksesi tämän parhaan vastauksen, mutta se vastaa suoraan kysymykseen ja tarjoaa välittömästi soveltuvia esimerkkejä.

Vastaa

Vastaa kysymykseesi

Voisitko tarkentaa, mitä hex-looginen parametri mukaan lukien tekee?

Se palauttaa heksakoodatun merkkijonon. Moduuli, johon hän viittasi ( wkb) on muodokas moduuli.

Tässä on muotoilun -dokumentaatio -sivu. voi hakea sivulta (ctrl + f) sanaa shapely.wkb.loads.

jälkipolville, edellä mainittu kysymys oli vastaus shongololon vastaukseen.

Käytä wkb-moduulia muodollisesti ja aseta hex-vaihtoehto tosi, esim. wkb.loads (geom, hex = true) – shongololo

Kommentit

  • Kiitos. Ja kun hex on totta, tuote on EWKB-tiedosto? Tarkoittaako tämä, että kaikki EWKB on WKB-heksakoodattu? Minulla oli " aavistus " että SRID-sisällyttäminen oli myös EWKB: n osa eikä sitä ole oletusarvoisesti WKB: ssä. Kaikki mahdollisuudet, että tämä on totta tai mitä sanon, on jopa järkevää tältä osin?
  • Uskon, että heksakoodattu WKB on EWKB. Mielestäni olet myös oikeassa ajattellessasi, että EWKB: llä on SRID. Tässä on linkki toiseen kysymykseen . Ensimmäinen vastaus selittää paljon EWKB: stä. Ehdotan myös, että tarkastellaan linkitettyä tietoa vastauksesta.
  • Ei, heksakoodattu WKB on vain ei-binäärinen WKB: n esitys. EWKB voi sisältää SRID: n. postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *