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 描述符(Descriptor)入门
Nov 20 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
matplotlib给子图添加图例的方法
Aug 03 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
django 模版关闭转义方式
May 14 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
python爬虫用mongodb的理由
Jul 28 Python
学习Python需要哪些工具
Sep 04 Python
Python类的继承super相关原理解析
Oct 22 Python
Django显示可视化图表的实践
May 10 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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函数
2006/12/06 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
初级的用php写的采集程序
2007/03/16 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
EM算法的python实现的方法步骤
2018/01/02 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python实现文字版扫雷
2020/04/24 Python
python的launcher用法知识点总结
2020/08/07 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
药剂专业毕业生求职信
2014/06/24 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
花田少年史观后感
2015/06/16 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js