Come posso trovare il punto più lontano da una serie di punti esistenti?


17

Ho un set di punti come shapefile e voglio trovare (le coordinate) di un nuovo punto che avrà la distanza più lunga possibile da ciascuno dei punti esistenti. È possibile? Se sì, esiste un codice VB di esempio? Grazie Demetris


Vuoi dire che vuoi un nuovo punto per ogni punto già esistente, o un punto che è in qualche modo "più lontano" da tutti loro? E più lontano, intendi "l'altro lato del globo"? In tal caso, puoi semplicemente moltiplicare la latitudine per -1 e aggiungere 180 alla longitudine (sottraendo 360 se il valore risultante è> 180) se li hai in gradi decimali.
nmpeterson

Penso che la domanda interessante sarebbe: dati i punti esistenti sparsi in tutto il mondo, trovare un nuovo punto sul globo più lontano da tutti i punti esistenti.
Kirk Kuykendall,

Sarebbe effettivamente il punto alla fine di un triangolo isoscele, in cui la distanza è limitata solo da quanto lontano si desidera andare. Se ho letto correttamente la domanda, vuoi il punto più lontano da entrambi? Allo stesso modo?
Peloso,

1
Oh! Il mio post ha creato una discussione e materiale fantastici! NMpeterson: In primo luogo, devo dire che i miei punti si trovano in una piccola area piatta; quindi non c'è bisogno di calcoli con il globo. Sto cercando la seconda questione sollevata; vale a dire un punto che è in qualche modo "più lontano" da tutti i punti esistenti. Quindi, ti preghiamo di concentrarti su questo.
Demetris,

Mi chiedo se sia disponibile un codice VB di esempio come richiesto nella domanda originale. Forse tale codice è già ovvio date le risposte degli esperti. Ma come principiante, spero di iniziare ricreando la soluzione gentilmente fornita da whuber. In anticipo mi scuso per aver proposto questo come una risposta invece di un commento.

Risposte:


12

La raccomandazione di Kirk Kuykendall di costruire un diagramma sferico di Voronoi (poligoni di Thiessen) è buona, ma potrebbe avere alcuni problemi tecnici da risolvere. Nel frattempo, in alternativa, è possibile applicare la soluzione raster standard come descritto in un altro thread . Usa le distanze sferiche invece delle distanze euclidee.

Ecco un esempio usando cinque punti, qui dato come (lat, lon):

 82.7051   -145.256
 60.3321     81.2881
-17.076     105.125
-38.792    -122.686
  0.000     180.000

Mappa della distanza

Questa mappa sferica della distanza copre il globo da -180 a 180 gradi di longitudine in orizzontale e da -90 a 90 gradi di latitudine in verticale. I punti sono mostrati con grandi punti rossi. Le distanze aumentano con la luminosità. Le creste apparenti devono essere porzioni di grandi cerchi. Il piccolo punto nero vicino (-15.3268, -2.04352) segna il punto di distanza massima di 11.227 km. (Le distanze sono state calcolate nel dato ellissoidale ITRF00.)

La risoluzione di questa griglia è di un grado. Per ottenere una soluzione più precisa, è possibile ingrandire un punto del genere (e in qualsiasi altro massimo locale con un valore sufficientemente vicino al massimo globale) e ripetere il calcolo su una griglia più piccola ma a risoluzione più elevata.


molto più bello dei vettori. Non so perché pensassi che i raster richiedessero un modello di terra piatta.
Kirk Kuykendall,

Abbastanza, sì, ma inefficiente. Sarebbe bello vedere la soluzione sferica di Voronoi basata su vettori.
whuber

@Whuber: come si ottengono automaticamente le coordinate del punto nero? "
Demetris,

@Demetris Un modo è calcolare il valore massimo sulla griglia, selezionare tutte le celle uguali a quel valore e usare le coordinate del centro di quella cella.
whuber

@Whuber: Mille grazie. Questa è una buona idea. Tuttavia, devo ritagliare l'output raster in base a una classe di caratteristiche (un poligono unico). Posso farlo?
Demetris,

8

inserisci qui la descrizione dell'immagine

Non l'ho mai provato ma sembra che funzioni:

Crea un diagramma voronoi 3D della sfera. I poligoni risultanti saranno approssimativamente centrati sui punti (seme) esistenti originali.

Passa attraverso ciascun vertice risultante per trovare quello più lontano dal punto esistente più vicino. Questo punto dovrebbe essere il punto più remoto sul globo.


Questa è un'ottima idea (+1). Ma come appare il diagramma sferico di Voronoi quando tutti i punti si trovano all'interno di un emisfero comune? Il codice a cui ti riferisci lo ottiene con uno scafo convesso, ma sembra che non funzionerà.
whuber

