Pregunta

He x,y los datos que vienen de una base de datos [coordinates1] (SIG - pero esto podría ser cualquier base de datos). Tengo mi solicitud con su propio sistema de coordenadas, haciendo referencia el mismo mapa.

I han establecido que existe una relación lineal entre coordinates1 (x, y) y coordinates2(x,y) como he restado dos coordinates1 y coordinates2 (dividiendo x1 con x2 y y1 con y2) diferente y en todos los casos I conseguir que ambos mostrando 0,724 o 0.141 o 0.825 respectivamente es decir coordinates1 + coordinates2.

Lo que ahora necesito averiguar - o ayudarle - es que si coordinates1(100000,200000) y coordinates2(0.125,0.255) ¿Cómo calculo coordinates2(x,y) partir de los datos en coordinates1(x,y)

?
¿Fue útil?

Solución

En aras de la claridad, voy a llamar a las coordenadas en su base ( x n , y n ), y coordina en su objetivo ( u n , v n ).

Ahora, si asumimos:

  1. Los orígenes de los dos sistemas de coordenadas son los mismos.
  2. La orientación de los dos sistemas de coordenadas son los mismos (es decir, uno no se gira con respecto a la otra).

En este caso sólo se necesita un conjunto de puntos {( x 1 , y 1 ), ( u 1 , v 1 )} para determinar la ubicación de ( u n , v n ):

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

Nota: hay que tener x 1 ≠ 0, y 1 ≠ 0


Por otro lado, si los dos sistemas de coordenadas tienen diferentes orígenes (pero todavía no se hacen girar con respecto a la otra), necesitaremos dos conjuntos de puntos {( x 1 , y 1 ), ( u 1 , v 1 )} y {( x 2 , y 2 ), (< i> U 2 , v 2 )}:

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

Nota: hay que tener x 1 x 2 , y 1 y 2


Ahora, si el sistema de dos coordinaciones se hacen girar con respecto a la otra, lo que necesita (creo) un conjunto de coordenadas más coincidentes. Pero no suena como que necesita que (a menos que uno de sus mapas ha apuntando hacia el norte en una dirección que no sea hacia arriba), así que no voy a trabajar a cabo los cálculos ahora. :)

Otros consejos

Para hacer la conversión, lo que necesita saber las coordenadas de un punto O en los sistemas de sus dos coordenadas.

Supongamos O tiene coordenadas x1O,y1O en el sistema de coordenadas 1 y 2 x2O,y2O en el sistema de coordenadas.

A continuación, un punto de coordenadas x1,y1 en el sistema 1, y x2,y2 en el sistema 2 va a satisfacer:

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

donde Kx y Ky son el factor de escala. Si conoce las coordenadas de otro punto M en ambos sistemas, lo que tendrá Kx y Ky con

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

A continuación, sólo tiene que aplicar la primera relación al pasar de un sistema a otro sistema, con

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

o

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

¿También necesita el código?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top