当前位置: 首页 > news >正文

[GeographicLib] LocalCartesian用法

LocalCartesian
下面我将通过一个具体实例来演示 LocalCartesian 的应用,使用 GeographicLib 库(一个常用的地理计算库)来实现经纬度与局部笛卡尔坐标之间的转换。

这个示例会完成以下操作:

选择一个参考点(例如某个城市的经纬度)
将其他点的经纬度转换为相对于参考点的局部笛卡尔坐标
再将局部笛卡尔坐标转换回经纬度,验证转换的准确性
# 安装依赖:pip install geographiclibfrom geographiclib.geodesic import Geodesic
from geographiclib.localcartesian import LocalCartesiandef main():# 定义参考点(例如:北京天安门的经纬度)# 纬度(lat), 经度(lon), 海拔(h)ref_lat = 39.9042ref_lon = 116.4074ref_h = 0.0# 初始化局部笛卡尔坐标系,以参考点为原点lc = LocalCartesian(ref_lat, ref_lon, ref_h, Geodesic.WGS84)# 示例点1:北京故宫(距离参考点不远)point1_lat = 39.9163point1_lon = 116.3908point1_h = 0.0# 将经纬度转换为局部笛卡尔坐标 (x, y, z)# x: 东方向, y: 北方向, z: 垂直方向x1, y1, z1 = lc.Forward(point1_lat, point1_lon, point1_h)print(f"点1相对于参考点的局部坐标:")print(f"x: {x1:.2f}米 (东方向)")print(f"y: {y1:.2f}米 (北方向)")print(f"z: {z1:.2f}米 (垂直方向)\n")# 示例点2:上海人民广场(距离参考点较远)point2_lat = 31.2304point2_lon = 121.4737point2_h = 0.0x2, y2, z2 = lc.Forward(point2_lat, point2_lon, point2_h)print(f"点2相对于参考点的局部坐标:")print(f"x: {x2:.2f}米 (东方向)")print(f"y: {y2:.2f}米 (北方向)")print(f"z: {z2:.2f}米 (垂直方向)\n")# 将局部坐标转换回经纬度,验证准确性lat, lon, h = lc.Reverse(x1, y1, z1)print(f"将点1的局部坐标转换回经纬度:")print(f"纬度: {lat:.6f}, 经度: {lon:.6f}, 海拔: {h:.2f}米")print(f"原始值: 纬度: {point1_lat:.6f}, 经度: {point1_lon:.6f}")if __name__ == "__main__":main()

代码解释:

参考点设置:我们选择了北京天安门作为参考点,以此为原点建立局部笛卡尔坐标系
核心转换方法:Forward():将经纬度坐标转换为局部笛卡尔坐标Reverse():将局部笛卡尔坐标转换回经纬度坐标
坐标含义:x:东方向距离(米)y:北方向距离(米)z:垂直方向距离(米)

实际应用场景:
这个示例展示了 LocalCartesian 在以下场景中的价值:

无人机导航:可以将起飞点作为参考点,无人机的位置用局部坐标表示,简化距离和方向计算
机器人定位:在局部区域内,使用笛卡尔坐标比经纬度更便于路径规划和运动控制
工程测量:在建筑工地上,以某个基准点建立局部坐标系,方便计算各点之间的相对位置

注意:局部笛卡尔坐标系更适合小范围区域(如城市级别),对于跨大洲等大范围场景,误差会逐渐增大。

http://www.xdnf.cn/news/1359793.html

相关文章:

  • 时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
  • Palantir Foundry 领先其他数据平台5到10年:一位使用者的深入观察
  • 门面设计模式
  • 第4章 SPSS简介与数据库构建
  • 网络协议---TCP
  • 最大连续1的个数Ⅲ-滑动窗口
  • 2025/8/24 DockerDesktop安装使用
  • 【网络运维】Shell 脚本编程:while 循环与 until 循环
  • 审核问题——应用未配置图标的前景图和后景图
  • JUC——AQS
  • 客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
  • 蓝凌EKP产品:从 XML 到 JSON ——表单存储的性能优化实践
  • [自用笔记]上传本地项目至github
  • 【嵌入式开发 Linux 常用命令系列 8 -- git checkout 解冲突详细介绍】
  • Qt工具栏中图标槽函数没有响应的问题分析
  • 十一、redis 入门 之 数据持久化
  • 基于FPGA的情绪感知系统设计方案:心理健康监测应用(一)
  • yggjs_rlayout框架v0.1.2使用教程 01快速开始
  • 基于RBF-GA的铝/镁异材FSLW工艺参数优化研究
  • Qt---架构文件.pro
  • 02-开发环境搭建与工具链
  • 鸿蒙中点击响应时延分析
  • 多核多线程应用程序开发可见性和乱序如何处理
  • css3之flex布局
  • Linux 学习笔记 - 集群管理篇
  • 音视频学习(五十五):H264中的profile和level
  • pyecharts可视化图表-scatter:从入门到精通
  • Trip Footprint旅行足迹App
  • jar包项目自启动设置ubuntu
  • Vue中 this.$emit() 方法详解, 帮助子组件向父组件传递事件