Як я можу знайти найдальшу точку з набору існуючих точок?


17

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


Ви маєте на увазі, що хочете отримати нову точку для кожної вже існуючої точки, або одну точку, яка є якось "найдальшою" від усіх? І під самим далеким, ви маєте на увазі "іншу сторону земної кулі"? Якщо так, ви можете просто помножити широту на -1 і додати 180 до довготи (віднімаючи 360, якщо отримане значення дорівнює> 180), якщо у вас є десяткові градуси.
nmpeterson

Думаю, цікавим було б питання: враховуючи існуючі точки, розкидані по всьому світу, знайти нову точку на земній кулі, найбільш віддалену від усіх існуючих точок.
Кірк Куйкендалл

Фактично це буде точка в кінці рівнобедреного трикутника, в якій відстань обмежена лише тим, наскільки далеко ви хочете пройти. Якщо я прочитав запитання належним чином, ви хочете, щоб точка була віддалена від них обох? В рівній мірі?
Волохатий

1
О, мій пост створив фантастичну дискусію та матеріал! Н.Мпетерсон: По-перше, я повинен сказати, що мої точки знаходяться в межах невеликої плоскої площі; тому немає необхідності в обчисленнях земної кулі. Я шукаю підняте друге питання; тобто одна точка, яка є якось "найдальшою" від усіх існуючих точок. Отже, будь ласка, зосередиться на цьому.
Деметрис

Мені цікаво, чи доступний який-небудь зразок коду VB, як вимагається в оригінальному запитанні. Можливо, такий код вже очевидний, враховуючи відповіді експертів. Але як початківець, я сподіваюся почати з відтворення розчину, люб’язно наданого шубером. Заздалегідь прошу вибачення, що поставив це як відповідь замість коментаря.

Відповіді:


12

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

Ось приклад з використанням п'яти пунктів, наведених як (lat, lon):

 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: Як можна автоматично отримати координати чорної точки? "
Деметрис

@Demetris Одним із способів є обчислення максимального значення в сітці, виділення всіх комірок, рівних цьому значенню, та використання координат центру цієї комірки.
whuber

@Whuber: Дякую Це гарна ідея. Однак я повинен вирізати вихідний растр на основі класу характеристик (унікальний багатокутник). Чи можу я це зробити?
Деметрис

8

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

Я ніколи цього не пробував, але здається, що це спрацювало б:

Створіть тривимірну вороной діаграму сфери. Отримані полігони будуть орієнтовані приблизно на вихідні (насінні) точки.

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


Це чудова ідея (+1). Але як виглядає сферична діаграма Вороного, коли всі точки лежать у загальній півкулі? Код, на який ви посилаєтесь, отримує його з опуклим корпусом, але, здається, це не спрацює.
whuber

гм, так, я думаю, навіть якщо вони не всі в загальній півкулі, буде один багатокутник, якому не вистачає точки насіння. Що робити, якщо ви побудували для нього точку, використовуючи антиподальну точку центроїда опуклих корпусів? Тоді, окрім циклу проходження кожної вершини, ця опукла-антиподна точка буде досліджена, щоб побачити, чи вона знаходиться далі від сусідів, ніж максимальна відстань вершини.
Кірк Kuykendall

Це було моєю початковою думкою, але антиподальні точки створюватимуть артефактичні багатокутники. Подумайте, що було б з вашою ілюстрацією, якби, наприклад, був включений антипод до кожної точки! Мабуть, є рішення такого характеру, але здається, що це не просто.
whuber

1

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


Яку вартість ви б використали?
whuber

Якщо ви встановите вартість в одну одиницю; Ви могли визначити, яка віддалена точка буде базуватися на відстані.
djq

@whuber Хоча, можливо, це не відрізняється від обчислення вже згаданого підходу евклідової дистанції.
djq

Це евклідова відстань. Насправді це навіть не так: це дивний вид восьмикутної відстані (кола - це насправді восьмикутники). У цій ситуації (відстані лише від точок, без бар'єрів) набагато точніше і набагато швидше обчислити або евклідову відстань, або сферичну сітку відстані безпосередньо, а не намагатися використовувати для цього CostDistance.
whuber

Я не впевнений, що врівноважене на відстані значення допоможе, тому що мені потрібні координати лише однієї точки, і у мене є безліч векторних наборів точок, але я спробую. Спасибі.
Деметрис

1

Наскільки я знаю, цей " полюс неприступності " аналіз повинен бути зроблений повторно.

Ітераційний растровий підхід був би доцільним, якщо ви дивитесь на невелику ділянку з мінімальними спотвореннями від проекції. Для кожної комірки обчисліть відстань до всіх точок, а потім пройдіть мінімальну відстань. Клітина з найвищим значенням - полюс. Ви також можете використовувати евклідову відстань у просторовому аналітику для цього.

Ітеративний векторний підхід є складнішим. Garcia-Castellanos et al 2007 описують ітераційний метод, заснований на земній кулі. Схоже, вони зробили свій C код доступним в Інтернеті . Я можу уявити способи зробити це в Arc з буферами, але це все одно буде ітеративним і повільним.


0

Ви можете використовувати відстань точок (аналіз) Інструмент створює таблицю з відстанями між двома наборами точок. якщо використовується радіус пошуку за замовчуванням, розраховуються відстані від усіх вхідних точок до всіх близьких точок. Вихідна таблиця може бути досить великою. Наприклад, якщо вхідні та близькі функції мають по 1000 балів кожен, то таблиця виводу може містити один мільйон записів.


Як це можна застосувати для пошуку координат нової точки, яка не відображається на вході? Можливо, ви неправильно прочитали питання?
whuber

0

Найдальшою точкою у вашому наборі точок було б зворотне відношення до самої внутрішньої точки у вашому наборі. Наприклад, якщо у вашій внутрішній точці у вашому наборі були координати 49 градусів на північ та -144 градуси на схід, то зворотна та найдальша точка мали б координати 49 градусів на південь та 36 градусів на захід. Це не зовсім так, тому що Земля не є абсолютно сферичною, скоріше геоїдальною; отже, правильність результату дуже багато залежить від того, які проекційні та географічні системи (ортографічні, орторектифіковані ...) ви використовуєте. Це може бути корисно знайти зворотний зв'язок для всього набору (перенести антипод для набору), а потім виконати аналіз поверхні в місцевості, охопленій набором антиподів, оскільки місцевість може бути дуже великою. Я припускаю, що ваше питання стосується не будь-яких точок на іноземних тілах, таких як інші планети чи місяці. Вибачте, Я не маю для вас коду VB. 🙄


Точка, віддалена від усіх інших точок у наборі, була б самою внутрішньою (такою, яка найдаліша від усіх найбільш зовнішніх точок по краю), вона все одно буде найближчою до кожної точки безпосередньо поруч із нею. Це кластерний аналіз, а не задоволення. Напевно, краще вивчити ті самі атоми заряду у фізиці.😐
Юрій Шевчук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.