我正在尝试创建一个Java项目,在给定坐标(取自Google地图)时精确定位地图图像上的位置。
我尝试使用图像的左上角(纬度最高,经度最低的地方)作为某种参考点,在地图上为(0,0)点图像,而不是我试图根据参考点计算地图上的每个地方。然而,这种方法被证明是不准确的,可能是因为地球的曲率(请注意我正在使用的地图(塞尔维亚)覆盖4°纬度和4°经度的区域。
我已经看到了几个关于转换为墨卡托投影的答案,但对我来说它们并不是很清楚,因为它们没有涵盖与我类似的案例,也不是用Java编写的。
如何更精确地确定这些点(±3km足够准确)?
答案 0 :(得分:1)
正如评论指出的那样,为了在地理坐标和地图位置之间进行精确转换,您必须知道用于地图的投影方法,以及足够数量的参数,以便使用合适的方法调整其余参数一组参考点变得可行。
因此,如果你假设一个圆锥投影,那么请阅读大卫指出的the document和this referenced follow-up。正如您所看到的,在圆锥投影系列中,有一些选择可供选择。它们中的每一个都由一些参数(即标准平行线,锥形常数,纵横比......)描述。您可以猜测这些,然后使用一些数值优化来获得最佳拟合。然后,您可以选择适合每种投影的最佳参数,并查看哪种投影具有最佳的整体拟合度。相当多的工作。如果您不想为所有这些投影实现代码,可以在命令行上使用proj.4或作为本机库。要进行数值优化,您可以尝试将COIN-OR projects之一调整为您的应用程序。
在任何情况下,第一步都是创建一组合适的参考点,您可以使用它们来评估拟合度。因此,在地图上选择一些突出点,然后找到这些点的Google地球坐标。我会说你应该至少有十几点,以说明你对你的地图了解甚少。否则,当地图的其余部分仍然完全关闭时,您将调整大量参数以完全适合您的点的风险很大。即使有这么多的参考点,由于塞尔维亚的区域 大(与跨越整个大陆的地图相比),错误猜测或不合适的错误可能非常小。因此,实际决定使用哪个投影可能很难。
尽管如上所述,即使外部库负责投影和数值优化,也可能需要半年才能设置工具来解决问题投影。因此,决定是否值得努力。如果没有,有几种选择。一种是采用不同的地图,一种是你知道投影的地图。或者联系地图的作者并获取投影。或者问一些在塞尔维亚的测地学工作的人,因为他们可能有足够的经验来一目了然地认出投影,我不知道。
另一个选择是将您需要参考点的事实与您在任何情况下都无法计算出精确投影的事实相结合。只需按以下方式组合这些:选择一组适当密集的参考点,均匀分布在地图上。然后在它们之间进行插值,线性地或者更高程度地使用或者使用一些加权插值方案或其他方式。你知道所有这些背后都有一个投影,但你放弃计算投影,并简单地缓解症状:通过有足够的参考点,每个数据项足够接近参考点,以保持误差小于你的阈值
答案 1 :(得分:0)
我在这个帖子中找到了我正在寻找的答案:Java, convert lat/lon to UTM
我发现我的地图的实际投影是UTM。从那里,它只是找到一个类,将我的纬度/经度坐标转换为UTM东向和北向(this answer中非常有用的代码),然后我会做简单的数学运算来找出点与之比较的位置地图的边界,它实际上是有效的。