Đọc hình học postgis với hình dạng


11

Tôi đang thực hiện một quy trình công việc quy mô nhỏ trong máy tính xách tay ipython với geopandas và tạo hình, lấy một loạt dữ liệu không gian địa lý, đôi khi từ shapefiles, đôi khi từ postgis (nơi thực hiện xử lý đắt tiền hơn).

Bây giờ, sau đó tôi kéo các bảng postgis thành python bằng cách sqlalchemychuyển đổi hình học thành WKT trên đường đi, nhận được một cái gì đó như:

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

Cái này trông rất giống hình học khi được tải từ một shapefile, nhưng nó không được đúc dưới dạng hình học. Tôi không thể tìm thấy cách thức kinh điển để làm điều đó, hoặc sử dụng một cách đơn giản, hoặc có thể với Descartes.

Câu trả lời:



16

Định dạng mặc định cho hình học PostGIS là WKB được mã hóa hex (Binary-Known Binary). Shapely có khả năng chuyển đổi định dạng này thành shapelyđối tượng hình học với wkbmô-đun của nó :

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)

nếu bạn đã in hình học thì nó sẽ trông như thế này:

print parcels[0].the_geom

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

Xem tài liệu trên mô-đun shapely.wkb tại đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.