Esta é uma pergunta de acompanhamento da minha pergunta anterior. Você pode sugerir alguns textos introdutórios bem escritos sobre as projeções do sistema de coordenadas?
Vamos supor que estou trabalhando com a projeção de mapa CH1903, que, pelo que sei, é conforme, mas não equidistante. Significado, ângulos (forma) foram preservados, mas não áreas, distâncias ou escala. (Pelo menos estes não foram preservados exatamente ). Por enquanto, tudo bem.
Estou imaginando que tipo de cálculo o ArcGIS executa quando agora quero calcular a distância entre dois pontos. No ArcObjects, eu poderia usar a IProximityOperator
interface da seguinte maneira:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Pergunta: Quando estou trabalhando com um sistema de referência que não preserva com precisão as distâncias, o que o ArcGIS faria quando eu consultasse a distância entre dois pontos (como mostrado acima)?
Simplesmente faz algumas matemáticas pitagóricas (a 2 + b 2 = c 2 ) para obter a distância, o que significa que a distância retornada será tão precisa quanto a projeção permitir?
Ou será algo mais complicado, como alguma forma de re-projeção, para obter uma distância mais precisa?
( A mesma pergunta, mas de maneira mais geral: uma vez que as geometrias foram projetadas, o ArcGIS executa todos os cálculos simplesmente no espaço euclidiano, ou a projeção de mapa usada ainda influencia os cálculos de distâncias, ângulos, áreas etc.?)
Respostas:
Se você deseja um método estável de calcular distâncias geodésicas, recomendo o invólucro de Richie Carmichael para o Projection Engine da ESRI .
Atualização: Eu apenas tentei o código de Richie com o ArcGIS 10.0 no Vista64 e recebi uma exceção depois de ligar
LoadLibrary
. Vou analisar isso mais tarde.Por enquanto, porém, aqui está um código em resposta a perguntas nos comentários de outra resposta.
O código compara IProximityOperator para pontos com e sem referências espaciais. Em seguida, mostra como usar uma projeção equidistante azimutal (com o primeiro ponto sendo o ponto de tangência) para encontrar a grande distância do círculo.
Aqui está a saída:
Eu acho que seria interessante testar isso contra a dll do mecanismo de projeção (pe.dll). Vou postar resultados se eu conseguir que o código de Richie funcione.
Atualização: Depois que alterei o código Richies para compilar para o x86, consegui executá-lo. Interessante ... a grande distância do círculo que me dá é 1960273.80162999 - uma diferença significativa da que retornou do método equidistante azimutal acima.
fonte
No ArcGIS 10, confira IGeometryServer2, que agora possui GetDistanceGeodesic (distância geodésica entre duas geometrias), GetLengthsGeodesic (retorna os comprimentos geodésicos de cada polilinha) e DensifyGeodesic (densifica uma polilinha plotando pontos ao longo das linhas geodésicas que conectam os vértices, usa IPolycurve4: : GeodesicDensify).
Como mencionado nas outras respostas, o ArcGIS ainda usa principalmente cálculos planares.
Melita Kennedy
Alguns comentários sobre as outras respostas (ainda não há representante suficiente para comentar diretamente!).
A projeção equidistante azimutal de Esri suporta elipsóides. O código GreatCircleDist está criando um PCS que usa um GCS baseado em elipsóide / esferóide. Assim, as distâncias do centro / ponto de origem serão distâncias geodésicas, e não grandes distâncias de círculo. Também poderia ser simplificado. Conhecemos as cordas projetadas do primeiro ponto, porque é o centro da projeção: 0,0. Portanto, apenas o segundo ponto precisa ser projetado. Uma função EuclidianDistance simplificada poderia então ser usada.
Eu verifiquei os resultados com as funções geodésicas do pe.dll e elas corresponderam. Parece que o aplicativo Richie está usando uma esfera, portanto está retornando grandes distâncias / coordenadas de círculo em seu aplicativo de teste. É por isso que os resultados não coincidem. Não reconheci os valores do raio; Eu acho que preciso falar com ele sobre isso!
fonte
A precisão de qualquer resposta sobre o ArcGIS está sujeita a alterações a qualquer momento - pelo que sabemos, novos procedimentos serão introduzidos no próximo service pack sem aviso ou documentação. Dito isto, o software ESRI há muito tempo usa cálculos euclidianos ( por exemplo , a fórmula pitagórica para distâncias) sempre que as coordenadas projetadas são usadas. Freqüentemente, em cálculos como o que você ilustra, o software nem sequer tem acesso às informações da projeção, então o que mais pode ser feito?
Sua própria pergunta parece sugerir que os cálculos da distância euclidiana para uma projeção equidistante estão corretos. Nada poderia estar mais longe da verdade. Para uma projeção equidistante de um ponto, a distância euclidiana ao ponto base é garantida como igual à distância geodésica; para uma projeção equidistante de dois pontos, a distância euclidiana a qualquer ponto base é garantida como igual à distância geodésica. Em troca dessas garantias, a distorção métrica entre todos os outros pares de pontos geralmente aumenta muito em comparação com outras projeções que se possa escolher.
fonte