Максимальное расстояние между точкой и линией строки - PullRequest
1 голос
/ 05 февраля 2020

Метод distance в Shapely возвращает минимальное расстояние между двумя геометрическими c объектами. Не существует метода, который возвращает максимальное расстояние. Но есть метод hausdorff_distance, который возвращает ... хорошо:

Возвращает расстояние Хаусдорфа ( float ) в другой объект геометрии c. Расстояние Хаусдорфа между двумя геометриями - это самое дальнее расстояние, на которое точка любой геометрии может быть от ближайшей к ней точки другой геометрии.

Расстояние Хаусдорфа между отдельной точкой и линией LineString - это максимальное расстояние между ними.

from shapely.geometry import Point, LineString

ls = LineString(pt for pt in zip(range(1000), [0]*1000))  # [(0, 0), (1, 0), ..., (999, 0)]
pt = Point((-1, 0))

pt.hausdorff_distance(ls)  # 1000.0

Но это медленно (er).

for i in range(10000):
    pt.hausdorff_distance(ls)
# 3.76 s

for i in range(10000):
    pt.distance(ls)
# 0.550 s

Почему вычисляется максимальное расстояние между точкой и линией LineString в 7 раз медленнее, чем минимальное расстояние? У меня есть сильная интуиция, что лучшая реализация обоих расчетов будет выполняться примерно за равное время. Есть ли в Python еще одна библиотека, которую я могу использовать для более быстрого расчета? Или, может быть, алгоритм, который я могу реализовать сам?

...