Question

J'ai données x,y reveniez d'une base de données de [coordinates1] (SIG - mais cela pourrait être une base de données). Je ma demande avec son propre système de coordonnées, faisant référence à la même carte.

Je l'ai établi qu'une relation linéaire existe entre coordinates1 (x, y) et coordinates2(x,y) comme je l'ai soustraites deux différents coordinates1 et coordinates2 (division x1 avec x2 et y1 avec y2) et dans tous les cas j'obtenir les deux montrant 0,724 ou 0,141 ou 0,825, respectivement, à savoir coordinates1 + coordinates2.

Ce que je dois maintenant comprendre - ou vous aider - est que si coordinates1(100000,200000) et coordinates2(0.125,0.255) Comment calculer coordinates2(x,y) à partir des données dans coordinates1(x,y)

?
Était-ce utile?

La solution

Par souci de clarté, je vais appeler les coordonnées dans votre base ( x n , y n ), et des coordonnées dans la cible ( U n , v n ).

Maintenant, si nous supposons:

  1. Les origines des deux systèmes de coordonnées sont les mêmes.
  2. L'orientation des deux systèmes de coordonnées sont les mêmes (à savoir une ne tourne pas par rapport à l'autre).

Dans ce cas, vous ne avez besoin d'un ensemble de points {( x 1 , y 1 ), ( U 1 , v 1 )} pour déterminer l'emplacement du ( u n , v n ):

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

Note: nous devons avoir x 1 ≠ 0, y 1 ≠ 0


D'autre part, si les deux systèmes de coordonnées ont des origines différentes (mais ils ne sont toujours pas mis en rotation par rapport à l'autre), nous aurons besoin de deux ensembles de points {( x 1 , y 1 ), ( U 1 , v 1 )} et {( 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

Note: nous devons avoir x 1 x 2 , y 1 y 2


Maintenant, si l'on fait tourner deux systèmes de coordonnées par rapport à l'autre, vous avez besoin (je crois) un ensemble plus de coordonnées correspondant. Mais il ne semble pas que vous avez besoin (à moins que l'une de vos cartes a pointe vers le nord dans une direction autre que vers le haut), donc je ne vais pas travailler les maths maintenant. :)

Autres conseils

Pour la conversion, vous devez connaître les coordonnées d'un point O dans vos systèmes deux coordonnées.

Supposons que O a des coordonnées x1O,y1O dans le système de coordonnées 1 et x2O,y2O dans le système de coordonnées 2.

Ensuite, un point de coordonnées x1,y1 dans le système 1 et x2,y2 dans le système 2 satisfera:

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

Kx et Ky sont le facteur d'échelle. Si vous connaissez les coordonnées d'un autre point M dans les deux systèmes, que vous aurez Kx et Ky avec

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

, il vous suffit ensuite d'appliquer la première relation à passer d'un système à un autre, avec

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

ou

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

Avez-vous aussi besoin du code?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top