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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
分析Python中解析构建数据知识
Jan 20 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python中判断输入是否为数字的实现代码
May 26 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python找出完数的方法
Nov 12 Python
给我一面国旗 python帮你实现
Sep 30 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
Python远程linux执行命令实现
Nov 11 Python
利用Python批量识别电子账单数据的方法
Feb 08 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读取mysql的简单实例
2014/01/15 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python算术运算符实例详解
2017/05/31 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Django之PopUp的具体实现方法
2019/08/31 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
安全协议书
2014/04/23 职场文书
政风行风建设责任书
2014/07/23 职场文书
专家推荐信怎么写
2015/03/25 职场文书
旅游项目合作意向书
2015/05/08 职场文书