hmm, sì, immagino che anche se non sono tutti in un emisfero comune, ci sarà un poligono a cui manca un punto seme. E se costruissi un punto per esso usando il punto antipodale del centroide degli scafi convessi? Quindi, oltre a scorrere attraverso ciascun vertice, questo punto di anticorpo convesso verrebbe esaminato per vedere se è più lontano dai suoi vicini della distanza massima del vertice.
Kirk Kuykendall,

Quello era il mio pensiero iniziale, ma i punti antipodi creeranno poligoni artificiali. Pensa a cosa accadrebbe nella tua illustrazione se l'antipode di ogni punto fosse incluso, per esempio! Probabilmente esiste una soluzione di questa natura, ma sembra che non sia semplice.
whuber

1

È possibile utilizzare una funzione di distanza ponderata in base al costo per identificare la distanza di ogni cella del raster da tutti gli altri punti.


Quale costo useresti?
whuber

Se imposti il ​​costo su un'unità; potresti identificare quale sarebbe il punto più lontano in base alla distanza.
djq

@whuber Anche se forse questo non è diverso dal calcolo dell'approccio della distanza euclidea già menzionato.
djq

Questa è la distanza euclidea. In realtà, non è nemmeno quello: è un tipo strano di distanza ottagonale (i cerchi sono in realtà ottagoni). In questa situazione (solo distanze da punti, senza barriere), è molto più preciso e molto più veloce calcolare direttamente una distanza euclidea o una griglia sferica di distanza, piuttosto che cercare di sfruttare CostDistance per questo.
whuber

Non sono sicuro che la fucntion della distanza ponderata in base al costo sarebbe di aiuto perché ho bisogno delle coordinate di un solo punto e ho un set di punti vettoriali esistenti, ma ci proverò. Grazie.
Demetris,

1

Per quanto ne so, questa analisi del " Polo dell'inaccessibilità " deve essere eseguita in modo iterativo.

Un approccio raster iterativo sarebbe appropriato purché si guardi una piccola area con una distorsione minima dalla proiezione. Per ogni cella, calcola la distanza da tutti i punti, quindi prendi la distanza minima. La cella con il valore più alto è il polo. A tale scopo puoi anche utilizzare la distanza euclidea nell'analista spaziale.

Un approccio vettoriale iterativo è più complicato. Garcia-Castellanos et al 2007 descrivono un metodo iterativo basato su una terra sferica. Sembra che abbiano reso disponibile il loro codice C online . Posso immaginare modi per farlo in Arc con i buffer, ma sarebbe ancora iterativo e lento.


0

è possibile utilizzare Point Distance (Analysis) Lo strumento crea una tabella con le distanze tra due serie di punti. se viene utilizzato il raggio di ricerca predefinito, vengono calcolate le distanze da tutti i punti di input a tutti i punti vicini. La tabella di output può essere piuttosto grande. Ad esempio, se entrambe le funzionalità di input e near hanno 1.000 punti ciascuna, la tabella di output può contenere un milione di record.


Come può essere applicato per trovare le coordinate di un nuovo punto che non appare nell'input? Forse hai letto male la domanda?
whuber

0

Il punto più lontano al tuo set di punti sarebbe il reciproco al punto più interno nel tuo set. Ad esempio, se il tuo punto più interno nel tuo set aveva coordinate 49 gradi nord e -144 gradi est, allora il punto reciproco e il punto più lontano avrebbe coordinate di 49 gradi sud e 36 gradi ovest. Questo non è esattamente vero perché la Terra non è perfettamente sferica, piuttosto geoidale; pertanto, la correttezza del tuo punto di risultato dipende molto da quali sistemi di proiezione e geografici (ortografici, ortorettificati ...) usi. Potrebbe essere utile trovare un reciproco per l'intero set (trasferire un antipode per un set) e quindi eseguire l'analisi della superficie all'interno del terreno coperto dal set di punti antipode, poiché il terreno potrebbe molto. Suppongo che la tua domanda non riguardi alcun punto sui corpi extraterrestri, come altri pianeti o lune. Scusa, Non ho un codice VB per te. 🙄


Il punto più lontano da tutti gli altri punti in un set sarebbe il più interno (uno che è il più lontano da tutti i punti più esterni lungo il bordo), sarebbe comunque il più vicino a ogni punto immediatamente accanto al suo nome. Questa è un'analisi dei cluster, non divertente. Probabilmente è meglio esaminare gli stessi atomi di carica in Fisica
Yuriy Shevchuk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.