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使用自定义user-agent抓取网页的方法
Apr 15 Python
Python实现网站注册验证码生成类
Jun 08 Python
Python排序算法实例代码
Aug 10 Python
深入浅析python with语句简介
Apr 11 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
python面试题小结附答案实例代码
Apr 11 Python
python实现BP神经网络回归预测模型
Aug 09 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
python判断链表是否有环的实例代码
Jan 31 Python
Python实现打乒乓小游戏
Sep 25 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 Class 文章
2007/04/04 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
图片完美缩放
2006/09/07 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
angular十大常见问题
2017/03/07 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Python元字符的用法实例解析
2018/01/17 Python
python 读入多行数据的实例
2018/04/19 Python
python实现Windows电脑定时关机
2018/06/20 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
暑期社会实践心得体会
2014/09/02 职场文书
靠谱的活动总结
2019/04/16 职场文书
Redis基本数据类型List常用操作命令
2022/06/01 Redis