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

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

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

有帮助吗?

解决方案

为了清楚起见,我将调用您基地中的坐标(Xn, yn),以及目标中的坐标(n, vn).

现在,如果我们假设:

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

在这种情况下,您只需要一组点{(X1, y1), (1, v1)} 来确定 (n, vn):

  • n = 1/X1 * Xn
  • vn = v1/y1 * yn

笔记:我们必须有 X1 ≠ 0, y1 ≠ 0


另一方面,如果两个坐标系具有不同的原点(但它们仍然没有相对于彼此旋转),我们将需要两组点{(X1, y1), (1, v1)} 和 {(X2, y2), (2, v2)}:

  • n = (2 - 1)/(X2 - X1) * (Xn - X1) + 1
  • vn = (v2 - v1)/(y2 - y1) * (yn - y1) + v1

笔记:我们必须有 X1X2, y1y2


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

其他提示

要进行转换,你需要知道一点O的坐标在两个坐标系统。

让我们假设O具有坐标x1O,y1O在坐标系统1中,并在x2O,y2O坐标系2。

然后,在系统2具有坐标x1,y1在系统1中,并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

你还需要的代码?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top