Hệ thống tọa độ
[...]
Shapely không hỗ trợ chuyển đổi hệ 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.
Nguồn: http://toblerity.org/shapely/manual.html#coordine-systems
Là shapely
hoàn toàn thuyết bất khả tri trong tham chiếu đến SRS, nó khá rõ ràng rằng thuộc tính chiều dài được thể hiện trong cùng một đơn vị tọa độ của chuỗi đường của bạn, tức là độ. Trong thực tế:
>>> from shapely.geometry import LineString
>>> line = LineString([(0, 0), (1, 1)])
>>> line.length
1.4142135623730951
Thay vào đó, nếu bạn muốn thể hiện độ dài tính bằng mét, bạn phải chuyển đổi hình học của mình từ WGS84 sang SRS được chiếu bằng pyproj (hoặc, tốt hơn, thực hiện phép tính khoảng cách trắc địa, xem câu trả lời của Gene). Cụ thể, kể từ phiên bản 1.2.18 ( shapely.__version__
), shapely
hỗ trợ các hàm biến đổi hình học ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ) mà chúng ta có thể sử dụng kết hợp với nó pyproj
. Đây là một ví dụ nhanh:
from shapely.geometry import LineString
from shapely.ops import transform
from functools import partial
import pyproj
line1 = LineString([(15.799406, 40.636069), (15.810173,40.640246)])
print str(line1.length) + " degrees"
# 0.0115488362184 degrees
# Geometry transform function based on pyproj.transform
project = partial(
pyproj.transform,
pyproj.Proj(init='EPSG:4326'),
pyproj.Proj(init='EPSG:32633'))
line2 = transform(project, line1)
print str(line2.length) + " meters"
# 1021.77585965 meters