2

我有x,y来自[coordinates1]数据库(GIS - 但这可能是任何数据库)的数据。我有我的应用程序,它有自己的坐标系,引用相同的地图。

我已经确定坐标 1 (x,y) 之间存在线性关系,coordinates2(x,y)因为我减去了两个不同的坐标 1 和coordinates2(除以x1和) ,x2并且在所有情况下,我得到它们分别显示 0.724 或 0.141 或 0.825,即坐标 1 + 坐标 2。y1y2

我现在需要弄清楚 - 或者你帮忙 - 我是否coordinates1(100000,200000)以及coordinates2(0.125,0.255)如何coordinates2(x,y)从数据中计算coordinates1(x,y)

4

2 回答 2

4

为了清楚起见,我将调用你的基地坐标(x ny n)和你的目标坐标(u nv n)。

现在,如果我们假设:

  1. 两个坐标系的原点相同。
  2. 两个坐标系的方向相同(即一个不相对于另一个旋转)。

在这种情况下,您只需要一组点 {( x 1 , y 1 ), ( u 1 , v 1 )} 来确定 ( u n , v n ) 的位置:

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

注意:我们必须有x 1 ≠ 0, y 1 ≠ 0


另一方面,如果两个坐标系有不同的原点(但它们仍然没有相对于彼此旋转),我们将需要两组点 {( x 1 , y 1 ), ( u 1 , v 1 ) } 和 {( x 2 , y 2 ), ( 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

注意:我们必须有x 1x 2 , y 1y 2


现在,如果两个坐标系相对于彼此旋转,您需要(我相信)另外一组匹配坐标。但这听起来不像你需要的(除非你的一张地图的北指向不是笔直向上的方向),所以我现在不打算计算数学。:)

于 2009-07-22T13:56:09.073 回答
2

要进行转换,您需要知道O两个坐标系中一个点的坐标。

假设在O坐标x1O,y1O系 1 和x2O,y2O坐标系 2 中有坐标。

x1,y1那么在系统 1 和系统 2 中具有坐标的x2,y2点将满足:

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

其中KxKy是比例因子。如果您知道两个系统中另一个点 M 的坐标,那么您将拥有KxKy

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

然后,您只需要应用第一个关系即可从一个系统转到另一个系统,使用

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

或者

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

你还需要代码吗?

于 2009-07-22T13:22:12.797 回答