如何把带地理标记的照片加入Google Earth

Google Earth并不读取照片内部的GPS坐标。把一张带地理标记的JPEG拖进去,什么都不会发生,因为存在那个文件里的位置信息对这个应用来说是不可见的。要把带地理标记的照片加进Google Earth,你得先把它们转换成KML:那才是Google Earth真正会读的格式,它把坐标放在照片旁边,而不是放在照片里面。
仅这一点就能解释人们在这里遇到的几乎所有问题,包括那些没有配图的图钉,以及死活不肯动起来的时间轴。下面的步骤先讲转换,再讲转换之后会出岔子的三件事。
Google Earth究竟从一张照片里读到了什么
什么也没有。它读KML以及它的压缩形式KMZ,整份清单就这么多。最清楚的证据来自Google自己关于这个主题的教程:它不去打开照片,而是演示如何把带地理标记的照片转换成KML,并先用一段脚本把坐标从图片里取出来。
这些坐标存放在照片的EXIF区块中,而它们的存储方式在你动手转换之前就值得先了解。纬度和经度永远写成正数。你在赤道的哪一侧、在本初子午线的哪一侧,则单独保存在一个只有一个字母的参考字段里:纬度用 N 或 S,经度用 E 或 W。
在转换过程中丢掉那一个字母,数字会完好无损地留下来,图钉却会落到错误的半球上,这就是“我的照片跑到海里去了”的经典版本。在转换一整批之前,先看看这个文件里到底有什么,这样你才知道究竟有没有东西可转。
如何把带地理标记的照片加入Google Earth
五个步骤,按顺序来。第二步只适用于还没有位置信息的照片。
- 先打开一张照片,确认它有纬度和经度,再去转换整个文件夹。
- 对任何没有坐标的照片,先把坐标写进照片里。
- 用一个会读取每张照片GPS区块的转换工具,把文件夹转成KMZ。
- 双击打开这个KMZ,或者通过File再选Open,在Google Earth里打开它。
- 把载入的图层拖进My Places,这样它在重启之后依然还在。
桌面版和网页版的Google Earth都能打开KML和KMZ文件。如果KMZ载入了但图片没有出现,原因几乎总是在下一节里。
KMZ文件里面究竟有什么
KMZ就是一个普通的ZIP压缩包。Google的文档把它描述为一个主KML文件加上用Zip工具打包在一起的辅助文件,你自己就能验证:复制那个文件,把扩展名改成 .zip,然后打开它。
里面你会看到最上层有一个KML文件,按惯例叫 doc.kml,还有一个存放图片的子文件夹。KML并不包含你的照片。它包含的是坐标,以及指向每张图片的路径,而Google的建议是让这些路径保持相对于压缩包根目录的相对路径。
由此引出两条规则,违反其中任意一条都会产生同一个症状,也就是点开图钉只看到一个图片损坏的图标:
- 导出之后不要重命名照片。 KML依然指向旧的文件名,而且没有任何提示会警告你。
- 不要在重新压缩时把所有内容又多套进一层文件夹。 这样每一条相对路径的起点都错了。
还有一条规则会绊倒那些想合并两份导出的人:Google的文档说明一个压缩包里只有一个KML文件,而Google Earth会使用它找到的第一个,并忽略后面的一切。把两个KMZ合并的结果就是你只拿到一半的图钉,而且没有任何错误提示。
为什么你的照片贴在地面上
即便拍摄时记录了海拔,照片往往还是平贴在地形上,这是默认设置,不是故障。KML通过一个高度模式来控制高度,其默认值是 clampToGround,KML参考文档把它定义为:指示Google Earth忽略任何高度设定,并把该对象贴合在地形之上。你记录下来的高度会被读取,然后被丢弃。
另一个选项 absolute,会把对象按海平面来定位,而不管它下方地形的实际海拔。这听起来像是解决办法,对于在海平面拍摄的照片也确实是。但对于在高海拔城镇拍的照片往往不是:文件里的高度是从海平面起算的,Google Earth里的地面来自它自己的地形模型,于是图钉可能被埋在地貌之下,而不是浮在上方。
Google自己的教程还补了一句提醒,让这件事在多数情况下只是纸上谈兵:很多设备根本不记录海拔,而是直接把它设为零。在断定某次转换弄丢了什么之前,先检查一个文件。
把一组照片变成一条时间轴
这才是让整件事值得去做的功能,也是大多数转换悄无声息地没能交付的功能。Google的文档说得很明确:当Google Earth打开一个包含带时间元素要素的KML文件时,它会显示一个时间滑块。拖动它,你的照片就会按拍摄顺序依次出现,把一团静止的图钉变成一段可以重放的行程。
它失败的原因在于,你照片里的日期和KML所要的日期写成了彼此不兼容的格式。
| 它存在哪里 | 它怎么写 |
|---|---|
| 在你的照片里,作为拍摄日期 | 2005:10:12 16:05:56 |
| 在Google Earth读取的KML里 | 2007-01-14T21:05:02Z |
照片在日期各部分之间使用冒号,而且不带时区。KML要的是连字符、日期与时间之间的一个 T,以及一个时区标记。一个把照片日期原样复制却不重写格式的转换工具,会做出一个Google Earth欣然载入、却永远不会放进滑块的文件:没有报错,只是没有时间轴。如果你的图钉没有滑块,这就是第一个要检查的地方。
图钉没有告诉你的事
Google的教程以一些容易被略过、却值得记住的提醒收尾。相机内置的GPS接收器并不总是准确。很多设备不记录海拔。而文件里的坐标标记的是相机所在的位置,而不是它所对准的东西。一张在十公里外拍摄的山景照片,图钉落在山谷里,而不是山顶上。
与之相关的缺口是方向。单纯的位置信息完全没有说明镜头朝向哪一边,所以在同一个点朝相反方向拍的两张照片,一旦变成地图上的图钉就无法区分了。有些相机会在坐标旁边记录一个罗盘方位;而一个普通文件夹里的大多数手机照片不会。
这些都不会让地图变得错误,但它们划定了地图能证明什么的界限。如果你想在信任一批图钉之前弄清楚文件到底存了什么,位置是如何存进一张照片里的讲解了底层的标签,而且你可以从任意图片中把坐标重新取出来,拿去和图钉落点做对照。



