使用python将纬度和经度转换为x和y网格系统

2024-05-16 00:07:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个纬度和经度值的文件,我想把x和y转换成km 我想测量从每个点的距离。

例如,我把经纬度的第一个点(分别是51.58,-124.6)

到(0,0)在我的x和y系统中,所以基本上,我想找出其他点是什么,它们从原点的位置,所以我想找出,在(x,y)中,51.56(lat)-123.64(long)在(x,y)中,在km中,等等,在文件的其余部分。

我想用python完成这一切,有什么排序代码吗?

例如,我在网上找到了一些网站

http://www.whoi.edu/marine/ndsf/cgi-bin/NDSFutility.cgi?form=0&from=LatLon&to=XY

我不知道他们是怎么做到的。


Tags: 文件代码http距离排序网站系统long
3条回答

以下是你的答案(以公里为单位)。如果你需要比这更好,你必须在数学上更加努力-例如通过遵循给出的一些链接。

import math
dx = (lon1-lon2)*40000*math.cos((lat1+lat2)*math.pi/360)/360
dy = (lat1-lat2)*40000/360

变量名应该很明显。这给了你

dx = 66.299 km (your link gives 66.577)
dy = 2.222 km (link gives 2.225)

一旦选择坐标(例如,lon1, lat1)作为原点,就应该很容易看到如何计算所有其他XY坐标。

注:系数40000是地球的周长,单位为千米(通过两极测量)。这能让你接近。如果您查看您提供的链接的来源(您必须四处搜索才能找到javascript which is in a separate file),您会发现它们使用了一个更复杂的方程式:

function METERS_DEGLON(x)
{  
   with (Math)
   {
      var d2r=DEG_TO_RADIANS(x);
      return((111415.13 * cos(d2r))- (94.55 * cos(3.0*d2r)) + (0.12 * cos(5.0*d2r)));
   }
}

function METERS_DEGLAT(x)
{
   with (Math)
   {
      var d2r=DEG_TO_RADIANS(x);
      return(111132.09 - (566.05 * cos(2.0*d2r))+ (1.20 * cos(4.0*d2r)) - (0.002 * cos(6.0*d2r)));
   }
}

在我看来,他们实际上是在考虑地球并不是一个球体这一事实。。。但即便如此,当你假设你可以把地球的一部分当作一个平面来看待时,你也会有一些错误。我相信用他们的公式,误差更小。。。

UTM投影以米为单位。所以您可以在这个链接上使用类似utm库的东西:

https://pypi.python.org/pypi/utm

谷歌python lat lon到UTM将指向几个选项。

UTM区域为6度经度宽,从本初子午线的0开始。每个UTM区域的起点位于赤道(x轴),y轴位于经度的最西端。这将使栅格正对北部和东部。你可以从这些结果中计算出你的距离。值在UTM区域的中间最为精确。

您还应该知道原始纬度值所基于的基准面,并在转换中使用相同的基准面。

您可以使用Great Circle Distance formula获取GPS点之间的距离。纬度和经度是在一个大地坐标系中,所以你不能仅仅转换成平面二维网格并使用欧几里德距离。您可以将足够近的点转换为近似网格,方法是取一个任意点,如(X,Y),将其设置为原点(如您所做的),然后使用大圆距离和bearing绘制平面上相对彼此的点,但这是一个近似值。

相关问题 更多 >