Ik zie bibliotheken zoals shape van shapely.geometry die ondersteuning bieden conversie naar WKB- en WKT-binaries. Wat ik niet kan vinden, zijn richtlijnen voor het specifiek converteren naar EWKB.

Ik vermoed dat dit komt doordat bibliotheken die WKB-conversie ondersteunen, ook EWKB ondersteunen? Hoe weet ik of ik een EWKB versus WKB maak? Zijn alle WKB ook EWKB (maar niet andersom)?

Als EWKB een extensie is van WKB, hoe zou ik dan controleren of, bijvoorbeeld Shapely, het EWKB-formaat ondersteunt?

Ik probeer te begrijpen of EWKB standaard is of iets dat zojuist is gebouwd voor PostGIS (waar ik het heb zien gebruiken) en hoe ik ervoor kan zorgen dat de gegevens die ik produceer voor een functie die verwacht dat EWKB correct kan worden opgemaakt.

Vanwege de opmerking van @shongololo wilde ik een fragment toevoegen van wat ik momenteel ga genereren om de WKB van de vorm van GeoJSON te genereren.

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

Reacties

  • Gebruik met shapely de wkb-module en stel de hex-optie in op true, bijv. wkb.loads (geom, hex = true)
  • Bedankt @shongololo – Is er een kans dat je zou kunnen uitweiden over wat inclusief de hex boolean als parameter doet? Het lijkt erop dat je een bibliotheek wkb gebruikt? Komt dat van Shapely?

Answer

Shapely is gebaseerd op GEOS, dat native EWK leest / schrijft B. De Z-dimensie ondersteuning van EWKB (anders dan ISO) wordt goed ondersteund door GEOS / Shapely, maar het verkrijgen / instellen van SRIDs is een verborgen functie. Hier “een korte demo:

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 

Merk op dat als SRID niet wordt gebruikt en de geometrieën eenvoudig 2D zijn, ISO WKB en EWKB hetzelfde zijn.

Reacties

  • Bedankt, dit is een geweldig antwoord. Ik hoop dat het niet ' t " slechte vorm " om dit naar het beste antwoord te veranderen, maar het behandelt de vraag het meest direct en geeft voorbeelden die onmiddellijk van toepassing zijn.

Antwoord

Om op uw vraag te reageren

Is er een kans dat je kunt uitweiden over wat inclusief de hex boolean als parameter doet?

Het retourneert een hexadecimale tekenreeks. De module waarnaar hij verwees ( wkb) is een fraai gevormde module.

Hier is de documentatie pagina voor welgevormde. Jij kan de pagina (ctrl + f) doorzoeken op shapely.wkb.loads.

Voor nageslacht, de hierboven geciteerde vraag was een antwoord op een antwoord van shongololo.

Gebruik met een mooi gevormde wkb-module en zet de hex-optie op true, bijv. wkb.loads (geom, hex = true) – shongololo

Reacties

  • Bedankt. En als hex waar is, is het product een EWKB-bestand? Betekent dit dat alle EWKB is WKB hex-gecodeerd? Ik had een " voorgevoel " dat SRID-opname ook een onderdeel was van EWKB en niet standaard in WKB is opgenomen. Is er een kans dat dit waar is of dat wat ik zeg in dat opzicht zelfs logisch is?
  • Ik geloof dat hex-gecodeerde WKB EWKB is. Ik denk dat u ook gelijk heeft als u denkt dat EWKB een SRID heeft. Hier is een link naar een andere vraag . Het eerste antwoord legt veel uit over EWKB. Ik zou ook willen voorstellen om naar de gekoppelde informatie van het antwoord te kijken.
  • Nee, hex-gecodeerde WKB is slechts een niet-binaire weergave van WKB. EWKB kan een SRID bevatten. postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *