将地理坐标(lat,lng)映射到地图(x,y)

时间:2010-09-19 01:23:24

标签: javascript ruby geocoding proj4js

我有一些城市的地理坐标(latidute&经度),并希望获得x,y坐标,因此可以将它们绘制成地图。

地图是标准的,就像http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg一样。

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

5 个答案:

答案 0 :(得分:3)

有很多方法可以用不同的精度来解决这个问题。但是,它们都归结为执行与地图相对应的投影。

如果你知道你的地图是墨卡托投影种类,那么纬度/经度坐标可以简单地视为X / Y,适当缩放和平移。也就是说,你会找到一个简单的ax + b和cy + d来完成这项工作。

如果你的地图不是墨卡托投影(因为它可能不是如果它试图使比例一致,就像这个看起来那样),那么你最好的选择是假设它是一个“地球切线”投影。 (这适用于小陆地。)在这种情况下,您需要先将Lat / Long投影到三维坐标系中。

z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)

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

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

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

完成此操作后,您只需向前旋转地球,直到原始地图面朝前。在y-z轴上以2 d旋转执行此操作。使用http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections来计算该部分。

最后,你的x,z坐标与你的地图的x,y坐标排列得很好,以便进行适当的比例/平移,如前所述。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

也许这会有所帮助,我已经使用javascript完成了对美国的实施。

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

答案 3 :(得分: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

答案 4 :(得分:0)

除非你的工作规模非常小(靠近赤道),否则你不会觉得这很容易。维基百科的Geographic coordinate system是一个好的开始......

更简单的方法可以是利用web mapping之类的东西,并坚持你的纬度和经度。