¿Cómo puedo encontrar el punto más alejado de un conjunto de puntos existentes?


17

Tengo un conjunto de puntos como un archivo de forma y quiero encontrar (las coordenadas) de un nuevo punto que tendrá la mayor distancia posible desde cada uno de los puntos existentes. ¿Es eso posible? En caso afirmativo, ¿hay algún código VB de muestra? Gracias Demetris


¿Quiere decir que quiere un nuevo punto para cada punto ya existente, o un punto que de alguna manera esté "más alejado" de todos ellos? Y por más lejos, ¿te refieres a "el otro lado del globo"? Si es así, puede multiplicar la latitud por -1 y sumar 180 a la longitud (restando 360 si el valor resultante es> 180) si los tiene en grados decimales.
nmpeterson el

Creo que la pregunta interesante sería: dados los puntos existentes dispersos por todo el mundo, encuentre un nuevo punto en el mundo más alejado de todos los puntos existentes.
Kirk Kuykendall

Sería, efectivamente, el punto al final de un triángulo isósceles, en el que la distancia está limitada solo por la distancia que desea llegar. Si he leído la pregunta correctamente, ¿quieres el punto más alejado de ambos? ¿Igualmente?
Peludo

1
¡Oh! ¡Mi publicación creó una discusión y material fantásticos! NMpeterson: Primero, tengo que decir que mis puntos están dentro de una pequeña área plana; así que no es necesario realizar cálculos de globo. Estoy buscando la segunda cuestión planteada; es decir, un punto que de alguna manera está "más alejado" de todos los puntos existentes. Entonces, concéntrate en esto.
Demetris

Me pregunto si hay algún código VB de muestra disponible según lo solicitado en la pregunta original. Tal vez ese código ya es obvio dadas las respuestas de los expertos. Pero como principiante, espero comenzar recreando la solución amablemente proporcionada por whuber. De antemano me disculpo por plantear esto como una respuesta en lugar de un comentario.

Respuestas:


12

La recomendación de Kirk Kuykendall de construir un diagrama esférico de Voronoi (polígonos de Thiessen) es buena, pero podría tener algunos inconvenientes técnicos para resolver. Mientras tanto, como alternativa, se puede aplicar la solución ráster estándar como se describe en otro hilo . Use distancias esféricas en lugar de distancias euclidianas.

Aquí hay un ejemplo usando cinco puntos, aquí dado como (lat, lon):

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

Mapa de distancia

Este mapa de distancia esférico abarca el globo desde -180 a 180 grados de longitud horizontalmente y -90 a 90 grados de latitud vertical. Los puntos se muestran con grandes puntos rojos. Las distancias aumentan con el brillo. Las crestas aparentes deben ser porciones de grandes círculos. El pequeño punto negro cerca (-15.3268, -2.04352) marca el punto de distancia máxima de 11,227 km. (Las distancias se calcularon en el dato elipsoidal ITRF00).

La resolución de esta cuadrícula es de un grado. Para obtener una solución más precisa, uno puede acercarse a dicho punto (y a cualquier otro máximo local con un valor suficientemente cercano al máximo global) y repetir el cálculo en una cuadrícula más pequeña pero de mayor resolución.


mucho más bonita que los vectores. No estoy seguro de por qué pensé que las tramas requerían un modelo de tierra plana.
Kirk Kuykendall el

Bonita, sí, pero ineficiente. Sería bueno ver que la solución esférica de Voronoi basada en vectores funciona.
whuber

@Whuber: ¿Cómo puedes obtener automáticamente las coordenadas del punto negro? "
Demetris

@Demetris Una forma es calcular el valor máximo en la cuadrícula, seleccionar todas las celdas iguales a ese valor y usar las coordenadas del centro de esa celda.
whuber

@Whuber: Muchas gracias. Esta es una buena idea. Sin embargo, tengo que recortar el ráster de salida en función de una clase de entidad (un polígono exclusivo). ¿Puedo hacer esto?
Demetris

8

ingrese la descripción de la imagen aquí

Nunca he intentado esto, pero parece que esto funcionaría:

Crea un diagrama voronoi 3D de la esfera. Estos polígonos resultantes se centrarán aproximadamente en los puntos existentes (semilla) originales.

Recorra cada vértice resultante para encontrar el que está más alejado de su punto existente más cercano. Este punto debería ser el punto más remoto del mundo.


Esta es una gran idea (+1). Pero, ¿cómo se ve el diagrama esférico de Voronoi cuando todos los puntos se encuentran dentro de un hemisferio común? El código al que hace referencia lo obtiene con un casco convexo, pero parece que no funcionará.
whuber

