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

3

你想要 JComponent 显示多大的区域?你所有的坐标都在低纬度吗?(靠近赤道)还是有些在极地附近/在极地上? - David Z
2
你是在询问 http://en.wikipedia.org/wiki/Mercator_projection 吗?这是从球形到平面的常用投影方式吗?还是你需要 http://en.wikipedia.org/wiki/Polyconic_projection?这才是你所询问的内容吗? - S.Lott
2个回答

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)在左上角,如果不是,则假定您是澳大利亚人。

补充:你提到了墨卡托投影使得我的简单答案不正确(但如果您实际上不关心投影,则可能仍然可用)。


是的,在反子午线处存在域重叠,但我认为 OP 不会在斐济塔武基郊区绘制许多点,即使是 Google Earth 在那里也会有些奇怪。 - msw
这不是墨卡托投影,而他的地图使用的就是这种投影方式。 - Nick Johnson
我不需要墨卡托投影。你能给我推荐一张平面地图,让我可以在你的算法中使用吗? - Horatiu Jeflea
请注意,像这样的平面投影很少使用,因此看起来有些奇怪。还要注意,它是以162E为中心的 - 就像它所说的那样 - 在计算中必须考虑到这一点。http://commons.wikimedia.org/wiki/File:BlankMap-World-162E-flat.svg - msw

0

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

下面的链接是一个很好的参考,介绍了许多不同的地图投影方式,并提供了足够多的数学公式。

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

以下是一个不错的参考资料,介绍如何在 PhP 中实现此操作。虽然不是 Java,但应该足够简单,可以应用所述原则。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接