Tôi đang chạy một phân tích cụ thể trong đó chúng tôi sử dụng hình dạng để tạo bộ đệm xung quanh các điểm (vị trí cửa hàng) và sau đó kiểm tra xem các điểm khác (vị trí người dùng) có trong giá trị bộ đệm đó không. Khi tôi kiểm tra khoảng cách bằng cách sử dụng hình dạng, nó hóa ra khác với khoảng cách tôi nhận được từ địa lý. Công thức haversine đồng ý với Geopy và kiểm tra trên bản đồ google bằng cách sử dụng chức năng đo khoảng cách cũng cho khoảng cách tương tự
Đây là một ví dụ:
from shapely.geometry import Point, shape
from pyproj import Proj, transform
from geopy.distance import vincenty, great_circle
pt_store=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.799614, 39.435307))
pt_user=Point(transform(Proj(init='EPSG:4326'),Proj(init='EPSG:3857'),-76.79989,39.43604))
vincenty((39.435307,-76.799614),(39.43604,-76.79989)).meters
great_circle((39.435307,-76.799614),(39.43604,-76.79989)).meters
pt_store.distance(pt_user)
Vincenty: 84.77847691521336
Great_circle: 84.90640111682812 Hình
dạng:
110.02637304449682 Công thức Haversine ( http://www.movable-type.co.uk/scripts/latlong.html ): 84,88
Cái nào là đúng? Tạo dáng hay người khác? Ngoài ra, có phải là một sự khác biệt lớn như vậy (~ 22%) không? Hay tôi đang thiếu một cái gì đó?
EPSG:3857
- Shapely là lựa chọn sai ở đây. Web Mercator là không phù hợp và không nên được sử dụng để tính khoảng cách.