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中根据字符串调用函数的实现方法
Jun 12 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
python字符串的方法与操作大全
Jan 30 Python
Django权限机制实现代码详解
Feb 05 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
Django基础知识 web框架的本质详解
Jul 18 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
python logging模块的使用
Sep 07 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
python FTP编程基础入门
Feb 27 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错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
降低python版本的操作方法
2020/09/11 Python
毕业研究生的自我鉴定
2013/11/30 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
电子商务专业求职信
2014/03/08 职场文书
大学开学计划书
2014/04/30 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技