3

在我知道三个角(或任何三个非对齐点)的坐标(纬度/经度)的地图上,我有位于地图上的几个点的坐标(纬度/经度)。

我想要的是地图点的相对坐标(相对于左上角的 x/y)。

我也对其他转换(x/y 到 lat/lng)感兴趣。

我的地图很小(小于 10 公里 x 10 公里)我需要使用投影系统还是可以假设我的表面完全平坦并使用线性转换?

编辑:我不知道(而且我无法知道)我的背景地图使用哪种投影。我只知道 3 个地理参考点。

一种解决方案是使用线性转换:

如果我的三个点是 A (xA,yA), B (xB, yB) , C (xC,yC) 和我想要定位 X (x, y) 的点。

我可以计算a,然后bAX = aAB + bAClat/lng 参考中

x = xA + a * (xB-xA) + b * (xC - xA) y = yA + a * (yB-yA) + b * (yC - yA)

但看起来我错过了什么?

相关问题:如何将纬度/经度映射到扭曲的地图?

4

3 回答 3

0

如果你想得到准确的转换,你需要使用国家/地区的本地投影,这些坐标落入。您可以通过在谷歌地图中查找其中一个坐标来轻松识别(假设整个坐标集不会跨越很大的区域),这将告诉您坐标在哪个国家/地区。从那里您可以查找该国家/地区使用的本地投影系统。除非这里的目的是您自己提出转换算法/实用程序,否则您可以使用一些库来实现所有需要的计算,以便在多个投影系统之间重新投影坐标:

proj4jmpl,它是 proj4 的部分 java 端口

于 2014-03-15T17:02:10.147 回答
0

你是对的,你错过了一些东西。您的公式(我没有深入研究过)看起来是线性的,因此似乎只适用于仿射变换。地图不是(通常)从 (lat,lon) 到 (x,y) 的仿射变换。

如果事情就这么简单,即使您知道 10x10 正方形的 (0,0)、(10,0) 和 (5,10) 点的坐标,您也可以确定转换 - 但您不能,因为 x 方向可以保存距离或经度或其他东西(当纬度,即 y 变化时),您无法区分这些情况。您将不得不使用其他信息。

于 2014-03-16T16:32:26.917 回答
0

它取决于地图,但是线性变换很简单。您还可以使用 Kavrayskiy 变换。我还发现了相反的情况:从 X 和 Y 坐标中获取纬度和经度。这是一个关于 Mercantor 投影的问题:Convert lat/lon to pixel coordinate?.

于 2014-03-10T16:03:10.110 回答