Как я могу найти самую дальнюю точку из набора существующих точек?

17

У меня есть набор точек в виде шейп-файла, и я хочу найти (координаты) новой точки, которая будет иметь максимально возможное расстояние от каждой из существующих точек. Это возможно? Если да, есть ли пример кода VB? Спасибо Деметрис

Димитрис
источник
Вы хотите сказать, что вы хотите новую точку для каждой уже существующей точки или одну точку, которая как-то «самая дальняя» от всех них? И под самым дальним, ты имеешь в виду "другую сторону земного шара"? Если это так, вы можете просто умножить широту на -1 и добавить 180 к долготе (вычитая 360, если результирующее значение> 180), если они есть в десятичных градусах.
nmpeterson
Я думаю, что интересный вопрос будет таким: учитывая существующие точки, разбросанные по всему земному шару, найдите новую точку на земном шаре, наиболее удаленную от всех существующих точек.
Кирк Куйкендалл
Фактически это будет точка в конце равнобедренного треугольника, в которой расстояние ограничено только тем, насколько далеко вы хотите пройти. Если я правильно прочитал вопрос, вы хотите, чтобы этот вопрос был наиболее далеким от них обоих? В равной степени?
Волосатые
1
О! Мой пост создал фантастическую дискуссию и материал! NMpeterson: во-первых, я должен сказать, что мои очки находятся в небольшой плоской области; так что нет необходимости в глобальных расчетах. Я ищу второй вопрос, поднятый; то есть одна точка, которая как-то «самая дальняя» от всех существующих точек. Поэтому, пожалуйста, сосредоточьтесь на этом.
Димитрис
Мне интересно, если какой-либо пример кода VB доступен в соответствии с запросом в исходном вопросе. Возможно, такой код уже очевиден, учитывая ответы экспертов. Но, как новичок, я надеюсь начать с воссоздания решения, любезно предоставленного компанией whuber. Заранее прошу прощения за то, что выдавал это за ответ вместо комментария.

Ответы:

12

Рекомендация Кирка Кайкендалла построить сферическую диаграмму Вороного (многоугольники Тиссена) является хорошей, но может иметь некоторые технические проблемы, которые нужно решить. Тем временем, в качестве альтернативы, можно применить стандартное растровое решение, как описано в другом потоке . Используйте сферические расстояния вместо евклидовых расстояний.

Вот пример, использующий пять точек, здесь заданных как (широта, долгота):

 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.)

Разрешение этой сетки составляет один градус. Чтобы получить более точное решение, можно приблизиться к такой точке (и к любому другому локальному максимуму с достаточно близким значением к глобальному максимуму) и повторить расчет на сетке меньшего размера, но с более высоким разрешением.

Whuber
источник
намного красивее, чем векторы. Не уверен, почему я думал, что растрам нужна модель с плоской землей.
Кирк Куйкендалл
Довольно, да, но неэффективно. Было бы неплохо увидеть, как работает векторное сферическое решение Вороного.
whuber
@Whuber: Как вы можете автоматически получить координаты черной точки? "
Demetris
@Demetris Один из способов - вычислить максимальное значение в сетке, выбрать все ячейки, равные этому значению, и использовать координаты центра этой ячейки.
whuber
@ Whuber: Большое спасибо. Это хорошая идея. Тем не менее, я должен обрезать выходной растр на основе класса объектов (уникальный полигон). Я могу это сделать?
Деметрис
8

введите описание изображения здесь

Я никогда не пробовал это, но кажется, что это будет работать:

Создайте вороную трехмерную диаграмму сферы. Получающиеся в результате полигоны будут примерно центрированы относительно исходных существующих (начальных) точек.

Переберите каждую полученную вершину, чтобы найти ту, которая находится дальше всего от ее ближайшей существующей точки. Эта точка должна быть самой удаленной точкой на планете.

