经常我们在网络收集或者爬取一些在线地图的基础数据例如百度、高德的POI数据。但是大家知道百度和高德使用的是火星坐标系,这就和标准的WGS1984和CGCS2000有差距,数据就会产生偏移。如下图POI点位与卫星底图错位显示,POI点都跑到河里去了。
那我们就来看看我们该如何解决这个问题呢?首先我们收集的一般是CSV文件。CSV文件中有POI点名称、经度、纬度等信息。
我们第一步要做的就是将CSV文件展点,之后再考虑将火星坐标系的数据转为常规的WGS1984的坐标系。
那接下来,就利用今天的主角——QGIS,全球第一开源GIS软件!实现CSV格式的POI文件快速展点,以及火星坐标系转WGS1984坐标系。关于QGIS软件大家可以从以下两个推文深入了解以及QGIS软件获取:
01 QGIS实现CSV格式快速展点
这次测试我使用的是QGIS3.42,双击QGIS Desktop 3.42.0.
选择菜单“图层—>添加图层——>添加分隔文本图层”。
在跳出来的分隔文本选项面板中。1处添加csv格式的POI数据,2处自动识别,在数据样例处会显示数据,随后在3处设置 点坐标的XY字段,设置几何图形CRS坐标系为WGS1984.
点击添加后即可生成数据。但是此时生成的数据是火星坐标系与标准地图(例如天地图卫星底图)是有偏移的。关于QGIS如何添加天地图可参考之前推文:
QGIS无插件加载(无偏移)天地图高清影像、矢量地图、地形、注记!整理好的图源地址分享
兴趣点POI偏移都跑到山上来了
那接下来就进行火星坐标系转WGS1984吧。
02 什么是火星坐标系
首先我们来看一下什么是火星坐标系?
“火星坐标系”(GCJ-02)是中国国家测绘地理信息局制定的一种对地理坐标进行加密偏移的算法和标准。它有时也被戏称为“国测局02坐标系”或“火星坐标”。
以下是关于火星坐标系需要了解的关键信息:
-
核心目的:保密与安全
-
中国出于国家安全考虑,要求所有在中国境内发布或使用的地图(包括电子地图服务如高德、百度、腾讯地图,以及各种导航设备、手机定位APP等)必须使用经过加密处理的地理坐标数据。
-
GCJ-02 就是对国际通用的 WGS-84 坐标系(全球定位系统 GPS 使用的坐标系)进行非线性加密偏移后得到的坐标系。 这个偏移是有意加入的、非线性的,使得地图上的点相对于真实的地理位置产生了一定程度的、看似随机的偏差。
-
-
相关坐标系:
-
WGS-84: 全球通用的标准坐标系,GPS 卫星定位系统直接输出的坐标就是这个坐标系。它是未加密的、真实的经纬度。
-
BD-09: 百度地图在 GCJ-02 基础上又进行了一次自定义的加密偏移后使用的坐标系。百度地图API返回的坐标通常是 BD-09。高德地图坐标系为GCJ-02 。
-
CGCS2000: 中国推出的国家大地坐标系,这是一个符合国际规范的地心坐标系(类似于WGS-84),用于高精度测绘等专业领域。它与GCJ-02完全不同,GCJ-02是基于偏移的加密系统,而CGCS2000是真实的地理坐标基准。公开的在线地图服务通常不使用CGCS2000直接提供坐标。
-
03 火星坐标系转WGS1984
在了解了什么是火星坐标系之后,我们就找到了数据偏移的原因,我这套福州POI是从高德地图上爬取的数据,坐标系是GCJ—02。那我们现在就使用QGIS来实现火星坐标系。
一般我们使用QGIS的插件Geohey插件来实现,首先我们来到插件菜单,选择管理并安装插件。
在插件管理中心搜索geohey,之后选择Geohey Toobox,之后选择2处点击安装插件,因为我已经装了所以显示的是重新安装插件。
安装插件后就会在工具箱面板显示出工具箱集合。
之后便可以选择对应的坐标系转换。因为我的数据是高德的GCJ-02坐标系,选择选择的是GCJ02 to WGS。工具设置的界面也简单,直接选择输入,输出,点击运行结束。
运行后生成的图层就是标准的WGS1984坐标系,便可以与无偏移的地图对起来了。