Расстояние снаружи стройное. Полигон - PullRequest
0 голосов
/ 21 декабря 2018

Как установить расстояние от точки до многоугольника?Если точка находится в пределах многоугольника, результат должен быть 0.

Я предполагаю что-то вроде:

def distance_from(poly,point):
  if poly.contains(point): return 0 
  return poly.exterior.distance(point)

1 Ответ

0 голосов
/ 29 декабря 2018

Я хотел бы немного пояснить:

Экземпляры, которые передаются в функцию distance_from, сделаны из классов shapely.geometry.polygon.Polygon и shapely.geometry.point.Point из модуля shapely.geometryпакет Shapely Python для вычислительной геометрии .(Подробнее о фигурных и геометрических объектах см. В руководстве: Пакет Shapely Python , Геометрические объекты ).

Метод distance геометрическогообъект возвращает минимальное расстояние до другого геометрического объекта, как описано здесь в руководстве.Внешность многоугольника является экземпляром shapely.geometry.polygon.LinearRing, который составляет границу многоугольника (хотя он не должен смешиваться с атрибутом boundary многоугольника, который возвращает LineString).Таким образом, для описанного выше случая вам не нужно явно использовать poly.exterior.distance(point), потому что минимальное расстояние одинаково для всего многоугольника, как и для его границы.Они имеют абсолютно одинаковую форму только разного типа геометрии.

Было бы менее подвержено ошибкам, если бы вы просто использовали poly.distance(point), потому что, если точка интереса находится в пределах interior ( больше информации здесь ) многоугольника, этоЯсно, что он содержится, поэтому вам не нужна явная проверка, а расстояние от точки в interior до самого себя равно 0. Тогда было бы иначе, если бы вы попытались получить расстояние от exterior(который, как объяснено выше, является LinearRing, то есть закрытым LineString) до точки, которая находится во «внутренней» части.В этом случае вы получите минимальное расстояние между точкой во «внутренней» части и окружающим линейным кольцом.

Для получения дополнительной информации о бинарных отношениях (т. Е. Между геометрическим объектом и другим, который охватывает contains, within, touches и т. Д.) См. эту часть руководства и для тех, кто интересуется базовыми отношениями DE-9IM (которые позволяют четко определить, как геометрические объекты относятся кдругое) обратитесь к этой части.

Shapely - это оболочка для Python для набора GEOS , который сам по себе является портом C ++ JTS .На странице JTS по ссылке Таблица характеристик можно найти дополнительную информацию о том, как проверяются и вычисляются пространственные отношения

...