5

我有一些城市的地理坐标(纬度和经度),想获得 x,y 坐标,以便将它们绘制成地图。

该地图是标准地图,例如http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg

我尝试了几个我发现的公式,但似乎没有一个真正有效:(。简单的 javascript 代码或 ruby​​ 会是最好的:)

4

5 回答 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 指向 lat 0 long 90(东),正 lat/long 是北和东。当然,您必须先转换为弧度。

所有这一切都假设一个球形地球,这并不完全正确,但它足够接近,除非你发射远程迫击炮弹。

无论如何,一旦有了 XYZ,就需要旋转和缩放地图。要绕 Z 轴旋转,只需在投影到三个维度之前减去基本经度。这样做可以使您的地图以零经度为中心,以实现最简单的数学运算。

完成此操作后,您只需要向前旋转地球,直到原始地图正面。在 yz 轴上进行 2-d 旋转来执行此操作。使用http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections找出那部分。

最后,您的 x,z 坐标将与您的地图的 x,y 坐标很好地对齐,以获得如前所述的适当比例/平移。

于 2010-09-19T02:18:24.707 回答
2

也许这会有所帮助,我只使用 javascript 为美国完成了一个实现。

演示/代码:http ://the55.net/_11/sketch/us_map

于 2011-01-21T03:41:03.563 回答
2

除了上述答案之外,还有一个开源 proj4js 库,它可以在各种地图投影之间执行转换。它由 OpenLayers 内部用于此类事情,并支持许多流行的投影和坐标系。

于 2010-12-06T03:41:37.273 回答
1

使用 Google Maps API,您可以将 jpg 叠加在地图上并正确定位。

这是一个示例 http://code.google.com/apis/maps/documentation/javascript/examples/overlay-hideshow.html

这是关于叠加层的 api 页面 http://code.google.com/apis/maps/documentation/javascript/overlays.html

于 2010-09-19T02:08:38.013 回答
0

除非您的工作规模非常小(并且靠近赤道),否则您不会发现这很容易。维基百科的地理坐标系是一个好的开始......

更简单的方法可能是使用网络地图之类的东西并坚持使用您的纬度和经度。

于 2010-09-19T01:47:13.930 回答