Eu tenho dois conjuntos de dados de pontos no ArcGIS, ambos dados nas coordenadas latinas / longínquas WGS84 e os pontos estão espalhados por todo o mundo. Gostaria de encontrar o ponto mais próximo no conjunto de dados A para cada ponto no conjunto de dados B e obter a distância entre eles em quilômetros.
Parece um uso perfeito da ferramenta Near, mas isso me dá resultados no sistema de coordenadas dos pontos de entrada: ou seja, graus decimais. Sei que poderia re-projetar os dados, mas deduzo (a partir dessa pergunta ) que é difícil (se não impossível) encontrar uma projeção que ofereça distâncias precisas em todo o mundo.
As respostas a essa pergunta sugerem o uso da fórmula de Haversine para calcular distâncias usando as coordenadas de latitude-longitude diretamente. Existe uma maneira de fazer isso e obter um resultado em km usando o ArcGIS? Caso contrário, qual é a melhor maneira de abordar isso?
fonte
Não é uma solução ArcGIS, mas o uso de um modelo de dados Round Earth em um banco de dados espacial ajudaria. Calcular a distância da Terra no banco de dados que suporta isso seria bem fácil. Eu posso sugerir duas leituras:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
fonte
Você precisa de um cálculo de distância que funcione com Lat / Long. Vincenty é o que eu usaria (precisão de 0,5 mm). Já brinquei com ele antes e não é muito difícil de usar.
O código é um pouco longo, mas funciona. Dados dois pontos no WGS, ele retornará uma distância em metros.
Você pode usar isso como um script Python no ArcGIS, ou envolvê-lo em outro script que simplesmente itere sobre os dois Shapefiles de ponto e constrói uma matriz de distância para você. Ou, provavelmente, é mais fácil alimentar os resultados de GENERATE_NEAR_TABLE com a localização das 2-3 características mais próximas (para evitar complicações da curvatura da terra).
fonte
Fiz experiências semelhantes com pequenos conjuntos de dados usando a ferramenta Point Distance. Fazendo isso, você não pode encontrar automaticamente os pontos mais próximos no seu conjunto de dados A, mas pelo menos obter uma saída de tabela com resultados úteis de km ou m. Em uma próxima etapa, você pode selecionar a menor distância para cada ponto do conjunto de dados B da tabela.
Mas essa abordagem dependeria da quantidade de pontos em seus conjuntos de dados. Pode não funcionar corretamente com grandes conjuntos de dados.
fonte
Se você precisar de medições geodésicas robustas e de alta precisão, use GeographicLib , que é originalmente escrito em várias linguagens de programação, incluindo C ++, Java, MATLAB, Python, etc.
Veja CFF Karney (2013) "Algoritmos para geodésica" para uma referência literária. Observe que esses algoritmos são mais robustos e precisos que o algoritmo de Vincenty, por exemplo, perto de antípodas.
Para calcular a distância em metros entre dois pontos, obtenha o
s12
atributo de distância da solução geodésica inversa . Por exemplo, com o pacote geographiclib para PythonOu crie uma função de conveniência, que também converte metros para quilômetros:
Agora, encontre o ponto mais próximo entre as listas
A
eB
, cada um com 100 pontos:fonte