python实现两个经纬度点之间的距离和方位角的方法


Posted in Python onJuly 05, 2019

最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流!

1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB)(很多博客写的不是很好,这里总结一下)

def getDegree(latA, lonA, latB, lonB):
  """
  Args:
    point p1(latA, lonA)
    point p2(latB, lonB)
  Returns:
    bearing between the two GPS points,
    default: the basis of heading direction is north
  """
  radLatA = radians(latA)
  radLonA = radians(lonA)
  radLatB = radians(latB)
  radLonB = radians(lonB)
  dLon = radLonB - radLonA
  y = sin(dLon) * cos(radLatB)
  x = cos(radLatA) * sin(radLatB) - sin(radLatA) * cos(radLatB) * cos(dLon)
  brng = degrees(atan2(y, x))
  brng = (brng + 360) % 360
  return brng

2. 求两个经纬点的距离函数:P0(latA, lonA), P1(latB, lonB)

def getDistance(latA, lonA, latB, lonB):
  ra = 6378140 # radius of equator: meter
  rb = 6356755 # radius of polar: meter
  flatten = (ra - rb) / ra # Partial rate of the earth
  # change angle to radians
  radLatA = radians(latA)
  radLonA = radians(lonA)
  radLatB = radians(latB)
  radLonB = radians(lonB)
 
  pA = atan(rb / ra * tan(radLatA))
  pB = atan(rb / ra * tan(radLatB))
  x = acos(sin(pA) * sin(pB) + cos(pA) * cos(pB) * cos(radLonA - radLonB))
  c1 = (sin(x) - x) * (sin(pA) + sin(pB))**2 / cos(x / 2)**2
  c2 = (sin(x) + x) * (sin(pA) - sin(pB))**2 / sin(x / 2)**2
  dr = flatten / 8 * (c1 - c2)
  distance = ra * (x + dr)
  return distance

以上这篇python实现两个经纬度点之间的距离和方位角的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python开发vim插件及心得分享
Nov 04 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
简单实现python爬虫功能
Dec 31 Python
python 中split 和 strip的实例详解
Jul 12 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
python中format()函数的简单使用教程
Mar 14 Python
Django如何开发简单的查询接口详解
May 17 Python
Python中的self用法详解
Aug 06 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
python实现简易自习室座位预约系统
Jun 30 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 #Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 #Python
python读出当前时间精度到秒的代码
Jul 05 #Python
python读写csv文件方法详细总结
Jul 05 #Python
Python考拉兹猜想输出序列代码实践
Jul 05 #Python
python读写csv文件实例代码
Jul 05 #Python
python暴力解压rar加密文件过程详解
Jul 05 #Python
You might like
PHP的5个安全措施小结
2012/07/17 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
javascript 日期常用的方法
2009/11/11 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
JavaScript中string对象
2015/06/12 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
python爬虫基础知识点整理
2020/06/02 Python
PyQt QMainWindow的使用示例
2021/03/24 Python
酒店个人求职信范文
2014/01/25 职场文书
实习协议书范本
2014/04/22 职场文书
导师工作推荐信
2015/03/27 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
教师读书活动心得体会
2016/01/14 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
mysql查询结果实现多列拼接查询
2022/04/03 MySQL