IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【数据挖掘】通过两点的经纬度高效计算实际的地球球面距离 -> 正文阅读

[Python知识库]【数据挖掘】通过两点的经纬度高效计算实际的地球球面距离

由于地球是存在弧度的,所以在已知两点经纬度的情况下直接计算直线距离在一些场景下并不可取的,在计算过程中需要考虑到地球赤道半径等参数,从而得到真实的地球球面距离。在这里将一些计算方法记录下来,方便之后作为工具直接调用。

  1. 仅使用math库进行距离计算直线距离
def get_distance_function(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'
    return distance
  1. 调用geopy库进行直线距离计算
from geopy.distance import geodesic

print(geodesic((latA, lonA), (latB, lonB)).m)
print(geodesic((latA, lonA), (latB, lonB)).km)
  1. 调用geopy库进行球面距离计算
from geopy.distance import great_circle

print(great_circle((latA, lonA), (latB, lonB)).km)

最后对不同的计算方法进行实际数值测试并验证正确性:

latA = 30.28708
lonA = 120.12802999999997
latB = 28.7427
lonB = 115.86572000000001

print(get_distance_function(latA, lonA, latB, lonB))

print(geodesic((latA, lonA), (latB, lonB)).km)

print(great_circle((latA, lonA), (latB, lonB)).km)

得到的结果分别是:

447.2498
447.2497993542003
446.72135807011483

在这里插入图片描述
除此之外,geopy还有其他实用功能,概括如下(之后再开拓):

  • 地理编码:将字符串转换为地理位置
  • 逆地理编码:用于将地理坐标转换为具体地址
  • 计算两个点的距离:经纬度距离和球面距离

有关geopy的安装,这里不再赘述,方法和安装其他库是一样的,总的来说就是conda/pip+可能会换镜像源。如果都不能成功安装,那就直接使用万能的方法,在Unofficial Windows Binaries for Python Extension Packages中搜索下载,然后在本地pip install即可。需要注意的是确定好平台支持版本(pip debug --verbose可查看),参考我之前写的一篇文章:如何下载安装whl轮子以及确定Python适配版本

参考资料:

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:14:17  更:2021-07-16 11:16:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 1:10:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码