将地理坐标(纬度、经度)映射到地图上的坐标系(x、y)。

4
我有一些城市的地理坐标(纬度和经度),希望能够获取其x、y坐标以便绘制地图。地图是标准的,就像http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg这个例子一样。
我尝试了几个公式,但似乎都不起作用 :(。最好使用简单的javascript代码或ruby。
5个回答

3
有多种方法来解决这个问题,精度也不尽相同。然而,它们都归结为执行与您的地图相对应的投影。
如果您知道您的地图是墨卡托投影的,那么纬度/经度坐标可以简单地被视为X/Y,适当进行缩放和平移。也就是说,您需要找到一个简单的ax+b和cy+d来完成这项工作。
如果您的地图不是墨卡托投影(如果它试图使比例保持一致,则很可能不是),则最好的选择是假设它是“以地球为切线”的投影。(对于小陆地来说这样做还算可以)。在这种情况下,您需要首先将纬度/经度投影到三维坐标系统中。
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)

正向z指向北极。 正向y指向0,0,正向x指向纬度0经度90(东),正向纬度/经度是北和东。 当然,您必须先转换为弧度。

所有这些都假定地球是一个球体,虽然不完全正确,但除非您正在发射远程迫击炮弹,否则足够接近。

无论如何,一旦您拥有了XYZ,那么您将需要旋转和缩放地图。 要绕Z轴旋转,只需在投影到三维之前减去基本经度即可。 这样可以使您的地图以零经度为中心进行最简单的数学计算。

完成此操作后,您只需要将地球仪向前旋转,直到您的原始地图面对前方。 使用y-z轴的2D旋转来执行此操作。 使用http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections来解决这部分问题。

最后,您的x,z坐标将与地图的x,y坐标相当匹配,适当的比例/平移如前所述。


2

1
除了以上的回答之外,还有一个开源的proj4js库,可以在不同的地图投影之间进行转换。它被OpenLayers内部用于这种事情,并支持多种流行的投影和坐标系统。

1
进一步思考,假设您的位图是标准投影,则应该可以工作,但您需要确定自己的投影参数(子午线、缩放等)。这应该是可能的,但对于地图投影新手来说可能不太容易。 - winwaed
1
谢谢,我已经成功从提到的库中提取所需的公式 :) - gucki

1

0

除非你在一个非常小的范围内工作(并且靠近赤道),否则你会发现这很困难。维基百科的地理坐标系统是一个好的起点...

更简单的方法可能是利用类似Web映射的东西,并坚持使用你的纬度和经度。


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