Ceci est une question complémentaire à ma précédente, pouvez-vous suggérer des textes d'introduction bien écrits sur les projections du système de coordonnées?
Supposons que je travaille avec la projection cartographique CH1903, qui, pour autant que je sache, est conforme, mais pas équidistante. Cela signifie que les angles (la forme) ont été conservés, mais pas les zones, les distances ou l'échelle. (Au moins ceux-ci n'ont pas été conservés exactement ). Jusqu'ici tout va bien.
Je me demande quel type de calcul ArcGIS effectue lorsque je veux maintenant calculer la distance entre deux points. Dans ArcObjects, je pouvais utiliser l' IProximityOperator
interface comme suit:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Question: Lorsque je travaille avec un système de référence qui ne préserve pas précisément les distances, que ferait ArcGIS lorsque je l'interroge sur la distance entre deux points (comme illustré ci-dessus)?
Fait-il simplement quelques calculs pythagoriciens (a 2 + b 2 = c 2 ) pour obtenir la distance, ce qui signifie que la distance renvoyée ne sera aussi précise que la projection le permet?
Ou va-t-il faire quelque chose de plus compliqué, comme une certaine forme de reprojection, pour obtenir une distance plus précise?
( La même question, mais plus généralement: une fois que les géométries ont été projetées, ArcGIS effectue-t-il tous les calculs simplement dans l'espace euclidien, ou la projection cartographique utilisée influence-t-elle toujours les calculs des distances, des angles, des zones, etc.?)
Réponses:
Si vous voulez une méthode stable de calcul des distances géodésiques, je recommande le wrapper de Richie Carmichael pour le moteur de projection d'ESRI .
Mise à jour: je viens d'essayer le code de Richie avec ArcGIS 10.0 sur Vista64 et j'obtiens une exception après avoir appelé
LoadLibrary
. J'examinerai cela plus tard.Pour l'instant cependant, voici un code en réponse aux questions dans les commentaires d'une autre réponse.
Le code compare IProximityOperator pour les points avec et sans références spatiales. Il montre ensuite comment utiliser une projection équidistante azimutale (le premier point étant le point de tangence) pour trouver la grande distance du cercle.
Voici la sortie:
Je pense qu'il serait intéressant de tester cela contre la DLL du moteur de projection (pe.dll). Publiera les résultats si jamais je fais fonctionner le code de Richie.
Mise à jour: Une fois que j'ai changé le code Richies pour compiler pour x86, je l'ai fait fonctionner. Intéressant ... la distance du grand cercle qu'il me donne est 1960273.80162999 - une différence significative par rapport à celle renvoyée par la méthode équidistante azimutale ci-dessus.
la source
Dans ArcGIS 10, consultez IGeometryServer2 qui a désormais GetDistanceGeodesic (distance géodésique entre deux géométries), GetLengthsGeodesic (retourne les longueurs géodésiques de chaque polyligne) et DensifyGeodesic (densifie une polyligne en traçant des points le long des lignes géodésiques reliant les sommets, utilise IPolycurve4: : GeodesicDensify).
Comme mentionné dans les autres réponses, ArcGIS utilise toujours principalement des calculs planaires.
Melita Kennedy
Quelques commentaires sur les autres réponses (pas encore assez de représentants pour commenter directement!).
La projection équidistante azimutale d'Esri prend en charge les ellipsoïdes. Le code GreatCircleDist crée un PCS qui utilise un GCS à base d'ellipsoïdes / sphéroïdes, donc les distances du centre / point d'origine seront des distances géodésiques, pas de grandes distances de cercle. Cela pourrait également être simplifié. Nous connaissons les coordonnées projetées du premier point car c'est le centre de la projection: 0,0. Donc, seul le 2e point doit être projeté. Une fonction EuclidianDistance simplifiée pourrait alors être utilisée.
J'ai vérifié les résultats par rapport aux fonctions géodésiques du pe.dll et cela correspondait. Il semble que l'application de Richie utilise une sphère, elle renvoie donc de grandes distances / coordonnées de cercle dans son application de test. C'est pourquoi les résultats ne correspondent pas. Je n'ai pas reconnu les valeurs de rayon; Je pense que je dois lui en parler!
la source
La précision de toute réponse à propos d'ArcGIS est susceptible de changer à tout moment - pour autant que nous le sachions, de nouvelles procédures seront introduites dans le tout prochain Service Pack sans avertissement ni documentation. Cela dit, le logiciel ESRI utilise depuis longtemps les calculs euclidiens ( par exemple , la formule de Pythagore pour les distances) chaque fois que les coordonnées projetées sont utilisées. Souvent, dans des calculs comme celui que vous illustrez, le logiciel n'a même pas accès aux informations de projection, alors que faire d'autre?
Votre question elle-même semble suggérer que les calculs de distance euclidienne pour une projection équidistante sont corrects. Rien ne pouvait être plus loin de la vérité. Pour une projection équidistante à un point, la distance euclidienne au point de base est garantie égale à la distance géodésique; pour une projection équidistante à deux points, la distance euclidienne à l'un ou l'autre point de base est garantie égale à la distance géodésique. En contrepartie de ces garanties, la distorsion métrique entre toutes les autres paires de points est généralement considérablement augmentée par rapport aux autres projections que l'on pourrait choisir.
la source