Câu trả lời:
Shapely sử dụng một hệ thống mặt phẳng cartesian để tính toán hình học (khoảng cách = khoảng cách euclide)
Shapely không hỗ trợ chuyển đổi hệ thống tọa độ. Tất cả các hoạt động trên hai hoặc nhiều tính năng đều cho rằng các tính năng tồn tại trong cùng mặt phẳng Cartesian.
GeoPandas sử dụng Fiona để đọc shapefiles (và những người khác) và Pyproj cho các phép biến đổi bản đồ.
Hệ thống tham chiếu tọa độ (CRS) của dữ liệu vectơ của bộ sưu tập được truy cập thông qua thuộc tính crs chỉ đọc.
import fiona
c = fiona.open("test.shp")
print c.crs['units']
m
Đơn vị để tính khoảng cách / diện tích giữa các đối tượng với Shapely là mét trong trường hợp này.
Điều này giống với GeoPandas
import geopandas as gp
df = gp.GeoDataFrame.from_file('test.shp')
print df.crs['units']
m
Điều đó có nghĩa là nếu bạn làm việc với crs.unit = độ (ví dụ WGS84) thì tất cả các phép tính đều sai. Trước tiên, bạn phải từ chối lớp của bạn ( Làm cách nào để chuyển đổi phép chiếu Eastings và Northings sang WSG84 trong geopandas? )
read_postgis
khung dữ liệu kết quả chỉ có thuộc tínhcrs
, đó là một chuỗi. Nó không có thuộc tínhcrs['units']
; cố gắng yêu cầu kết quả đó trong TypeError.