1

我正在尝试制作一个 Java 项目,当给定坐标(取自谷歌地图)时,它可以在地图图像上精确定位该位置。

我尝试使用图像的左上角(具有最高纬度和最低经度的地方)作为某种参考点,这将是地图图像上的 (0,0) 点,并且比我尝试根据该参考点计算地图上的每个地方。然而,这种方法被证明是不准确的,可能是因为地球的曲率(请注意,我正在使用的地图(塞尔维亚)覆盖纬度 4° 和经度 4° 的区域)。

我看过几个关于转换为墨卡托投影的答案,但对我来说不是很清楚,因为它们没有涵盖与我类似的案例,也不是用 Java 编写的。

我能做些什么来更准确地定位这些点(±3km 就足够准确了)?

4

2 回答 2

1

正如评论正确指出的那样,为了在地理坐标和地图位置之间进行精确转换,您必须知道地图使用的投影方法,以及足够数量的参数,以便使用合适的参考集调整剩余参数点变得可行。

因此,如果您假设一个圆锥投影,那么请阅读David 指出的文档,以及此引用的后续内容。如您所见,在圆锥投影系列中,有一些替代方案可供选择。它们中的每一个都由几个参数(即标准平行线、锥体常数、纵横比……)来描述。你会对这些进行猜测,然后使用一些数值优化来获得最佳拟合。然后,您为每种投影采用最佳参数拟合,并查看它们中的哪一个具有最佳的整体拟合。相当多的工作。如果您不想为所有这些投影实现代码,您可以在命令行上或将proj.4用作本机库。要进行数值优化,您可以尝试调整其中之一硬币或项目到您的应用程序。

在任何情况下,第一步都是创建一组合适的参考点,您可以使用这些参考点来评估拟合。因此,在您的地图上选择几个突出的点,然后找到这些点的 Google 地球坐标。我会说你应该至少有十几个点,以说明你对地图知之甚少的事实。否则,在地图的其余部分仍然完全关闭的情况下,您将调整大量参数以完全适合您的点的风险很大。即使有这么多的参考点,由于塞尔维亚的面积并不(与跨越整个大陆的地图相比),错误猜测或不合适的错误可能非常小。因此,实际上可能很难确定使用了哪个投影。

综上所述,即使有外部库负责投影和数值优化,您可能很容易花费半年时间来设置工具来计算投影。所以决定这是否值得努力。如果没有,有几种选择。一种是采用不同的地图,一张你知道投影的地图。或联系您的地图作者并获取投影。或者问问在塞尔维亚从事测地线工作的人,因为他们可能有足够的经验来一眼识别投影,我不知道。

另一种选择是将您需要参考点的事实与您在任何情况下都可能无法计算出精确投影的事实相结合。只需按以下方式组合它们:选择一组适当密集的参考点,均匀分布在地图上。然后在它们之间插值,线性或更高程度或使用一些加权插值方案或其他。您知道这一切背后有一个投影,但您放弃了计算投影,并简单地缓解症状:通过拥有足够的参考点,每个数据项都足够接近参考点,以使误差小于您的阈值.

于 2015-06-20T17:05:29.923 回答
0

我在这个线程中找到了我正在寻找的答案:Java,convert lat/lon to UTM

我发现我的地图的实际投影是 UTM。从那里,它只是找到一个类,将我的纬度/经度坐标转换为 UTM 东向和北向(这个答案中非常有用的代码),然后我会做简单的数学来找出点与边界的比较地图,它实际上正在工作。

于 2015-06-20T22:27:25.327 回答