Esta es una pregunta complementaria a la anterior. ¿Puede sugerir algunos textos introductorios bien escritos sobre proyecciones de sistemas de coordenadas?
Supongamos que estoy trabajando con la proyección del mapa CH1903, que por lo que sé es conforme, pero no equidistante. El significado, los ángulos (forma) se han conservado, pero no las áreas, distancias o escalas. (Al menos estos no se han conservado exactamente ). Hasta ahora tan bueno.
Me pregunto qué tipo de cálculo realiza ArcGIS cuando ahora quiero calcular la distancia entre dos puntos. En ArcObjects, podría usar la IProximityOperator
interfaz de la siguiente manera:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Pregunta: Cuando estoy trabajando con un sistema de referencia que no preserva con precisión las distancias, ¿qué haría ArcGIS cuando le pregunto la distancia entre dos puntos (como se muestra arriba)?
¿Simplemente hace algunas matemáticas de Pitágoras (a 2 + b 2 = c 2 ) para obtener la distancia, lo que significa que la distancia devuelta solo será tan precisa como lo permita la proyección?
¿O hará algo más complicado, como alguna forma de reproyección, para obtener una distancia más precisa?
( La misma pregunta, pero en general: una vez que se han proyectado esas geometrías, ¿realiza ArcGIS todos los cálculos simplemente en el espacio euclidiano, o la proyección del mapa utilizado todavía influye en los cálculos de distancias, ángulos, áreas, etc.?)
Respuestas:
Si desea un método estable para calcular distancias geodésicas, le recomiendo el contenedor de Richie Carmichael para el motor de proyección de ESRI .
Actualización: Acabo de probar el código de Richie con ArcGIS 10.0 en Vista64 y obtengo una excepción después de llamar
LoadLibrary
. Lo investigaré más tarde.Por ahora, sin embargo, aquí hay un código en respuesta a las preguntas en los comentarios de otra respuesta.
El código compara IProximityOperator para puntos con y sin referencias espaciales. Luego muestra cómo usar una proyección equidistante azimutal (con el primer punto como punto de tangencia) para encontrar la distancia del gran círculo.
Aquí está la salida:
Creo que sería interesante probar esto contra el motor de proyección dll (pe.dll). Publicaré resultados si alguna vez hago que el código de Richie funcione.
Actualización: una vez que cambié el código de Richies para compilar para x86, lo ejecuté. Interesante ... la gran distancia del círculo que me da es 1960273.80162999, una diferencia significativa con respecto al método equidistante azimutal anterior.
fuente
En ArcGIS 10, vea IGeometryServer2 que ahora tiene GetDistanceGeodesic (distancia geodésica entre dos geometrías), GetLengthsGeodesic (devuelve las longitudes geodésicas de cada polilínea) y DensifyGeodesic (densifica una polilínea trazando puntos a lo largo de las líneas geodésicas que conectan los vértices, usa IPolycurve4: : GeodesicDensify) métodos.
Como se mencionó en las otras respuestas, ArcGIS todavía usa principalmente cálculos planos.
Melita Kennedy
Algunos comentarios sobre las otras respuestas (¡no hay suficientes representantes para comentar directamente!).
La proyección equidistante azimutal de Esri admite elipsoides. El código GreatCircleDist está creando un PCS que utiliza un GCS basado en elipsoide / esferoide, por lo tanto, las distancias desde el centro / punto de origen serán distancias geodésicas, no grandes distancias circulares. También podría simplificarse. Conocemos las coordenadas proyectadas del primer punto porque es el centro de la proyección: 0,0. Por lo tanto, solo es necesario proyectar el segundo punto. Entonces se podría usar una función EuclidianDistance simplificada.
Verifiqué los resultados con las funciones geodésicas de pe.dll y coincidió. Parece que la aplicación de Richie está usando una esfera, por lo que está devolviendo distancias / coordenadas de gran círculo en su aplicación de prueba. Es por eso que los resultados no coinciden. No reconocí los valores del radio; ¡Creo que necesito hablar con él al respecto!
fuente
La precisión de cualquier respuesta sobre ArcGIS está sujeta a cambios en cualquier momento: por lo que sabemos, se introducirán nuevos procedimientos en el próximo paquete de servicios sin advertencia ni documentación. Dicho esto, el software ESRI ha utilizado durante mucho tiempo cálculos euclidianos ( por ejemplo , la fórmula de Pitágoras para distancias) siempre que se utilizan coordenadas proyectadas. A menudo, en cálculos como el que ilustra, el software ni siquiera tiene acceso a la información de proyección, entonces, ¿qué más se puede hacer?
Su pregunta en sí parece sugerir que los cálculos de distancia euclidiana para una proyección equidistante son correctos. Nada mas lejos de la verdad. Para una proyección equidistante de un punto, se garantiza que la distancia euclidiana al punto base sea igual a la distancia geodésica; Para una proyección equidistante de dos puntos, se garantiza que la distancia euclidiana a cualquier punto base sea igual a la distancia geodésica. A cambio de esas garantías, la distorsión métrica entre todos los otros pares de puntos generalmente aumenta considerablemente en comparación con otras proyecciones que uno podría elegir.
fuente