Pergunta

Eu tenho dados x,y vindo de um banco de dados [coordinates1] (GIS - mas isso poderia ser qualquer banco de dados). Eu tenho a minha candidatura com o seu próprio sistema de coordenadas, fazendo referência ao MAP MESMO.

I estabeleceram que existe uma relação linear entre coordinates1 (x, y) e coordinates2(x,y) como tenho subtraído dois coordinates1 e coordinates2 (dividindo x1 com x2 e y1 com y2) diferente e em todos os casos que eu levá-los ambos mostrando 0,724 ou 0,141 ou 0,825, respectivamente, ou seja, coordinates1 + coordinates2.

O que eu agora preciso descobrir - ou você ajuda? - é que se coordinates1(100000,200000) e coordinates2(0.125,0.255) Como posso calcular coordinates2(x,y) a partir dos dados em coordinates1(x,y)

Foi útil?

Solução

Por uma questão de clareza, eu vou chamar coordenadas em sua base ( x n , y n ), e coordenadas em seu alvo ( u n , v n ).

Agora, se assumirmos:

  1. As origens dos dois sistemas de coordenadas são os mesmos.
  2. A orientação dos dois sistemas de coordenadas são os mesmos (isto é, um não é rodado em relação ao outro).

Neste caso, você só precisa de um conjunto de pontos {( x 1 , y 1 ), ( L 1 , v 1 )} para determinar a localização de ( L n , v n ):

  • L n = L 1 / x 1 * x n
  • v n = v 1 / y 1 * y n

Nota: nós temos que ter x 1 ? 0, y 1 ? 0


Por outro lado, se os dois sistemas de coordenadas têm origens diferentes (mas eles ainda não são rodados em relação um ao outro), vamos precisar de dois conjuntos de pontos {( x 1 , y 1 ), ( L 1 , v 1 )} e {( x 2 , y 2 ), (< i> u 2 , v 2 )}:

  • L n = ( L 2 - L 1 ) / ( x 2 - x 1 ) * ( x n - x 1 ) + L 1
  • v n = ( v 2 - v 1 ) / ( y 2 - y 1 ) * ( y n - y 1 ) + v 1

Nota: nós temos que ter x 1 ? x 2 , y 1 ? y 2


Agora, os sistemas se os dois coordenam são rodados em relação um ao outro, você precisa (eu acredito) mais um conjunto de coordenadas correspondentes. Mas não soa como você precisa que (a menos que um de seus mapas tem apontando para o norte em uma outra direção reta), então eu não vou trabalhar para fora a matemática agora. :)

Outras dicas

Para fazer a conversão, você precisa saber as coordenadas de um ponto O em suas duas coordenadas sistemas.

O supõem Vamos tem coordenadas x1O,y1O no sistema 1, e x2O,y2O no sistema 2 de coordenadas.

Em seguida, um ponto com coordenadas x1,y1 no sistema 1, e x2,y2 no sistema 2 irá satisfazer:

(x1O - x1) = Kx * (x2O - x2)
(y1O - y1) = Ky * (y2O - y2)

onde Kx e Ky são o fator de escala. Se você conhece as coordenadas de um outro ponto M em ambos os sistemas, do que você terá Kx e Ky com

Kx = (x1O - x1M) / (x2O - x2M)
Ky = (y1O - y1M) / (y2O - y2M)

Em seguida, você só precisa aplicar a primeira relação para ir de um sistema para outro sistema, com

x1 = x1O - Kx * (x2O - x2)
y1 = y10 - Ky * (y2O - y2)

ou

x2 = x2O - (x1O - x1) / Kx
y2 = y2O - (y1O - y1) / Ky

Você também precisa do código?

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