javascript 计算两个坐标的距离 米_谈谈用Python计算GPS点之间的距离的几种方法

使用GPS时,计算点之间的距离对于很多实际程序应用都是非常必要的。但是简单的欧几里得距离并不能得到理想的计算结果,因为我们必须处理一个球体,或者确切地说是一个扁球体。因此,我们实际处理的是测地距离。

实践中,有多种方法可以处理此计算问题。例如,存在大圆距离(great circle distance),这是球体表面上两点之间的最短距离。另一种类似的测量距离的方法是使用Haversine公式:

a3711c787234325286b22abdccee5bfb.png

65cd3a1401d7a5425afa82776981eb99.png

由以上两个公式,可以计算测地距离为:

cd75009c17f40ceb1420880b1bfbb9c8.png

以上公式中,

ed16c0f7fec2201d4ce05a51ac853776.png

把以上公式在python中实现如下:

import 

需要注意的重要一点是,我们必须采用经度和纬度值的弧度。以下代码通过简单循环计算多点之间的距离:

london_coord 
madrid 1263769.8859593808
vienna 1235650.1412429416
sydney 16997984.55171465
berlin 930723.2019867426

以上公式实现给了我们一些看似准确的结果,让我们将其与另一种方法进行比较。即使用geopy测量距离。该程序包有许多不同的计算距离的方法,但是默认使用Vincenty公式,这是一种更精确的计算地球距离的方法,因为它考虑了地球(如前所述)是扁球体。

from 
madrid 1263101.9239132649
vienna 1238804.7757636765
sydney 16988546.466847803
berlin 933410.764122098

可见,以上两种方法计算结果值之间存在差异,尤其是距离非常大的时候,这会加剧球状地球的变形。

除了以上两种方法,还有pyproj Python包,它提供了PROJ.4的 Python接口。它是处理地图投影的绝佳软件包,但在那里您还可以提供提供各种测地线计算的Geod类。要计算两点之间的距离,我们使用inv函数,该函数计算逆变换并返回正向和反向方位角和距离,如下:

import 
madrid 1263101.92391795
azimuth -166.0130675331932 11.403752336198153
vienna 1238804.77576733
azimuth 100.74306171242293 -66.60186399055117
sydney 16988546.466908153
azimuth 60.33221400668488 -40.68498881273351
berlin 933410.764123629
azimuth 77.79312482066598 -91.53477000281634

基于GPS坐标的测距是很多应用的基础性工作,当然此处计算的距离并非street distance,这两者之间是有着显著区别的,但是可以通过算法处理来完成更复杂的应用。比如,我们开发的openGIS测距工具,可以生成多点多模式距离时间矩阵。

a25899c4e578d948acb049f55f0e12b7.png

有了距离,生成时空图用来评价信号运行效果或者公交运营情况也就变得一目了然。比如,我们基于此开发了公交运行动态时空图,你可以选择查看任意时间窗口的公交运行情况,只要拖动即可完成交互了,当然这个你也将会在utb.cloud云数据实验室直接使用体验。

ea5f97a3638058da9a545be1d017f0a6.gif

--关于我们--

22737ffbddf6229413f7f83fc30c5ca1.png

812459fc7c91786d3b5d637f0ced747d.png

b1d5c70406f552b1e3a501ec480f081f.png

18e8129b696105ac732090e86fde121d.png

2015-2020 © utb.cloud. All Rights Reserved. 转载请注明:

转载自公众号“交托邦”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值