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的Bottle框架的一些使用技巧介绍
Apr 08 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
django 多数据库配置教程
May 30 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python实现textrank关键词提取
Jun 22 Python
python画一个玫瑰和一个爱心
Aug 18 Python
python中文编码与json中文输出问题详解
Aug 24 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
Django框架创建项目的方法入门教程
Nov 04 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
Python sklearn分类决策树方法详解
Sep 23 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php共享内存段示例分享
2014/01/20 PHP
php读取本地json文件的实例
2018/03/07 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
JS中的作用域链
2017/03/01 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
详谈js的变量提升以及使用方法
2018/10/06 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
python3.3实现乘法表示例
2014/02/07 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python提取频域特征知识点浅析
2019/03/04 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
Linux的主要特性
2014/10/06 面试题
班风学风建设方案
2014/05/06 职场文书
法人身份证明书
2014/10/08 职场文书