Python经纬度坐标转换为距离及角度的实现


Posted in Python onNovember 01, 2020

最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度。经验证后效果较好,并分享。

1 经纬度转换距离代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'


import math


# 计算距离
def getDistance(latA, lonA, latB, lonB):
  ra = 6378140 # 赤道半径
  rb = 6356755 # 极半径
  flatten = (ra - rb) / ra # Partial rate of the earth
  # change angle to radians
  radLatA = math.radians(latA)
  radLonA = math.radians(lonA)
  radLatB = math.radians(latB)
  radLonB = math.radians(lonB)

  pA = math.atan(rb / ra * math.tan(radLatA))
  pB = math.atan(rb / ra * math.tan(radLatB))
  x = math.acos(math.sin(pA) * math.sin(pB) + math.cos(pA) * math.cos(pB) * math.cos(radLonA - radLonB))
  c1 = (math.sin(x) - x) * (math.sin(pA) + math.sin(pB)) ** 2 / math.cos(x / 2) ** 2
  c2 = (math.sin(x) + x) * (math.sin(pA) - math.sin(pB)) ** 2 / math.sin(x / 2) ** 2
  dr = flatten / 8 * (c1 - c2)
  distance = ra * (x + dr)
  distance = round(distance / 1000, 4)
  return f'{distance}km'

2 经纬度转化角度代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'

import math

# 计算角度
def getDegree(latA, lonA, latB, lonB):
  radLatA = math.radians(latA)
  radLonA = math.radians(lonA)
  radLatB = math.radians(latB)
  radLonB = math.radians(lonB)
  dLon = radLonB - radLonA
  y = math.sin(dLon) * math.cos(radLatB)
  x = math.cos(radLatA) * math.sin(radLatB) - math.sin(radLatA) * math.cos(radLatB) * math.cos(dLon)
  brng = math.degrees(math.atan2(y, x))
  brng = round((brng + 360) % 360, 4)
  brng = int(brng)
  if (brng == 0.0) or ((brng == 360.0)):
    return '正北方向'
  elif brng == 90.0:
    return '正东方向'
  elif brng == 180.0:
    return '正南方向'
  elif brng == 270.0:
    return '正西方向'
  elif 0 < brng < 90:
    return f'北偏东{brng}'
  elif 90 < brng < 180:
    return f'东偏南{brng - 90}'
  elif 180 < brng < 270:
    return f'西偏南{270 - brng}'
  elif 270 < brng < 360:
    return f'北偏西{brng - 270}'
  else:
    pass

3 验证

选取深圳野生动物园(22.599578, 113.973129)为起点,深圳坪山站(22.6986848, 114.3311032)为终点,结合百度地图、谷歌地图等进行效果验证。

程序运行结果如下:

Python经纬度坐标转换为距离及角度的实现

百度测距为38.3km

Google地图手动测距为39.31km

Python经纬度坐标转换为距离及角度的实现

Python经纬度坐标转换为距离及角度的实现 

距离与角度均无问题。 

到此这篇关于Python经纬度坐标转换为距离及角度的实现的文章就介绍到这了,更多相关Python经纬度坐标转换为距离及角度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现sublime3的less编译插件示例
Apr 27 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
浅述python中深浅拷贝原理
Sep 18 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
python区分不同数据类型的方法
Oct 14 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
Python 使用dict实现switch的操作
Apr 07 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 #Python
python Cartopy的基础使用详解
Nov 01 #Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 #Python
关于python中导入文件到list的问题
Oct 31 #Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 #Python
Python在线和离线安装第三方库的方法
Oct 31 #Python
python安装第三方库如xlrd的方法
Oct 31 #Python
You might like
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
JS实现标签页切换效果
2017/05/04 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
python3生成随机数实例
2014/10/20 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
软件测试工程师面试问题精选
2016/10/28 面试题
servlet面试题
2012/08/20 面试题
入党转预备思想汇报
2014/01/07 职场文书
工作总结与自我评价
2014/09/18 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
单位收入证明范本
2015/06/18 职场文书
健康证明
2015/06/19 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技