2013-04-28 219 views
9

我想将GPS位置(纬度,经度)转换为x,y坐标。 我发现了很多关于这个主题的链接并应用了它,但它并没有给我正确的答案!从经度,纬度转换为x,y

我按照以下步骤来测试答案: (1)首先,我采取两个职位,并使用地图计算他们之间的距离。 (2)然后将两个位置转换为x,y坐标。 (3)然后再次计算x,y坐标 中两点之间的距离,看看它是否给我点(1)的相同结果。

解决方案之一,我发现以下,但它并没有给我正确的答案!

latitude = Math.PI * latitude/180; 
longitude = Math.PI * longitude/180; 

// adjust position by radians 
latitude -= 1.570795765134; // subtract 90 degrees (in radians) 

// and switch z and y 
xPos = (app.radius) * Math.sin(latitude) * Math.cos(longitude); 
zPos = (app.radius) * Math.sin(latitude) * Math.sin(longitude); 
yPos = (app.radius) * Math.cos(latitude); 

我也试过这个link但还是不适合我!

任何帮助如何将(纬度,经度)转换为(x,y)?

感谢,

回答

23

没有确切的解决方案存在

有从球面到平面不等距图。将平面中的纬度/经度坐标转换为平面中的x/y坐标时,不能希望通过此操作保留所有长度。你必须接受某种变形。确实存在许多不同的地图投影,这可以在保存长度,角度和面积之间实现不同的折衷。对于地表的小部分地区,transverse Mercator是相当普遍的。您可能听说过UTM。但有many more

您引用的公式计算x/y/z,即3D空间中的点。但即使在那里,你也无法自动获得正确的距离。球体表面上两点之间的最短距离将穿过该球体,而地球上的距离大部分是测量表面之后的测地线长度。所以他们会更长。

逼近了小面积

如果要绘制地球表面的部分比较少,那么你可以使用一个非常简单的近似。您可以简单地使用横轴x来表示经度λ,纵轴表示纬度φ。不过,它们之间的比例不应该是1:1。相反,您应该使用cos(φ)作为宽高比,其中φ表示接近地图中心的纬度。此外,为了从角度(以弧度测量)转换为长度,您乘以地球半径(在此模型中假定为球体)。

  • X = - [RλCOS(φ)
  • Ŷ = - [Rφ

这是简单equirectangular projection。在大多数情况下,您只能计算一次cos(φ),这使得大量点的后续计算非常便宜。

+0

Thanks @MvG,我没有参与这些主题,我只需要在地图上绘制点,这些点之间的距离不超过50米,有没有简单的方法呢? – noor 2013-04-29 13:03:59

+0

@ alsadi90:我更新了我的答案以描述您的用例的一个简单近似值。 – MvG 2013-04-29 14:27:39

+0

谢谢,但我有这些问题:λ和φ在弧度?关于φ0,你对我的建议是什么,如果我的面积接近50mx50m – noor 2013-04-29 20:07:28

相关问题