标准gpx文件的时间格式

        gpx文件是适用于GPS位置座标信息交换格式的文本,最近的工作涉及到地理位置信息与图片信息的结合,因此接触到了gpx文件和GeoSetter软件,后者是一款功能强大的图片GPS信息编辑软件。很多人利用它把gpx文件中记录的位置信息写入到没有定位信息的照片中去,从而使得照片信息更回丰富,当拍摄者事后与显示拍摄点地图同时观赏照片时能够引起更多的内心共鸣。笔者这次想给几张试验图片加上位置的信息,通过加载位置信息的成功与否,验证所建立的gpx文件是否标准。

        为了简单点,刚开始建立的gpx文件记录的都是航点(waypoint),用xml文件的编辑器和gpx文件的阅读器都没报错,在地图上也能正确地显示所记录的航点,如下图:

标准gpx文件的时间格式

但是,当想用自建的gpx文件把位置信息写入照片的exif中的时候就遇到问题了,GeoSetter软件不能识别自建gpx文件中的位置信息,在GeoSetter中的设置如下:

标准gpx文件的时间格式

在上面的设置下点“确认”后出现的提示:

 

标准gpx文件的时间格式

从提示信息看,是所选的gpx文件中不含有GPS信息,这个就很难理解了,明明在另一个gpx文件阅读器中还能在地图上加载,到这里却变得没有GPS信息了。试了很多种办法,比如改变标签的顺序、增减可选节点(node)的数量包括增加踪迹点(trkpt)记录、改变数据的单位如把经纬度原用小数表达改为度、分、秒的方式、更换GeoSeter的版本,所有的措施都无济于事。为了与标准gpx文件的格式进行比较,专门安装了手机应用“GPS工具箱”,它里面集成了专门路径生成模块,使用其生成了gpx文件:

 

标准gpx文件的时间格式

 

不过,出人意料的是我认为这个标准的gpx文件GeoSetter软件仍然不能识别其中包含的位置信息,提示的错误与我自建的gpx文件是一样的。如此看来gpx文件中的错误显然非常隐晦,且不易查觉,但影响很大,在严格按照gpx标准开发的应用上有可能会打不开。我还是要找一个能用的gpx文件进行比较,这样才能找到错误加以解决。终于在一个户外论坛上找到了一个武汉-荆州的gpx踪迹文件:

标准gpx文件的时间格式

GeoSetter能够正确的识别这个gpx文件中的位置信息。在仔细的比较后我发现自建的gpx和gps工具箱生成的gpx文件与户外的gpx文件存在一处共同的差别,那就是时间戳的格式,我们采用的是yyyy-MM-dd HH:mm:ss格式,而户外的gpx文件采用的是yyyy-MM-dd’T’HH:mm:ss.SSS’Z’格式,再查gpx标准的网站,原来人家已经有明确的规定要采用户外的那种格式啦:

 

标准gpx文件的时间格式

 

于是,我在android studio中把相关的语句进行了修改:

标准gpx文件的时间格式

修改后生成的gpx文件再用GeoSetter加载时就不说文件不包括位置信息了:

 

标准gpx文件的时间格式

加载了修改了时间戳后gpx文件,照片上已经能看到位置信息了:

标准gpx文件的时间格式

标准gpx文件的时间格式

虽然已经能够正确的识别gpx文件中的位置信息,但最后把信息写到照片中还是有小插曲:下载的GepSetter软件中没有包括exiftool这个工具,信息写不进去,后来找到了完整的GeoSetter软件重新安装后就可以啦,这是写了位置信息后的照片exif信息:

标准gpx文件的时间格式

 

这说明自建的gpx文件的格式和内容都符合标准,能够起到信息交换了作用了。这个过程也说明了如果要进行信息的交换和分享,首先要理解标准,然后严格的执行标准,在共同的标准下才可能实现有意义的交换和共享。