地图地理坐标(LAT,LNG)映射(x,y)
-
04-10-2019 - |
题
我有一些城市的地理坐标(Latidute&经度),并希望获得X,Y坐标,因此可以将它们绘制成地图。
该地图是标准的 http://www.wordtravels.com/images/map/spain/fuerteventura_map.jpg 例如。
我尝试了几个我发现的几个方形,但似乎没有一个真正可行的:(。简单的JavaScript代码或Ruby最好是最好的:)
解决方案
除上述答案外,还有开源proj4js库,该库在各种地图投影之间执行转换。它由OpenLayers内部用于此类产品,并支持许多流行的预测和坐标系。
其他提示
有很多方法可以以不同程度的精度解决此问题。但是,它们都归结为执行与您地图相对应的投影。
如果您知道自己的地图是Mercator投影品种,那么可以将LAT/长坐标简单地视为X/Y,适当地缩放和翻译。也就是说,您会发现一个简单的AX+B和CY+D可以完成工作。
如果您的地图不是Mercator预测(如果它试图使比例保持一致,那么可能不会像这一数字一样),那么您最好的选择就是假设它是“地球变形”投影。 (这对小型地产都可以。)在这种情况下,您需要首先将LAT/Long投射到三维坐标系统中。
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
正向Z指向北极。 Y点为0、0,正X点为LAT 0长90(东)和正纬度/长度为North and Long。当然,您必须先转换为弧度。
所有这些都假设了球形地球,这不是完全正确的,但是除非您要开火漫长的迫击炮弹,否则它已经足够接近。
无论如何,一旦拥有XYZ,就需要旋转并扩展地图。要围绕Z轴旋转,请在投影成三个维度之前减去基本经度。这样做以将您的地图置于零永久的中心,以获得最简单的数学。
完成此操作后,您只需要向前旋转地球,直到您的原始地图为前面。在Yz轴上使用2D旋转执行此操作。采用 http://en.wikipedia.org/wiki/coorication_rotations_and_reflections 弄清楚那部分。
最后,您的x,z坐标将与地图的x,y坐标很好地排列,以进行适当的比例/翻译,如前所述。
也许这会有所帮助,我只使用JavaScript为美国完成了实施。
使用Google Maps API,您可以在地图上叠加JPG并正确定位。
这是一个例子http://code.google.com/apis/maps/documentation/javascript/examples/examples/overlay-hideshow.html
这是关于覆盖的API页面http://code.google.com/apis/maps/documentation/javascript/overlays.html