1. 学习 KML 的背景
这次对 KML 的学习,主要原因是我 GitHub 项目 GPX-in-China 的一个 issus 疑似无效 。这个项目可以将 WGS84 坐标系的 GPX/KML 转换为 GCJ02 坐标系,这样不同设备生成的 GPX / KML 文件就可以正确的在 Google Map 等工具中显示。这个 issue 表明我之前写的代码适用于手机 App 两步路户外助手生成的 KML 文件,但不一定适用于其他设备生成的 KML 文件,大致看了下,我明白了我对 KML 以及 XML 文件这种成熟且复杂的技术非常不熟悉,之前写的代码不过是投机取巧,现在非常有必要重新学习一下。
2. KML 是如何存储带有时间信息的路径
使用 gx:Track
元素。
gx:Track
元素包含一系列的 gx:coord
和 when
元素,其中 gx:coord
的元素值经纬度坐标,when
为时间戳,在一个 gx:Track
元素中,在 KML 文件中,gx:Track
元素的代码类似于以下示例:
1 | <Placemark> |
注1:”gx” 是 Google 扩展命名空间,用于引入 Google Earth 的扩展功能。
这种记录格式在摄影上有很好的应用,因为很多相机目前都不自带 GPS,在旅拍时,可以使用手机或其他设备记录带时间的路径信息到 KML 文件中,后面就可以一键为已拍摄的照片的 EXIF 中写入经纬度信息。我的另一个开源项目 ImageGPSTools 就可以很方便为 Jpg 格式的图片写入位置信息。
3. KML 是如何存储不带时间信息的路径的的
使用 LineString
元素
对比 gx:Track
,LineString
不引入额外的命名空间,但是也不存储时间信息。
1 | <Placemark> |
4. 总结
在需要记录时间时,使用 Google 扩展的 gx:Track
元素记录,否则使用 LineString
元素记录。