信息发布→ 登录 注册 退出

如何使用Python已知两坐标求距离?

发布时间:2025-12-02

点击量:
可以使用h*ersine公式或geopy库计算两地间的大圆距离。1. 手动实现h*ersine公式,通过经纬度转弧度、计算球面差值与地球半径乘积得距离;2. 推荐使用geopy库的geodesic方法,基于WGS-84椭球模型更精确;3. 注意坐标顺序为(纬度, 经度),避免颠倒,且长距离需考虑地球曲率,单位可选千米、米或英里。

如何使用python已知两坐标求距离?

已知两个坐标的经纬度,可以使用Python中的地理距离计算方法来求它们之间的距离。最常用的方式是利用h*ersine公式计算地球表面两点间的**大圆距离**(近似直线距离)。也可以使用第三方库简化操作。

1. 使用h*ersine公式手动计算

假设两个点的经纬度分别为 (lat1, lon1) 和 (lat2, lon2),单位为度。以下是实现代码:

import math
<p>def calculate_distance(lat1, lon1, lat2, lon2):</p><h1>地球半径(千米)</h1><pre class='brush:python;toolbar:false;'>R = 6371.0

# 将经纬度转换为弧度
lat1_rad = math.radians(lat1)
lon1_rad = math.radians(lon1)
lat2_rad = math.radians(lat2)
lon2_rad = math.radians(lon2)

# 计算差值
dlat = lat2_rad - lat1_rad
dlon = lon2_rad - lon1_rad

# h*ersine 公式
a = math.sin(dlat / 2)**2 + math.cos(lat1_rad) * math.cos(lat2_rad) * math.sin(dlon / 2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))

# 距离(千米)
distance = R * c
return distance

示例:北京和上海的经纬度

beijing = (39.9042, 116.4074) shanghai = (31.2304, 121.4737)

dist = calculate_distance(beijing[0], beijing[1], shanghai[0], shanghai[1]) print(f"两地距离约为: {dist:.2f} 千米")

2. 使用geopy库(推荐)

更简单的方法是使用 geopy 库,它封装了多种距离计算方式。

码上飞 码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

码上飞 430 查看详情 码上飞
# 安装命令:pip install geopy
<p>from geopy.distance import geodesic</p><h1>坐标格式:(纬度, 经度)</h1><p>point1 = (39.9042, 116.4074)  # 北京
point2 = (31.2304, 121.4737)  # 上海</p><h1>计算距离</h1><p>distance = geodesic(point1, point2).kilometers
print(f"两地距离为: {distance:.2f} 千米")</p>

geopy 使用的是更精确的椭球模型(WGS-84),比球面假设更准确。

3. 注意事项

  • 确保坐标顺序是 (纬度, 经度),不要颠倒
  • 如果距离很短(如几百米内),可近似用欧氏距离,但长距离必须考虑地球曲率
  • 单位注意:结果可输出为千米、米或英里(geopy支持 .miles, .meters 等)

基本上就这些,根据是否允许安装第三方库选择合适方法。

以上就是如何使用Python已知两坐标求距离?的详细内容,更多请关注其它相关文章!


相关文章: Python getattr() 异常处理深度解析:避免程序意外退出  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  126邮箱网页版官方入口 126邮箱账号在线登录平台  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  在Runstone环境中高效处理TasteDive API的JSON数据  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  韩剧圈正版入口页面_韩剧圈官网登录链接  必由学官网入口 必由学教师登录入口  小红书网页版入口链接分享 小红书官网直接进  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  在Socket.IO连接中实现Access Token自动更新与动态重连  黑猫投诉统一入口官网 消费者权益保护投诉平台  葱吃多了会怎样 葱吃多了会伤胃吗  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  Lar*el Migration:重命名列后添加新列的正确操作顺序  uc浏览器网页版入口 uc浏览器网页版最新网址  铁路12306的积分有效期是多久_铁路12306积分有效期说明  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  理解Python模块与全局变量的作用域管理  将HTML Canvas内容转换为可上传的图像文件(File对象)  自定义Bag-of-Words实现:处理带负号的词汇权重  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  自定义 WooCommerce 购物车:始终显示全部交叉销售商品  PostgreSQL海量数据高效导入策略:Python与Django实践指南  Win11怎么关闭快速启动_Win11彻底关机设置教程  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  HTML空白字符处理机制:渲染、DOM与编码实践  J*aScript中在Map循环中检测并处理空数组元素  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  b站如何看历史记录_b站观看历史找回方法  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  J*aScript 字符串标签转换:使用正则表达式高效替换  Golang如何安装Swagger工具_GoSwagger文档生成环境  Pandas DataFrame 多条件优先级排序与排名  如何在Promise链中优雅地中断后续then执行  Go语言:非阻塞式判断标准输入(os.Stdin)是否有数据  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  Go语言中Map值调用指针接收器方法的限制与应对  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  mysql备份恢复性能优化_mysql备份恢复性能优化方法 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!