У меня есть набор точек в виде шейп-файла, и я хочу найти (координаты) новой точки, которая будет иметь максимально возможное расстояние от каждой из существующих точек. Это возможно? Если да, есть ли пример кода VB? Спасибо Деметрис
У меня есть набор точек в виде шейп-файла, и я хочу найти (координаты) новой точки, которая будет иметь максимально возможное расстояние от каждой из существующих точек. Это возможно? Если да, есть ли пример кода VB? Спасибо Деметрис
Ответы:
Рекомендация Кирка Кайкендалла построить сферическую диаграмму Вороного (многоугольники Тиссена) является хорошей, но может иметь некоторые технические проблемы, которые нужно решить. Тем временем, в качестве альтернативы, можно применить стандартное растровое решение, как описано в другом потоке . Используйте сферические расстояния вместо евклидовых расстояний.
Вот пример, использующий пять точек, здесь заданных как (широта, долгота):
82.7051 -145.256
60.3321 81.2881
-17.076 105.125
-38.792 -122.686
0.000 180.000
Эта сферическая карта расстояний охватывает земной шар от -180 до 180 градусов по горизонтали и от -90 до 90 градусов по вертикали. Точки показаны большими красными точками. Расстояния увеличиваются с яркостью. Видимые гряды должны быть частями больших кругов. Небольшая черная точка рядом с (-15.3268, -2.04352) отмечает точку максимального расстояния 11,227 км. (Расстояния были рассчитаны в эллипсоидальных данных ITRF00.)
Разрешение этой сетки составляет один градус. Чтобы получить более точное решение, можно приблизиться к такой точке (и к любому другому локальному максимуму с достаточно близким значением к глобальному максимуму) и повторить расчет на сетке меньшего размера, но с более высоким разрешением.
Я никогда не пробовал это, но кажется, что это будет работать:
Создайте вороную трехмерную диаграмму сферы. Получающиеся в результате полигоны будут примерно центрированы относительно исходных существующих (начальных) точек.
Переберите каждую полученную вершину, чтобы найти ту, которая находится дальше всего от ее ближайшей существующей точки. Эта точка должна быть самой удаленной точкой на планете.
Вы можете использовать функцию взвешенного по стоимости расстояния, чтобы определить, насколько далеко каждая ячейка в вашем растре от всех других точек.
Насколько я знаю, это " анализ Полюса недоступности » должен выполняться итеративно.
Итеративный растровый подход был бы уместным, если вы смотрите на небольшую область с минимальным искажением проекции. Для каждой ячейки вычислите расстояние до всех точек, затем возьмите минимальное расстояние. Ячейка с наибольшим значением является полюсом. Вы также можете использовать Евклидово расстояние в Spatial Analyst.
Итеративный векторный подход более сложен. Garcia-Castellanos и др. 2007 описывают итерационный метод, основанный на сферической земле. Похоже, что они сделали свой C-код доступным онлайн . Я могу представить способы сделать это в Arc с буферами, но это все равно будет итеративным и медленным.
Вы можете использовать Расстояние до точек (Анализ). Инструмент создает таблицу с расстояниями между двумя наборами точек. если используется радиус поиска по умолчанию, рассчитываются расстояния от всех входных точек до всех ближайших точек. Выходная таблица может быть довольно большой. Например, если входные и близкие объекты имеют по 1000 точек каждая, тогда выходная таблица может содержать миллион записей.
Самая дальняя точка в вашем наборе точек будет обратной к самой внутренней точке вашего набора. Например, если ваша самая внутренняя точка в вашем наборе имеет координаты 49 градусов северной широты и -144 градуса восточной стороны, то обратная и самая дальняя точки будут иметь координаты 49 градусов южной широты и 36 градусов западной долготы. Это не совсем верно, потому что Земля не совсем сферическая, скорее геоидальная; следовательно, правильность вашей точки результата во многом зависит от того, какие проекционные и географические системы (орфографические, орторектифицированные ...) вы используете. Было бы полезно найти обратную величину для всего набора (перенести антипод для набора), а затем выполнить анализ поверхности в пределах местности, покрытой набором точек антипода, так как ландшафт может сильно отличаться. Я предполагаю, что ваш вопрос не о каких-либо точках на внеземных телах, таких как другие планеты или луны. Сожалею, У меня нет кода VB для вас. 🙄