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

c++如何解析Google Earth的KML文件坐标点【实战】

风辰同学_7662

风辰同学_7662

发布时间:2026-04-08 22:21:42

|

863人浏览过

|

来源于php中文网

原创

用 tinyxml2 解析 KML 的 标签最省事:通过逐层查找元素并调用 GetText() 获取内容,自动处理 CDATA 和空白;坐标按空格/换行分隔、逗号分割为 lon,lat,alt 三元组,解析时需切 C locale 并 trim 空白;忽略 gx: 扩展标签,递归遍历 Folder 防嵌套过深。

c++如何解析google earth的kml文件坐标点【实战】

用 tinyxml2 解析 KML 的 <coordinates></coordinates> 标签最省事

KML 是 XML 格式,不用自己写正则或状态机去抠坐标。tinyxml2 轻量、头文件即用、无依赖,C++ 项目里加个 tinyxml2.h 和 tinyxml2.cpp 就能跑。它能准确定位到 <coordinates></coordinates> 元素,且自动处理 CDATA 和空白字符——这点很关键,因为 Google Earth 导出的 KML 常把坐标塞在 里,直接读 FirstChild()->Value() 会返回空。

实操建议:

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

  • 用 XMLDocument::FirstChildElement("kml") 入口,再逐层查 "Document" → "Placemark" → "Point" → "coordinates",避免硬写 XPath(tinyxml2 不支持)
  • 对 <coordinates></coordinates> 元素,优先调用 GetText() 而非 FirstChild()->Value(),它会自动合并 CDATA 和文本节点
  • 坐标字符串形如 "116.404,39.915,0",逗号分隔经度、纬度、海拔;注意顺序是 lon,lat,alt,不是 lat,lon

std::stod 解析坐标时要注意 locale 和异常

Google Earth 导出的 KML 坐标小数点是英文句点(.),但如果你的程序 locale 设成了中文(比如 Windows 控制面板设了中文区域),std::stod 可能把 "116.404" 当成非法数字而抛 std::invalid_argument。

实操建议:

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

  • 解析前临时切回 "C" locale:std::locale::global(std::locale("C")),或者更稳妥地用 std::stod(str, nullptr) 并捕获异常
  • 每个坐标三元组要按逗号分割,但注意 KML 允许坐标间有空格或换行,所以先 std::stringstream 拆串,再对每个子串 trim()(手动跳过前后空白)
  • 海拔值可能为空(如 "116.404,39.915"),解析第三个字段前先检查分割后 vector size 是否 ≥ 3

处理 <linestring></linestring> 或 <polygon></polygon> 里的多点坐标

Placemark 不一定只含单点;若你在 Google Earth 里画了路径或面,KML 会用 <linestring></linestring> 或 <polygon></polygon>,其 <coordinates></coordinates> 内是一长串空格/换行分隔的三元组,例如:"116.4,39.9,0 116.5,39.8,0 116.6,39.7,0"。

C++14
C++14

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

下载

实操建议:

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

  • 别用 std::getline 按换行切——KML 坐标里换行只是格式美化,实际分隔符是空格和制表符
  • 用 std::istringstream iss(coords_text); std::string token; 配合 iss >> token 逐个读取非空白 token,每个 token 就是一个 "lon,lat,alt" 字符串
  • 注意 <polygon></polygon> 的第一个和最后一个点通常重合(闭合环),是否去重取决于你的业务逻辑,不要默认删掉末尾点

忽略 <coord></coord> 和时间动画标签,除非你真需要

Google Earth 专有扩展标签如 <coord></coord>、<multitrack></multitrack> 或 <timespan></timespan> 在标准 KML 解析中属于“可选扩展”。tinyxml2 能读到它们,但如果你只关心静态坐标点,硬解析这些标签只会增加出错概率和维护成本。

实操建议:

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

  • 只响应命名空间为 ""(空)或 "http://www.opengis.net/kml/2.2" 的元素,跳过所有带 gx: 前缀的节点
  • 用 element->Name() 判断节点名,不要依赖 element->Value()(它返回的是节点类型名,不是标签名)
  • 如果用户导入的是 Google Earth Pro 导出的 KML,且明确要求支持飞行路径动画,再回头补 gx:coord 解析;否则先跑通基础点位就足够

真正麻烦的是嵌套 <folder></folder> 和 <networklink></networklink>——它们会让 Placemark 不在根 Document 下一层。递归遍历比写死层级更可靠,但也要防深度过大导致栈溢出;建议加个层级计数器,超过 10 层就报 warning 并终止。

相关文章

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

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

下载

相关标签:

c++

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

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

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

DeepSeek

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

Seko
Seko Hot

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

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

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

WorkBuddy

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

PixPix
PixPix Hot

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

相关专题

更多
string转int
string转int

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

7239

2023.08.02

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

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

5004

2024.04.01

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

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

6497

2024.08.01

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

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

2602

2024.11.28

登录token无效
登录token无效

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

15046

2023.09.14

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

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

1765

2023.09.14

token怎么获取
token怎么获取

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

4197

2023.12.21

token什么意思
token什么意思

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

6361

2024.03.01

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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