hmm, sí, supongo que incluso si no están todos en un hemisferio común, habrá un polígono que carezca de un punto de origen. ¿Qué pasa si construiste un punto para él usando el punto antipodal del centroide de los cascos convexos? Luego, además de recorrer cada vértice, se examinaría este punto antípoda convexo para ver si está más lejos de sus vecinos que la distancia máxima del vértice.
Kirk Kuykendall

Ese fue mi pensamiento inicial, pero los puntos antipodales crearán polígonos artificiales. ¡Piense en lo que sucedería en su ilustración si se incluyera la antípoda para cada punto, por ejemplo! Probablemente haya una solución de esta naturaleza, pero parece que no es sencilla.
whuber

1

Puede usar una función de distancia ponderada por costo para identificar qué tan lejos está cada celda de su ráster de todos los demás puntos.


¿Qué costo usarías?
whuber

Si establece el costo en una unidad; podría identificar cuál sería el punto más alejado en función de la distancia.
djq

@whuber Aunque quizás esto no sea diferente al cálculo del enfoque de distancia euclidiana ya mencionado.
djq

Esa es la distancia euclidiana. En realidad, ni siquiera es eso: es un tipo extraño de distancia octogonal (los círculos son en realidad octágonos). En esta situación (solo distancias desde puntos, sin barreras), es mucho más preciso y más rápido calcular una distancia euclidiana o una cuadrícula de distancia esférica directamente, en lugar de tratar de explotar CostDistance para esto.
whuber

No estoy seguro de que la función de distancia de costo ponderado ayudaría porque necesito las coordenadas de un solo punto y tengo un conjunto de puntos de vectores existentes; pero lo intentaré. Gracias.
Demetris

1

Hasta donde yo sé, este análisis del " Polo de Inaccesibilidad " tiene que hacerse de forma iterativa.

Un enfoque ráster iterativo sería apropiado siempre que esté mirando un área pequeña con una distorsión mínima de la proyección. Para cada celda, calcule la distancia a todos los puntos, luego tome la distancia mínima. La celda con el valor más alto es el polo. También puede usar Euclidean Distance en Spatial Analyst para lograr esto.

Un enfoque vectorial iterativo es más complicado. García-Castellanos et al. 2007 describen un método iterativo basado en una tierra esférica. Parece que han hecho que su código C esté disponible en línea . Puedo imaginar formas de hacer esto en Arc con buffers, pero aún sería iterativo y lento.


0

puede usar Distancia de punto (Análisis) La herramienta crea una tabla con distancias entre dos conjuntos de puntos. Si se utiliza el radio de búsqueda predeterminado, se calculan las distancias desde todos los puntos de entrada a todos los puntos cercanos. La tabla de salida puede ser bastante grande. Por ejemplo, si tanto las características de entrada como las cercanas tienen 1,000 puntos cada una, la tabla de salida puede contener un millón de registros.


¿Cómo se puede aplicar esto para encontrar las coordenadas de un nuevo punto que no aparece en la entrada? ¿Quizás has leído mal la pregunta?
whuber

0

El punto más alejado de su conjunto de puntos sería el recíproco al punto más interno de su conjunto. Por ejemplo, si su punto más interno en su conjunto tenía coordenadas 49 grados Norte y -144 grados Este, entonces el punto recíproco y más alejado tendría coordenadas de 49 grados Sur y 36 grados Oeste. Esto no es exactamente cierto porque la Tierra no es perfectamente esférica, sino geoidal; por lo tanto, la exactitud de su punto de resultado depende mucho de qué proyección y sistemas geográficos (ortográficos, ortorectificados ...) use. Podría ser útil encontrar un recíproco para todo el conjunto (transferir una antípoda para un conjunto) y luego ejecutar un análisis de superficie dentro del terreno cubierto por el conjunto de puntos de la antípoda, ya que el terreno puede muy. Supongo que su pregunta no se trata de ningún punto en cuerpos extraterrestres, como otros planetas o lunas. Lo siento, No tengo código VB para ti. 🙄


El punto más alejado de todos los demás puntos en un conjunto sería el más interno (uno que es el más alejado de todos los puntos más externos a lo largo del borde), todavía sería el más cercano a cada punto inmediatamente al lado de él. Este es un análisis de conglomerados, no divertido. Probablemente sea mejor mirar los mismos átomos de carga en Física. ”
Yuriy Shevchuk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.