Координата ближайшей точки на линии
Существует полилиния со списком координат вершин = [(x1, y1), (x2, y2), (x3, y3),...] и точкой (x, y). В Shapely geometry1.distance(geometry2)
возвращает кратчайшее расстояние между двумя геометриями.
>>> 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
Но мне также нужно найти координату точки на прямой, ближайшей к точке (x, y). В приведенном выше примере это координата точки объекта LineString, которая находится на расстоянии 1.4142135623730951 от точки (4,8). Метод distance() должен иметь координаты при расчете расстояния. Есть ли способ вернуть его из этого метода?
Ответы
Ответ 1
Термин GIS, который вы описываете, линейная ссылка, и Shapely имеет эти методы.
# 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)