如何在Java中将纬度和经度转换为x,y?

时间:2010-05-11 21:47:38

标签: algorithm math transform geography

我正在研究Java中的地理项目。

输入是坐标:24.4444 N等 输出:显示坐标点的PLAIN地图(不是圆形)。

我不知道在JComponent上从坐标转换为x,y的算法,有人可以帮助我吗?

地图如下所示: http://upload.wikimedia.org/wikipedia/commons/7/74/Mercator-projection.jpg

谢谢

2 个答案:

答案 0 :(得分:3)

鉴于您的稀疏示例,您的输入范围将是(90.0N - 90.0S)和(180W - 180E)。这是最简单的 - 也是标准的 - 如果你将南方和西方转换为负数,给你的纬度为(90.0 ..-90.0),经度为(180.0 ..- 180.0)。

考虑到画布的大小 - 假设它是140x120像素 - 你得到:

x = (latitude * canvas_height / 180.0) + (canvas_height / 2)
y = (longitude * canvas_width / 360.0) + (canvas_width / 2)

或:

x = (longitude * 120.0 / 180.0) + (120/2)
y = (latitude  * 140.0 / 360.0) + (140/2)

我订购了操作以最小化舍入误差。这假设画布在左上角有点(0,0),如果没有,则表示你是澳大利亚人。

已添加:您只是简单介绍了墨卡托的预测,使我的简单答案不正确(但如果您实际上并不关心投影,可能还可以使用)

答案 1 :(得分:0)

MSW提供了一个很好的例子。最终,算法取决于所使用的地图投影。以下是我过去使用过的几个很好的资源。

以下链接是对许多不同地图投影的良好参考,其中有足够的数学公式来阻塞马。

http://www.remotesensing.org/geotiff/proj_list/

这是在PhP中这样做的一个不错的参考。虽然不是Java,但应该直截了当地应用所概述的原则。

http://www.web-max.ca/PHP/article_1.php