POI坐标转换

POI 简介

POI,Point of Interest,中文译名有很多,暂且称呼为兴趣点,是导航、地图公司的最重要财富之一,每个POI包含最基础的三个要素:名称、经纬度,属性,以上海黄浦区部分POI数据作为例子(没错,就是EXCEL截的图):

上海黄浦区部分POI数据

可以看到,这部分POI数据有6个要素,地址信息包括了地理意义上的坐标,以及社会意义上的文本段,而类型也被分为一级类型(美食,或者餐馆)和二级类型(中餐厅、酒吧以及小吃类型)。这里每一个条目都是一个POI,单个或者少量的POI只能被用作查询使用,而一个地区内所有的POI信息则可以用来做很多有意思的事情,但在此之前,我们必须做一些准备工作。


获取POI信息

其实很遗憾,这部分没有有用的信息,因为获取POI信息的程序是我的小伙伴写的,不过我去百度地图的API里看了一下,貌似也不是很难,网上也有很多教程。如果你们真的不会获取的话,我可以写一篇说获取POI程序的文章。
那么,就得到了上面截图中的那些信息。但是,请注意,这里的X,Y并不能直接使用,直接使用的后果就是:

这里写图片描述

这是随意截的南京东路附近的POI坐标投影在WGS84,完全是乱的,外滩的海岸上都是些不明建筑,对应的百度地图截图是:

这里写图片描述

为什么会出现这种状况呢?这还要从国内的电子地图的保密性说起……


坐标系统

国际通用的坐标系统是WGS84,所以国外的地图都是直接用的这个坐标系统,包括Google、Bing等,但他们无法拿到国内的地图,而Google Map和Bing Map用的国内的地图源都是高德地图。而国内的图商则必须遵守国家测绘局制定的一套坐标偏移系统将GPS上获得的坐标转换成国内通用的GCJ-02坐标系统,也称作火星坐标系,此转换算法公开,但反算法应该是作为机密,没人敢破解,就算破解了也没人敢往网上发。而百度就更蛋疼了,在火星坐标系的基础上进行了二次偏移,形成百度自己的BD-09坐标系。

那么问题来了,这么两个投影原理都不知道的坐标系,怎么进行地理计算?尤其是我的路网信息是从OpenStreetMap上下载的,别人是WGS84坐标系,因此说了这么久,引出了正题,而我的方法是二次转换,将POI由百度坐标系转成火星坐标系,再从火星坐标系转成WGS84坐标系。不要质疑我泄露国家机密,后者的转换算法确实没法破解,我只是从网上找到了一个拟合的算法,但实际验证的情况是较为符合真实坐标。


BD-09 -> GCJ-02

这边的代码是用R语言写的,其中读出来的FILE文件就是原始的百度坐标系统,而最后将转换的坐标也写入原始文件覆盖掉原来的坐标。

options(digits=7)
x_pi <- 3.14159265358979324 * 3000.0 / 180.0
bd_lon <- 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值