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实现合并字典的方法
Jul 07 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
PYTHON绘制雷达图代码实例
Oct 15 Python
python中bytes和str类型的区别
Oct 21 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
Python list运算操作代码实例解析
Jan 20 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
Python eval函数原理及用法解析
Nov 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
我的论坛源代码(八)
2006/10/09 PHP
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
jquery 问答知识整理
2010/02/11 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python3 深浅copy对比详解
2019/08/12 Python
python同步两个文件夹下的内容
2019/08/29 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python日志syslog使用原理详解
2020/02/18 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
C语言编程题
2015/03/09 面试题
工厂总经理岗位职责
2014/02/07 职场文书
我的梦想演讲稿
2014/04/30 职场文书
质量负责人任命书
2014/06/06 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
总结Python常用的魔法方法
2021/05/25 Python
关于Python使用turtle库画任意图的问题
2022/04/01 Python