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中常用检测字符串相关函数汇总
Apr 15 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
Python continue继续循环用法总结
Jun 10 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
python unittest单元测试的步骤分析
Aug 02 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
Cpy和Python的效率对比
2015/03/20 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
高考考python编程是真的吗
2020/07/20 Python
python raise的基本使用
2020/09/10 Python
python 如何引入协程和原理分析
2020/11/30 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
2014厂务公开实施方案
2014/02/17 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
关于安全的广播稿
2014/10/23 职场文书
学校就业保障协议书
2019/06/24 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL