Pergunta

Eu tenho vários pares de latitude/longitude que mapeiam coordenadas x/y conhecidas em um mapa (geograficamente distorcido).

Então eu tenho mais um par latitude/longitude.Quero plotá-lo no mapa da melhor maneira possível.Como faço para fazer isso?

No início, decidi criar um sistema de equações lineares para os três pontos lat/long mais próximos e calcular uma transformação a partir deles, mas isso não funciona nada bem.Como se trata de um sistema linear, também não posso usar mais pontos próximos.

Você não pode presumir que o Norte está em alta:tudo o que você tem são os mapeamentos lat/long->x/y existentes.

EDITAR:não é uma projeção de Mercator, nem nada parecido.É arbitrariamente distorcido para facilitar a leitura (pense no mapa do metrô).Quero usar apenas os 5 a 10 mapeamentos mais próximos, para que a distorção em outras partes do mapa não afete o mapeamento que estou tentando calcular.

Além disso, o mapa inteiro está em uma área geográfica muito pequena, então não há necessidade de se preocupar com o globo – as suposições da Terra plana são boas o suficiente.

Foi útil?

Solução

Existem detalhes mais específicos sobre o tipo de distorção?Se, por exemplo, suas latitudes e longitudes estiverem "distorcidas" em seu mapa 2D usando uma projeção de Mercator, a matemática de conversão será prontamente disponível.

Se o mapa for distorcido de forma verdadeiramente arbitrária, há muitas coisas que você pode tentar, mas a mais simples provavelmente seria calcular um média ponderada de seus mapeamentos de pontos existentes.Seus pesos podem ser o inverso ao quadrado da distância x/y do seu novo ponto até cada um dos pontos existentes.

Algum pseudocódigo:

estimate-latitude-longitude (x, y)

    numerator-latitude := 0
    numerator-longitude := 0
    denominator := 0

    for each point,
        deltaX := x - point.x
        deltaY := y - point.y
        distSq := deltaX * deltaX + deltaY * deltaY
        weight := 1 / distSq

        numerator-latitude += weight * point.latitude
        numerator-longitude += weight * point.longitude
        denominator += weight

    return (numerator-latitude / denominator, numerator-longitude / denominator)

Este código fornecerá uma aproximação relativamente simples.Se você puder ser mais preciso sobre a forma como a projeção distorce as coordenadas geográficas, provavelmente conseguirá fazer muito melhor.

Outras dicas

Tudo bem.Do ponto de vista teórico, dado que a distorção é "arbitrária" e qualquer solução exige que você modele essa distorção arbitrária, obviamente não será possível obter uma "resposta".Contudo, qualquer solução envolverá a imposição (geralmente de forma implícita) de algum modelo de distorção que pode ou não refletir a realidade da situação.

Como você parece estar mais interessado em modelos que presumem algum tipo de continuidade local do mapeamento de distorção, a escolha mais óbvia é aquela que você já tentou:interpolação linear entre os pontos mais próximos.Ir além disso exigirá conhecimentos de análise matemática e numérica mais sofisticados.

Você está incorreto, entretanto, ao presumir que não pode expandir isso para mais pontos.Você pode usar uma abordagem de erro mínimo quadrático.Encontre a resposta linear que minimiza o erro dos outros pontos.Esta é provavelmente a extensão mais direta.Em outras palavras, pegue os 5 pontos mais próximos e tente chegar a uma aproximação linear que minimize o erro desses pontos.E use isso.Eu tentaria isso a seguir.

Se isso não funcionar, a suposição de linearidade na área de N pontos será quebrada.Nesse ponto, você precisará atualizar para um modelo quadrático ou cúbico.A matemática vai ficar agitada nesse ponto.

o problema é que a esfera pode ser distorcida de várias maneiras, e ter todos esses pontos conhecidos no equador, digamos, não ajudará a mapear pontos mais distantes.

Você precisa de pontos 'próximos' melhores, então pode assumir que esses três pontos estão em um plano com o quarto e fazer a interpolação - sabendo que a distância das longitudes é uma função, não uma constante.

Hum.Talvez esteja faltando alguma coisa sobre a questão aqui, mas se você tiver informações longas/laterais, também terá a direção do norte?

Parece que você precisa mapear coordenadas geodésicas para um sistema de coordenadas projetado.Por exemplo, osgb para wgs84.

A matemática envolvida não é trivial, mas o código tem apenas algumas linhas.Se eu tivesse mais tempo postaria mais, mas preciso de um banho, então vou ser chato e colocar o link para o Wikipédia entrada que é muito boa.

Observação:Pós-banho editado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top