2014-06-25 15 views
15

Có một polyline với danh sách tọa độ của các đỉnh = [(x1, y1), (x2, y2), (x3, y3), ...] và một điểm (x, y). Trong Shapely, geometry1.distance(geometry2) trả về khoảng cách ngắn nhất giữa hai hình học.Tọa độ của điểm gần nhất trên một dòng

>>> from shapely.geometry import LineString, Point 
>>> line = LineString([(0,0),(5,7),(12,6)])   #geometry2 
>>> list(line.coords) 
[(0.0, 0.0), (5.0, 7.0), (12.0, 6.0)] 
>>> p = Point(4,8)  #geometry1 
>>> list(p.coords) 
[(4.0, 8.0)] 
>>> p.distance(line) 
1.4142135623730951 

Nhưng tôi cũng cần phải tìm tọa độ của điểm trên đường gần nhất với điểm (x, y). Trong ví dụ trên, đây là tọa độ của điểm trên đối tượng LineString là 1.4142135623730951 đơn vị nằm xa Điểm (4.8). Khoảng cách phương thức() phải có tọa độ khi tính toán khoảng cách. Có cách nào để đưa nó trở về từ phương pháp này không?

Trả lời

15

Thuật ngữ GIS mà bạn mô tả là linear referencingShapely has these methods.

# Length along line that is closest to the point 
print(line.project(p)) 

# Now combine with interpolated point on line 
np = line.interpolate(line.project(p)) 
print(np) # POINT (5 7) 
+5

lưu ý nhanh chóng cho bất cứ ai có thể sau bài viết: 'line.project (p) 'biện pháp điểm chiếu dọc theo đường từ khởi đầu nút-tọa độ được đưa ra trong lý luận của phương pháp LineString(). Nhưng 'np = line.interpolate (line.project (p))' cung cấp POINT (5 7) như trong tọa độ chung, không phải từ đầu dòng. Ở đây dòng bắt đầu từ (0,0). Vì vậy, nó có thể gây nhầm lẫn. –

Các vấn đề liên quan