微信平台之坐标系与位置

来源:互联网 发布:java设置环境变量win10 编辑:程序博客网 时间:2024/05/16 01:59

    国际经纬度坐标标准为WGS-84(世界通用的经纬度坐标系),通常gps获取到的就是该坐标,在我国,这个坐标是不能直接应用在互联网服务上的,至少要经过国家测绘局的加密。

    国测局试用的加密坐标系就是GCJ-02(被称为火星坐标系)中国google地图,soso地图就是进行了GCJ-02的加密。

    百度坐标在GCJ-02的基础上,进行了BD-09(百度坐标系)二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

    百度的坐标转换接口:

http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=30.531313&y=114.372717

返回结果  {"error":0,"x":"MzAuNTM4MTI0NDE4NjEz","y":"MTE0LjM3ODY0NjY1NTAy"} x是纬度,y是经度,php可用base64_decode()解密

http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=114.372717&y=30.531313

返回结果  {"error":0,"x":"MTE0LjM4NDcxNTA2OTI=","y":"MzAuNTM1MjA0NjQ0Nzg="} x经度,y是纬度,也是用base64加密过的


参数说明:

from 源坐标系 。to 要转换坐标系。0表示gps坐标系(WGS-84),2表示谷歌坐标系(GCJ-02),4表示百度坐标系(BD-09)

这里有一点要注意的是GPS对应的坐标x表示经度,y表示纬度。而google对应的坐标x表示纬度,y表示经度。

经测试只能从gps或者谷歌坐标系转到百度,而不能逆向,而且也可以从gps到谷歌,也就是只能进行加密的过程而不能解密。

from=0&to=4 ,from=0&to=2 ,from=2&to=4 只有这三个是可用的。


微信平台获得一定权限的服务号,有一个功能是自动获取地理位置,如果开启该功能并且用户同意获取地理位置信息,那么微信为隔一段时间给微信服务器发送包含用户当前位置信息的xml数据。格式如下:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[LOCATION]]></Event><Latitude>23.137466</Latitude><Longitude>113.352425</Longitude><Precision>119.385040</Precision></xml>

值得注意的是,该消息是一个事件消息,Event是LOCATION,位置信息的参数名是Latitude,Longitude,经测试该坐标是属于GPS通用坐标。


而另外一个与位置想关的服务是用户可以主动发送地理位置信息。微信对话框中+点开选择位置,会打开soso地图,点击发送,这是微信也会发送一个xml数据给服务器。格式如下:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[location]]></MsgType><Location_X>23.134521</Location_X><Location_Y>113.358803</Location_Y><Scale>20</Scale><Label><![CDATA[位置信息]]></Label><MsgId>1234567890123456</MsgId></xml> 

而此消息的类型就直接是location了,而包含位置信息的参数名也变成了Location_X,Location_Y。此处的坐标属于soso地图的坐标系,也就是GCJ-02,与谷歌坐标系一样。

0 0