J'ai deux jeux de données ponctuelles dans ArcGIS, qui sont tous deux donnés en coordonnées lat / lon WGS84 et les points sont répartis dans le monde entier. Je voudrais trouver le point le plus proche dans l'ensemble de données A de chaque point dans l'ensemble de données B, et obtenir la distance entre eux en kilomètres.
Cela semble être une utilisation parfaite de l'outil Near, mais cela me donne des résultats dans le système de coordonnées des points d'entrée: c'est-à-dire des degrés décimaux. Je sais que je pourrais re-projeter les données, mais je suppose (à partir de cette question ) qu'il est difficile (voire impossible) de trouver une projection qui donnera des distances précises partout dans le monde.
Les réponses à cette question suggèrent d'utiliser la formule Haversine pour calculer les distances en utilisant directement les coordonnées latitude-longitude. Existe-t-il un moyen de le faire et d'obtenir un résultat en km en utilisant ArcGIS? Sinon, quelle est la meilleure façon d'aborder cela?
Ce n'est pas une solution ArcGIS, mais l'utilisation d'un modèle de données Round Earth dans une base de données spatiale ferait l'affaire. Calculer la distance de la terre dans une base de données prenant en charge ce serait assez facile. Je peux vous proposer deux lectures:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
la source
Vous avez besoin d'un calcul de distance qui fonctionne avec Lat / Long. Vincenty est celui que j'utiliserais (précision 0,5 mm). J'ai déjà joué avec, et ce n'est pas trop difficile à utiliser.
Le code est un peu long, mais ça marche. Compte tenu de deux points en WGS, il retournera une distance en mètres.
Vous pouvez l'utiliser comme un script Python dans ArcGIS, ou l'enrouler autour d'un autre script qui itère simplement sur les deux fichiers de formes de points et crée une matrice de distance pour vous. Ou, il est probablement plus facile d'alimenter les résultats de GENERATE_NEAR_TABLE en trouvant les 2-3 entités les plus proches (pour éviter les complications de la courbure de la Terre).
la source
J'ai fait des expériences similaires avec de petits ensembles de données en utilisant l'outil Point Distance. Ce faisant, vous ne pouvez pas trouver automatiquement les points les plus proches dans votre ensemble de données A, mais obtenez au moins une sortie de tableau avec des résultats utiles en km ou en m. Dans une étape suivante, vous pouvez sélectionner la distance la plus courte jusqu'à chaque point du jeu de données B hors de la table.
Mais cette approche dépendrait de la quantité de points dans vos jeux de données. Il peut ne pas fonctionner correctement avec de grands ensembles de données.
la source
Si vous avez besoin de mesures géodésiques de haute précision et robustes, utilisez GeographicLib , qui est écrit en natif dans plusieurs langages de programmation, y compris C ++, Java, MATLAB, Python, etc.
Voir CFF Karney (2013) «Algorithms for geodesics» pour une référence littéraire. Notez que ces algorithmes sont plus robustes et précis que l'algorithme de Vincenty, par exemple près des antipodes.
Pour calculer la distance en mètres entre deux points, obtenez l'
s12
attribut de distance à partir de la solution géodésique inverse . Par exemple, avec le paquet GeographicLib pour PythonOu créez une fonction de confort, qui convertit également des mètres en kilomètres:
Maintenant, pour trouver le point le plus proche entre les listes
A
etB
, chacun avec 100 points:la source