Quero descobrir um local de destino desconhecido (coordenadas de latitude e longitude). Existem 3 pontos conhecidos (pares de coordenadas de latitude e longitude) e, para cada ponto, uma distância em quilômetros até o local de destino. Como posso calcular as coordenadas do local de destino?
Por exemplo, digamos que tenho os seguintes pontos de dados
37.418436,-121.963477 0.265710701754km
37.417243,-121.961889 0.234592423446km
37.418692,-121.960194 0.0548954278262km
O que eu gostaria é o que é a matemática de uma função que aceita isso como entrada e retorna 37.417959, -121.961954 como saída.
Entendo como calcular a distância entre dois pontos, de http://www.movable-type.co.uk/scripts/latlong.html Entendo o princípio geral de que, com três círculos como esses, você obtém exatamente um ponto de sobreposição. O que eu estou confuso é a matemática necessária para calcular esse ponto com essa entrada.
Respostas:
Depois de analisar a Wikipedia e a mesma pergunta / resposta no StackOverflow , imaginei que iria dar uma facada nele e tentar preencher as lacunas.
Primeiro, não sei onde você obteve a saída, mas ela parece estar errada. Plotei os pontos no ArcMap, armazenei-os em buffer nas distâncias especificadas, executei a interseção nos buffers e depois capturei o vértice da interseção para obter as soluções. Sua saída proposta é o ponto em verde. Calculei o valor na caixa de texto explicativo, que é cerca de 3 metros do que o ArcMap deu para a solução derivada da interseção.
A matemática na página da Wikipédia não é muito ruim, basta ocultar suas coordenadas geodésicas ao ECEF cartesiano, que pode ser encontrado aqui . os termos a / x + h podem ser substituídos pelo raio da esfera autálica, se você não estiver usando um elipsóide.
Provavelmente mais fácil, basta fornecer um código bem documentado (?), Então aqui está em python
fonte
Não tenho certeza se estou sendo ingênuo, mas se você colocar cada ponto em buffer por tamanho e, em seguida, cruzar todos os três círculos que o levariam ao local correto?
Você pode calcular a interseção usando APIs espaciais. Exemplos:
fonte
As notas a seguir usam geometria planarítmica (ou seja, você teria que projetar suas coordenadas em um sistema de coordenadas local apropriado).
Meu raciocínio, com um exemplo trabalhado em Python, segue:
Pegue 2 dos pontos de dados (chame-os
a
eb
). Ligue para o nosso ponto alvox
. Já sabemos as distânciasax
ebx
. Podemos calcular a distânciaab
usando o teorema de Pitágoras.Agora, você pode trabalhar os ângulos dessas linhas:
Infelizmente, estou com pouco tempo para responder a você. No entanto, agora que você conhece os ângulos, pode calcular dois locais possíveis
x
. Em seguida, usando o terceiro ponto c, você pode calcular qual local está correto.fonte
Isso pode funcionar. Rapidamente novamente em python, você pode colocar isso no corpo de uma função xN, yN = coordenadas dos pontos, r1 & r2 = valores do raio
Os valores rx e ry são os valores de retorno (devem estar em uma matriz) dos dois pontos de interseção em um círculo, se isso ajudar a esclarecer as coisas.
Faça isso nos 2 primeiros círculos e depois no primeiro e no último. Se um dos resultados da primeira iteração se comparar com os resultados da segunda (provavelmente com alguma tolerância), você terá o ponto de interseção. Não é uma ótima solução, especialmente quando você começa a adicionar mais do que pontos no processo, mas é a mais simples que posso ver sem resolver um sistema de equações.
fonte
Você pode usar a API espacial do postgis (funções St_Intersection, St_buffer). Como fmark observou, você também deve se lembrar que o Postgis usa algoritmos planares, mas para pequenas áreas, o uso de projeção equidistante não gera muitos erros.
fonte
GEOGRAPHY
tipo e não oGEOMETRY
tipo.Faça isso na linguagem PHP:
fonte