引子
关于地图坐标系,可以参考这篇文章,下表列出了几种常用的坐标系:
坐标系 | 解释 | 使用地图 |
---|---|---|
WGS84 | 地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,最基础的坐标,谷歌地图在非中国地区使用的坐标系 | GPS/谷歌地图卫星 |
GCJ02 | 火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。并要求在中国使用的地图产品使用的都必须是加密后的坐标,而这套WGS84加密后的坐标就是gcj02。 | 腾讯(搜搜)地图,阿里云地图,高德地图,谷歌国内地图 |
BD09 | 百度坐标系,百度在GCJ02的基础上进行了二次加密,官方解释是为了进一步保护用户隐私 | 百度地图 |
小众坐标系 | 类似于百度地图,在GCJ02基础上使用自己的加密算法进行二次加密的坐标系 | 搜狗地图、图吧地图 等 |
国内地图产品导出的.gpx
文件一般使用的是非WGS84坐标系,所以如果想要将该.gpx
文件导入到只支持WGS84坐标系的设备使用时,坐标将发生偏移,因此需要对.gpx
文件进行坐标系转换。
在Github和其它搜索引擎上并没有搜到将.gpx
文件进行坐标转换的资料,但是将.csv
文件或直接对坐标点进行转换的代码有很多。所以决定对代码进行修改使其支持直接对.gpx
文件转换。
思路
.gpx
文件其实可以看成是一种xml
文件,其格式如下:
可见,gpx文件其实就是将每一个坐标点的经纬度、高度和时间记录下来,以此来生成轨迹。
所以,我们需要做的就是将.gpx
文件中的坐标点提取到,并对该坐标点进行坐标系转换,之后再将转换后的坐标写入新文件内,从而实现.gpx
文件的坐标转换。
代码
有了思路,代码就比较好办了,我是根据这里的代码进行了修改,并已经提交给原作者,目前原作者还没有merge代码,可以先使用我仓库里的代码。