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

lea*_*ner 6 python latitude-longitude coordinate-systems

我有纬度和经度值的文件,我想以km为单位转换x和y我想测量每个点的距离.

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

到(0,0)我的x和y系统所以基本上我想找出其他点是什么和他们从原点的位置所以我想找到什么51.56(纬度)-123.64(长)在(x) ,y)以km为单位,依此类推文件的其余部分.

我想在python中完成所有这些,是否有一些排序代码?

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

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

我想要做什么,我只是不知道他们是怎么做的.

Flo*_*ris 8

以下内容非常接近(以km为单位).如果你需要比这更好,你必须更加努力地学习数学 - 例如通过遵循给定的一些链接.

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

变量名称应该非常明显.这给了你

dx = 66.299 km (your link gives 66.577)
dy = 2.222 km (link gives 2.225)
Run Code Online (Sandbox Code Playgroud)

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

注 - 因子40,000是以千米为单位的地球周长(跨极点测量).这会让你接近.如果你看一下你提供的链接的来源(你需要挖掘一下才能找到一个单独的文件中javascript),你会发现他们使用了一个更复杂的等式:

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)));
   }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,他们实际上正在考虑到地球不是一个球体的事实......但即便如此,当你做出假设时,你可以把地球当作一架飞机对待你将会有一些错误.我肯定他们的公式错误较小......