Domanda

Ho x,y dati provenienti da un database [coordinates1] (GIS - ma questo potrebbe essere qualsiasi database). Io ho la mia applicazione con il proprio sistema di coordinate, che fa riferimento la stessa mappa.

ho stabilito che esiste una relazione lineare tra coordinates1 (x, y) e coordinates2(x,y) come ho sottratto due coordinates1 e coordinates2 (dividendo x1 con x2 e y1 con y2) diversi e in tutti i casi ottengo entrambi mostra 0.724 o 0,141 o 0,825 rispettivamente cioè coordinates1 + coordinates2.

Quello che ho ora bisogno di capire - o ti aiuti - è che se coordinates1(100000,200000) e coordinates2(0.125,0.255) Come faccio a calcolare coordinates2(x,y) dai dati in coordinates1(x,y)

?
È stato utile?

Soluzione

Per motivi di chiarezza, ho intenzione di chiamare coordinate nella vostra base ( x n , y n ), e coordina nel vostro target ( U n , v n ).

Ora, se assumiamo:

  1. Le origini dei due sistemi di coordinate sono uguali.
  2. L'orientamento dei due sistemi di coordinate sono uguali (cioè non è ruotato rispetto all'altro).

In questo caso è necessario solo un insieme di punti {( x 1 , y 1 ), ( u 1 , v 1 )} per determinare la posizione di ( u n , v n ):

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

Nota: dobbiamo avere x 1 ≠ 0, y 1 ≠ 0


D'altra parte, se i due sistemi di coordinate hanno origini diverse (ma non sono ancora ruotati l'uno rispetto all'altro), avremo bisogno di due insiemi di punti {( x 1 , y 1 ), ( u 1 , v 1 )} e {( 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: dobbiamo avere x 1 x 2 , y 1 y 2


Ora, se i due sistemi di coordinate vengono ruotati l'uno rispetto all'altro, è necessario (credo) un altro insieme di coordinate corrispondenti. Ma non suona come è necessario che (a meno che una delle tue mappe è a nord che punta in una direzione diversa da quella verso l'alto), quindi non ho intenzione di lavorare fuori la matematica ora. :)

Altri suggerimenti

Per eseguire la conversione, è necessario conoscere le coordinate di un punto O nei sistemi vostre due coordinate.

Supponiamo O ha coordinate x1O,y1O nel sistema di coordinate 1, e x2O,y2O nel sistema di coordinate 2.

Poi un punto di coordinate x1,y1 nel sistema 1, e x2,y2 sistema 2 soddisferà:

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

dove Kx e Ky sono il fattore di scala. Se si conoscono le coordinate di un altro punto M in entrambi i sistemi, che si avrà Kx e Ky con

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

Quindi, non vi resta che applicare il primo rapporto di passare da un sistema ad un altro sistema, con

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

o

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

Avete anche necessario il codice?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top