Tengo dos conjuntos de datos de puntos en ArcGIS, los cuales se dan en coordenadas WGS84 lat / lon y los puntos se extienden por todo el mundo. Me gustaría encontrar el punto más cercano en el conjunto de datos A a cada punto en el conjunto de datos B, y obtener la distancia entre ellos en kilómetros.
Esto parece un uso perfecto de la herramienta Near, pero eso me da resultados en el sistema de coordenadas de los puntos de entrada: es decir, grados decimales. Sé que podría volver a proyectar los datos, pero deduzco ( de esta pregunta ) que es difícil (si no imposible) encontrar una proyección que proporcione distancias precisas en todo el mundo.
Las respuestas a esa pregunta sugieren usar la fórmula de Haversine para calcular distancias usando las coordenadas de latitud y longitud directamente. ¿Hay alguna manera de hacer esto y obtener un resultado en km usando ArcGIS? Si no, ¿cuál es la mejor manera de abordar esto?
fuente
No es una solución de ArcGIS, pero usar un modelo de datos de Round Earth en una base de datos espacial haría el truco. Calcular la distancia terrestre en una base de datos que lo respalde sería bastante fácil. Te puedo sugerir dos lecturas:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
fuente
Necesita un cálculo de distancia que funcione con Lat / Long. Vincenty es el que usaría (precisión de 0,5 mm). He jugado con él antes, y no es demasiado difícil de usar.
El código es un poco largo, pero funciona. Dados dos puntos en WGS, devolverá una distancia en metros.
Puede usar esto como un script de Python en ArcGIS, o envolverlo alrededor de otro script que simplemente itera sobre los dos archivos de forma de puntos y crea una matriz de distancia para usted. O, probablemente sea más fácil alimentar los resultados de GENERATE_NEAR_TABLE al encontrar las 2-3 características más cercanas (para evitar complicaciones de la curvatura de la tierra).
fuente
Hice experiencias similares con pequeños conjuntos de datos usando la herramienta Distancia de puntos. Al hacerlo, no puede encontrar automáticamente los puntos más cercanos en su conjunto de datos A, pero al menos obtener una salida de tabla con resultados útiles de km o m. En el siguiente paso, puede seleccionar la distancia más corta a cada punto del conjunto de datos B fuera de la tabla.
Pero este enfoque dependerá de la cantidad de puntos en sus conjuntos de datos. Es posible que no funcione correctamente con grandes conjuntos de datos.
fuente
Si necesita mediciones geodésicas robustas y de alta precisión, use GeographicLib , que está escrito de forma nativa en varios lenguajes de programación, incluidos C ++, Java, MATLAB, Python, etc.
Ver CFF Karney (2013) "Algorithms for geodesics" para una referencia literaria. Tenga en cuenta que estos algoritmos son más robustos y precisos que el algoritmo de Vincenty, por ejemplo, cerca de las antípodas.
Para calcular la distancia en metros entre dos puntos, obtenga el
s12
atributo de distancia de la solución geodésica inversa . Por ejemplo, con el GeographicLib paquete para PythonO realice una función de conveniencia, que también convierte de metros a kilómetros:
Ahora para encontrar el punto más cercano entre las listas
A
yB
, cada una con 100 puntos:fuente