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中使用next()方法操作文件的教程
May 24 Python
python写日志封装类实例
Jun 28 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
Python csv文件的读写操作实例详解
Nov 19 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
Python装饰器的应用场景代码总结
Apr 10 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 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执行速度全攻略(下)
2006/10/09 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
PHP5函数小全(分享)
2013/06/06 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php Session无效分析资料整理
2016/11/29 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
python绘图方法实例入门
2015/05/19 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
django实现后台显示媒体文件
2020/04/07 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
推荐信模板
2014/05/09 职场文书
师范大学生求职信
2014/06/13 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android