Учитывая набор координат, Как мы находим граничные координаты.
<== Рисунок 1.
Учитывая координаты в указанном выше наборе, Как я могу получить координаты на красной границе? Граница - это многоугольник, который образован входными координатами для вершин таким образом, что он максимизирует площадь.
Я работаю над приложением, которое ищет свойства в пределах «х» миль от города . Что у меня есть:
- Координаты всех свойств.
- Набор координат для каждого города (у меня есть одна координата для каждого почтового индекса. И поскольку большинство городов имеют более одного почтового индекса, у каждого города есть набор координат)
Причина, по которой я запрашиваю максимальную площадь, заключается в том, что я не придумаю многоугольник, подобный приведенному ниже:
<== Рисунок 2
Что мне нужно, это алгоритм, чтобы придумать набор координат для границы. Алгоритм, который позволит мне придумать граничные координаты для рисунка 1 .
algorithm
polygon-creation
vertices
convex-hull
Хаджа Минхаджуддин
источник
источник
Ответы:
Есть много алгоритмов для решения этой проблемы ( Википедия "Convex_hull_algorithms" ):
источник
1) Выпуклая оболочка в GRASS GIS: http://grass.fbk.eu/grass64/manuals/html64_user/v.hull.html
2) Выпуклый корпус в Qgis Vector Tools (очень прост в использовании):
источник
Hawth's Tools for ArcGIS обладает этой функциональностью . Плюс скрипт для ArcInfo 10.
В QuantumGIS также есть инструмент для выпуклой оболочки через плагин ftools .
источник
То, что вы хотите, это выпуклая оболочка. В PostGIS есть функция (на самом деле GEOS), которая дает вам выпуклую оболочку ST_ConvexHull (геометрия) .
В википедии много информации о вогнутых корпусах.
источник
Если вы хотите, чтобы алгоритм делал это (а не пакеты, которые могут это сделать), то я бы подумал, что вам нужно будет триангулировать данные; или в основном определить линию от каждой точки до каждой другой точки. Затем, начиная с (скажем) точки с наибольшим значением Y, проследите маршрут вокруг внешней стороны, следующей за соединенной линией с наименьшим внешним углом / подшипником.
Вы сможете ускорить трассировку, отбрасывая сначала пересекающиеся линии. Внешняя граница не будет иметь пересечений.
Кстати, FME будет делать то же самое с преобразователями ConvexHullAccumulator или ConvexHullReplacer!
источник
Если вам интересно посмотреть на существующий алгоритм, реализованный в коде, у NetTopologySuite есть алгоритм для этого
Смотрите ConvexHull.cs
Кстати, NTS и куча других библиотек обернуты в классный проект под названием DotSpatial, который можно найти здесь.
источник