讲师中心 微信公众号
AI工具推荐 视频效率加速

c++如何解析Google Earth生成的KML坐标轨迹【实战】

秋杰同学_4044

秋杰同学_4044

发布时间:2026-04-08 20:50:53

|

463人浏览过

|

来源于php中文网

原创

使用std::string::find定位标签,提取原始文本后清除首尾空白,再用std::stringstream按空格分割三元组,逐个以逗号解析为经度、纬度、海拔(缺失则设0.0),全程try/catch防stod异常。

c++如何解析google earth生成的kml坐标轨迹【实战】

Google Earth 导出的 KML 文件里,坐标通常藏在 <coordinates></coordinates> 标签内,格式是空格分隔的“经度,纬度,海拔”三元组(如 116.404,39.915,0),但实际解析时容易因换行、缩进、多余空格或缺少海拔值崩溃——直接用 std::stringstream 按空格切分再按逗号拆解,是最轻量且可控的方式,无需引入 XML 解析库。

怎么提取 <coordinates></coordinates> 标签内的原始文本

KML 是标准 XML,但如果你只关心轨迹点,不必上 libxml2 或 pugixml。Google Earth 生成的 KML 中,路径坐标几乎总在 <linestring><coordinates>...</coordinates></linestring> 或 <track><coord>...</coord></track> 结构里。对简单场景,正则或字符串查找更直接:

  • 用 std::string::find 定位 "<coordinates>"</coordinates> 和 "",注意处理大小写和前后空白
  • 提取后调用 std::string::erase 清掉首尾空白和换行符(\r\n\t)
  • 避免用正则匹配嵌套标签——KML 可能含注释或 CDATA,正则易误判;只定位最外层 <coordinates></coordinates> 即可
  • 若文件含多个 <coordinates></coordinates>(如多条路径),需循环提取,每次从上次结束位置继续搜索

如何安全地把坐标字符串转成 std::vector<:tuple double>></:tuple>

原始文本类似:"116.404,39.915,0 116.405,39.916,0.5 116.407,39.918"(注意:第三个值可能缺失):

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 用 std::stringstream 按空格分割出每个三元组字符串,跳过空字符串(if (token.empty()) continue)
  • 对每个 token,用 std::string::find_first_of(",") 找逗号,分三段解析:经度、纬度必存在,海拔可选;若找不到第二个逗号,设海拔为 0.0
  • 用 std::stod 转换,包裹 try/catch——KML 里偶尔混入非数字字符(如注释残留 "#116.404"),不捕获会导致程序终止
  • 顺序必须是“经度,纬度,海拔”,Google Earth 严格遵循此序;反了会把北京画到南美洲

常见错误现象和绕过方法

直接跑通代码却画错位置?大概率栽在这几个点上:

立即学习“C++免费学习笔记(深入)”;

  • std::stod 遇到科学计数法(如 "1.16404e+2")能正确解析,但某些旧编译器 locale 设置异常时会失败——显式调用 std::stod(token, nullptr, std::locale::classic())
  • KML 中坐标可能用制表符或混合空格分隔,std::stringstream 默认只认空格,需先用 std::replace 把 \t 替成空格
  • Google Earth 有时导出带 <coord></coord> 的扩展标签(尤其含时间戳的 <track></track>),此时应优先解析 <coord></coord> 内容,而非忽略命名空间前缀硬找 <coord></coord>
  • 经纬度值范围不对:经度超 [-180,180] 或纬度超 [-90,90],说明解析时把两个坐标串连在一起了(如 "116.404,39.915116.405,39.916")——这是空格被吃掉导致的,检查是否漏调 std::string::erase 清除所有空白

真正麻烦的不是解析本身,而是 KML 实际结构比规范松散得多:同一份数据,Google Earth 桌面版、网页版、移动版导出的标签嵌套深度和命名空间都可能不同。如果必须支持全格式,别硬刚字符串处理——老老实实用 pugixml 加 XPath 查询 //coordinates | //gx:coord,但对单次轨迹提取,手撕字符串更快、依赖更少、出错路径更清晰。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7099

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4944

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6417

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2582

2024.11.28

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

14846

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1745

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

4137

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

6301

2024.03.01

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn