shapely.geometryshape과 같은 라이브러리가 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에서 제공 한 것입니까?

Answer

Shapely는 기본적으로 EWK를 읽고 쓰는 GEOS를 기반으로합니다. 비. 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 인 경우 ISO WKB와 EWKB는 동일합니다.

p>

댓글

  • 감사합니다. 훌륭한 답변입니다. ' " 잘못된 형식 "을 사용하여이를 우수 답변으로 전환하지만 가장 직접적으로 질문을 해결하고 즉시 적용 가능한 예를 제공합니다.

답변

질문에 응답하려면

16 진수 부울을 매개 변수로 포함하여 수행하는 작업에 대해 자세히 설명해 주시겠습니까?

16 진수로 인코딩 된 문자열을 반환합니다. 그가 언급 한 모듈 ( wkb)는 매끈한 모듈입니다.

여기 매끈한에 대한 문서 페이지가 있습니다. 페이지 (ctrl + f)에서 shapely.wkb.loads를 검색 할 수 있습니다.

후대에, 위에 인용 된 질문은 shongololo의 답변에 대한 응답이었습니다.

매끈하게 wkb 모듈을 사용하고 hex 옵션을 true로 설정합니다. wkb.loads (geom, hex = true) – shongololo

댓글

  • 감사합니다. 16 진수가 참이면 제품은 EWKB 파일입니까? 모든 EWKB가 WKB 16 진수로 인코딩된다는 의미입니까? SRID 포함도 EWKB의 구성 요소이며 기본적으로 WKB에 포함되지 않는다는 " 예감 "이 있습니다. 이것이 사실이거나 내가 말하는 것이 그 점에서 의미가 있습니까?
  • 16 진수 인코딩 WKB가 EWKB라고 생각합니다. EWKB에 SRID가 있다고 생각하는 것도 맞다고 생각합니다. 다음은 다른 질문 에 대한 링크입니다. 첫 번째 답변은 EWKB에 대해 많이 설명합니다. 또한 답변에서 링크 된 정보를 살펴볼 것을 제안합니다.
  • 아니요, 16 진수로 인코딩 된 WKB는 WKB의 바이너리가 아닌 표현입니다. EWKB는 SRID를 포함 할 수 있습니다. postgis.net/docs/using_postgis_dbmanagement.html#EWKB_EWKT

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다