我有一些城市的地理坐标(latidute&经度),并希望获得x,y坐标,因此可以将它们绘制成地图。
地图是标准的,就像http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg一样。
我尝试了几个我发现的公式,但似乎没有真正起作用:(。简单的javascript代码或ruby最好:)
答案 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)
答案 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之类的东西,并坚持你的纬度和经度。