Estive pensando (e fazendo codificação de protótipo) em uma base de código geográfica 'sem projeção' com suas primitivas básicas de ponto, linha e polígono.
Em vez de lidar com todos os sacrifícios que acompanham a projeção no avião, no entanto, estou escrevendo algoritmos que funcionam diretamente na superfície do elipsóide.
Uma das possíveis complicações é que existem diferentes tipos de "linhas" por aí:
- (arcos de) grandes círculos: menor distância ao longo da superfície (elevação constante de zero) entre dois pontos; deve corresponder exatamente aos caminhos da linha de visão.
- linhas de rumo: conecte os dois pontos com um caminho de direção constante - por exemplo, algumas bordas de estados seguem linhas de latitude (que não são grandes círculos).
- curvas: arcos circulares (trajetos de distância constante de um dado ponto central); Bezier (não tenho certeza da reinterpretação correta no contexto de uma superfície curva), etc.
Dos diferentes tipos de caminhos (incluindo os que eu perdi), que são importantes o suficiente para que eles tenham uma representação 'exata', vs representando dentro de um limite de erro por segmentos curtos de um caminho mais simples (por exemplo, segmentos curtos de arco geodésico)?
Edições de esclarecimento: por 'exato' acima, quero dizer paramétrico. Em outras palavras: computável com a precisão desejada, sem uma etapa de densificação na importação.
Uma edição , muito mais tarde, para adicionar uma citação que me deparei, aproxima muito meus pensamentos sobre o uso de vetores de unidades 3D como uma primitiva geográfica: Uma Representação de Posição Horizontal Não-singular ( link alt ). Melhor parte? Eu não tive que escrever tudo sozinho!
Respostas:
A questão diz respeito a que tipos de curvas merecem uma representação implicitamente exata, em vez de uma aproximação discretizada. O cerne da questão é esta: para ter sucesso, a classe de curvas que você suporta dessa maneira deve ser fechada na classe de operações de criação de curvas e polígonos suportadas no GIS.
Essas operações incluem:
Carregando. Nesse processo, você precisa construir curvas paralelas aos recursos. ("Paralelo" significa no sentido de manter uma distância fixa.) Isso inclui círculos e partes dos mesmos (para pontos de amortecimento), paralelos oblíquos (que são curvas equidistantes à geodésica no esferóide e podem reduzir para pontos isolados em casos especiais) e círculos concêntricos. Na esfera (mas não geralmente no elipsóide), os paralelos oblíquos são eles mesmos círculos.
Polígonos de influência (polígonos de Thiessen; polígonos de Voronoi; células de Dirichlet). Para construir os polígonos de Thiessen para uma coleção de recursos de pontos, precisamos encontrar linhas de bissecção, que são geodésicas (são retas); mas para uma coleção de outros tipos de recursos, como pontos e segmentos, os limites dos polígonos de Thiessen incluem partes de parábolas (no plano). Talvez você não queira apoiar isso ...
Sobreposições teóricas de conjuntos (interseção, união, diferença, complemento). Essas operações não criam novos tipos de curvas.
Tradução e rotação paralelas . Geralmente não é possível executar exatamente em um elipsóide (porque não é um espaço homogêneo ), mas é simples na esfera. Na esfera, essas operações não criam novos tipos de curvas.
A classe realmente problemática de curvas que você propõe consiste nas linhas gerais de rumbos (loxodromos). Linhas de latitude são linhas de rumo, mas (pelo menos na esfera) também são círculos, portanto não apresentam problemas adicionais. Mas as linhas gerais de rumbos são bestas complicadas: se não são meridianos ou paralelos, elas espiralam em um pólo ou no outro. Buffers e traduções paralelas de linhas de rumbos serão genuinamente novos tipos de curvas. Você teria que representar esses resultados como segmentos quebrados de linhas e círculos, o que anularia seu objetivo (e seria bastante difícil de calcular). Portanto, sugiro não tentar suportar exatamente as linhas de rumba.
Em suma, parece que você pode ter sucesso em seu programa se (a) você trabalhar em um modelo esférico da Terra em vez do modelo elipsoidal ("esferoidal") mais geral e (b) você limitar certas construções, como polígonos de Thiessen (e eixos mediais, que estão intimamente relacionados) a coleções de pontos.
fonte
Dan,
Você pode estar interessado em alguns dos trabalhos que tenho feito em geodésica. Isso é descrito nesta pré - impressão . Em particular, observe:
Os problemas geodésicos diretos e inversos podem ser resolvidos com precisão de máquina. Isso significa cerca de 15 nm para precisão dupla. Posso mudar para duplas longas, adicionar um termo extra na série e obter precisão às 18h. Observe, em particular, que a solução para o problema inverso sempre converge (ao contrário do método de Vincenty). A velocidade é comparável ao método de Vincenty (a solução direta é um pouco mais rápida, a solução inversa é um pouco mais lenta).
Calculo o comprimento reduzido e as escalas geodésicas. Essas quantidades fornecem as propriedades diferenciais da geodésica e permitem que vários problemas geodésicos (interseções, linhas medianas etc.) sejam resolvidos com rapidez e precisão usando o método de Newton. A curvatura dos limites das regiões tampão pode ser expressa em termos dessas quantidades. Veja esta nota que enviei para a lista de discussão do proj.4.
Defino uma projeção gnomônica elipsoidal na qual a geodésica é quase reta. Isso permite que os problemas na superfície do elipsóide sejam mapeados para problemas na geometria plana. Por exemplo, a interseção de duas geodésicas pode ser encontrada exatamente estimando um ponto de interseção, realizando uma projeção gnomônica sobre esse ponto, re-estimando a interseção e iterando.
Eu dou expressões para a área de um polígono geodésico. Não é necessário subdividir arestas longas para obter um resultado preciso.
GeographicLib (no sourceforge) implementa os algoritmos.
Finalmente, observo que, para muitos propósitos, a geodésica é preferível a qualquer outro tipo de curva (em particular grandes elipses ou linhas de rumba), porque obedecem à desigualdade do triângulo. Isso tem várias consequências:
fonte
Esta é a resposta à pergunta de @ Dan sobre o uso da esfera auxiliar para resolver problemas de interseção.
Não, a esfera auxiliar não permite resolver interseções diretamente. O problema é que o mapeamento do elipsóide para a esfera depende da geodésica (por exemplo, seu azimute no equador). Assim, a esfera auxiliar é boa para resolver uma única geodésica, mas não para resolver qualquer problema que envolva mais de uma geodésica.
Minha maneira recomendada de fazer interseções e interceptações geodésicas (caminho mais curto entre um ponto e uma geodésica) é usar a projeção gnomônica. A geodésica em uma esfera é mapeada para linhas retas na projeção gnomônica e, portanto, desde que seu problema esteja confinado a um hemisfério, a projeção gnomônica converte esses problemas em 2d.
Não há projeção que preserve a retidão da geodésica para um elipsóide (porque sua curvatura não é constante). No entanto, GeographicLib fornece uma generalização da projeção gnomônica na qual a geodésica é quase reta. Isso leva a algoritmos de convergência rápida para interseção e interceptações geodésicas (novamente desde que os pontos estejam todos dentro do hemisfério). Veja minhas respostas (com código!) Para o gpesquero em
https://sourceforge.net/projects/geographiclib/forums/forum/1026621/topic/4085561
Por fim, gostaria de salientar que converti recentemente as rotinas geodésicas da GeographicLib para Javascript, para que você possa brincar com elas no Google Maps. Vejo
http://geographiclib.sourceforge.net/scripts/geod-google.html
http://geographiclib.sourceforge.net/scripts/geod-calc.html
(Ainda não converti a projeção gnomônica em Javascript. Isso seria razoavelmente direto. Eu também converteria a projeção equidistante azimutal ao mesmo tempo, já que é uma maneira conveniente de resolver outra classe de problemas geodésicos que envolvem "linhas medianas". .)
ADENDA (19/08/2014)
Também é possível resolver o tempo de aproximação mais próxima para duas embarcações que viajam em velocidade constante ao longo da geodésica. Como conhecemos as propriedades diferenciais da geodésica, é possível usar o método de Newton para obter uma solução precisa em algumas iterações. O código para implementar isso é publicado em
https://sourceforge.net/p/geographiclib/discussion/1026620/thread/33ce09e0
fonte