매끈한 Postgis 지오메트리 읽기


11

geopandas를 사용하여 ipython 노트북에서 소규모 워크 플로우를 수행하고 모양 데이터, 때로는 모양 파일, 때로는 postgis (더 비싼 처리가 수행되는 곳)에서 많은 지리 공간 데이터를 가져옵니다.

그런 다음을 사용하여 postgis 테이블을 파이썬으로 가져 와서 sqlalchemy지오메트리를 WKT로 변환하여 다음과 같은 결과를 얻습니다.

sql = """
SELECT ST_AsText(ST_Transform(the_geom,4326)) as newgeom,* 
  FROM public.parcels2010_small limit 5;
 """
parcels = pd.read_sql(sql, engine)
parcels

+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| id | newgeom                                           | the_geom                                          | parcel_id | osm_node_id |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| 0  | MULTIPOLYGON(((-122.991093691444 38.4878691106... | 01060000209C0E00000100000001030000000100000097... | 1805792   | 66237       |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| 1  | MULTIPOLYGON(((-122.444576448624 37.7346386006... | 01060000209C0E0000010000000103000000010000008A... | 10435     | 123826      |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| 2  | MULTIPOLYGON(((-122.796785208193 38.5427593334... | 01060000209C0E0000010000000103000000010000007D... | 1817842   | 313047      |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| 3  | MULTIPOLYGON(((-122.695538506163 38.3618570798... | 01060000209C0E0000010000000103000000010000009B... | 1934612   | 63776       |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+
| 4  | MULTIPOLYGON(((-122.223424422869 37.8416019090... | 01060000209C0E00000100000001030000000100000072... | 861785    | 26369       |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+

셰이프 파일에서로드 할 때 지오메트리와 매우 유사하지만 형태가 지오메트리로 캐스트되지는 않습니다. 형태를 단독으로 사용하거나을 사용하여 정식 방법을 찾을 수 없습니다 Descartes.

답변:



16

PostGIS 지오메트리의 기본 형식은 16 진 인코딩 WKB (Well-Known Binary)입니다. Shapely는 모듈을 사용 하여이 형식을 shapely형상 객체 로 변환 할 수 있습니다 wkb.

from shapely import wkb

# ....

sql = """SELECT * FROM public.parcels2010_small LIMIT 5;"""
parcels = pd.read_sql(sql, engine)

for parcel in parcels:
    parcel.the_geom = wkb.loads(parcel.the_geom, hex=True)

형상을 인쇄하려면 다음과 같이 표시되어야합니다.

print parcels[0].the_geom

<shapely.geometry.multipolygon.MultiPolygon object at ...>

shapely.wkb 모듈에 대한 문서는 여기를 참조 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.