Postgis geometrisinin düzgün okunması


11

Ipython not defterinde geopandas ve düzgün bir şekilde küçük boyutlu bir iş akışı yapıyorum, bazen şekil dosyalarından, bazen postgis'ten (daha pahalı işlemlerin gerçekleştirildiği) bir dizi jeo-uzamsal veri çekiyorum.

Şimdi, postgis tablolarını python'a doğru çekerek sqlalchemygeometriyi yol boyunca WKT'ye dönüştürerek, şöyle bir şey elde ediyorum:

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       |
+----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+

Bu, bir şekil dosyasından yüklendiğinde geometriye çok benziyor, ancak düzgün bir geometri olarak dökülmüyor. Bunu tek başına veya belki de kullanarak kanonik bir yol bulamadım Descartes.

Yanıtlar:



16

PostGIS geometrisi için varsayılan biçim onaltılık kodlu WKB'dir (Bilinen İkili). Shapely, modülü shapelyile bu biçimi geometri nesnesine dönüştürme yeteneğine sahiptir 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)

geometriyi basacak olsaydınız, şöyle görünmelidir:

print parcels[0].the_geom

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

Shapely.wkb modülündeki dokümanlara buradan bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.