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网络爬虫采集联想词示例
Feb 11 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
python构建自定义回调函数详解
Jun 20 Python
Python subprocess模块详细解读
Jan 29 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python解析含有重复key的json方法
Jan 22 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
夯基础之手撕javascript继承详解
2020/11/09 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
简述Python中的面向对象编程的概念
2015/04/27 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
vue实现倒计时功能
2021/03/24 Vue.js
博士生入学考试推荐信
2013/11/17 职场文书
清明节演讲稿
2014/05/27 职场文书
感恩教育观后感
2015/06/17 职场文书