Кирк Куйкендалл
источник
Это отличная идея (+1). Но как выглядит сферическая диаграмма Вороного, когда все точки лежат в общем полушарии? Код, на который вы ссылаетесь, получает его с выпуклой оболочкой, но, похоже, это не сработает.
whuber
хм, да, я думаю, даже если они не все в общем полушарии, будет один многоугольник, у которого нет начальной точки. Что если вы построите точку для нее, используя антиподальную точку центроида выпуклых оболочек? Затем, в дополнение к петле через каждую вершину, эта выпуклая антиподная точка будет исследована, чтобы увидеть, находится ли она дальше от своих соседей, чем максимальное расстояние до вершины.
Кирк Куйкендалл
Это была моя первоначальная мысль, но антиподальные точки будут создавать артефактные полигоны. Подумайте о том, что произошло бы на вашей иллюстрации, если бы, например, был включен антипод для каждой точки! Возможно, есть решение такого рода, но, похоже, оно не простое.
whuber
1

Вы можете использовать функцию взвешенного по стоимости расстояния, чтобы определить, насколько далеко каждая ячейка в вашем растре от всех других точек.

djq
источник
Какую стоимость вы бы использовали?
whuber
Если вы установите стоимость в одну единицу; Вы можете определить, какая самая дальняя точка будет основана на расстоянии.
DJN
@whuber Хотя, возможно, это ничем не отличается от расчета евклидова расстояния, о котором уже говорилось.
DJN
Это евклидово расстояние. На самом деле, дело даже не в этом: это странное восьмиугольное расстояние (круги на самом деле являются восьмиугольниками). В этой ситуации (только расстояния от точек без барьеров) гораздо точнее и гораздо быстрее вычислить евклидово расстояние или сферическую сетку расстояний напрямую, чем пытаться использовать для этого CostDistance.
whuber
Я не уверен, что функция взвешенного по стоимости расстояния поможет, потому что мне нужны координаты только одной точки, и у меня есть ожидающий векторный набор точек, но я постараюсь. Благодарю.
Димитрис
1

Насколько я знаю, это " анализ Полюса недоступности » должен выполняться итеративно.

Итеративный растровый подход был бы уместным, если вы смотрите на небольшую область с минимальным искажением проекции. Для каждой ячейки вычислите расстояние до всех точек, затем возьмите минимальное расстояние. Ячейка с наибольшим значением является полюсом. Вы также можете использовать Евклидово расстояние в Spatial Analyst.

Итеративный векторный подход более сложен. Garcia-Castellanos и др. 2007 описывают итерационный метод, основанный на сферической земле. Похоже, что они сделали свой C-код доступным онлайн . Я могу представить способы сделать это в Arc с буферами, но это все равно будет итеративным и медленным.

dmahr
источник
0

Вы можете использовать Расстояние до точек (Анализ). Инструмент создает таблицу с расстояниями между двумя наборами точек. если используется радиус поиска по умолчанию, рассчитываются расстояния от всех входных точек до всех ближайших точек. Выходная таблица может быть довольно большой. Например, если входные и близкие объекты имеют по 1000 точек каждая, тогда выходная таблица может содержать миллион записей.

salehamra
источник
Как это можно применить для нахождения координат новой точки, которая не отображается на входе? Возможно, вы неправильно поняли вопрос?
whuber
0

Самая дальняя точка в вашем наборе точек будет обратной к самой внутренней точке вашего набора. Например, если ваша самая внутренняя точка в вашем наборе имеет координаты 49 градусов северной широты и -144 градуса восточной стороны, то обратная и самая дальняя точки будут иметь координаты 49 градусов южной широты и 36 градусов западной долготы. Это не совсем верно, потому что Земля не совсем сферическая, скорее геоидальная; следовательно, правильность вашей точки результата во многом зависит от того, какие проекционные и географические системы (орфографические, орторектифицированные ...) вы используете. Было бы полезно найти обратную величину для всего набора (перенести антипод для набора), а затем выполнить анализ поверхности в пределах местности, покрытой набором точек антипода, так как ландшафт может сильно отличаться. Я предполагаю, что ваш вопрос не о каких-либо точках на внеземных телах, таких как другие планеты или луны. Сожалею, У меня нет кода VB для вас. 🙄

Юрий Шевчук
источник
Точка, самая дальняя из всех других точек в наборе, будет самой внутренней (самая дальняя из всех наиболее внешних точек вдоль края), она все равно будет ближайшей к каждой точке, непосредственно следующей за ней. Это кластерный анализ, а не веселье. Вероятно, лучше взглянуть на те же атомы заряда в физике.
Юрий Шевчук