首页 » Web技术 » PHP » 正文

微信公众号开发之用户地理位置坐标转百度坐标(搜狗、google地图坐标转百度地图坐标)

我们知道,Google地图、soso地图与百度地图的坐标是不一样的,通常会差挺远一段距离。因此我们在微信中使用百度地图导航等百度地图API时,若根据微信获取的用户位置信息的话,得到的结果通常是不准确的。这时我们就需要把微信获取的用户位置坐标转换成百度地图对应的坐标才可以。

下面是我们在微信公众号中获得的用户位置的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>

参数说明:

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgTypelocation
Location_X地理位置维度
Location_Y地理位置经度
Scale地图缩放大小
Label地理位置信息
MsgId消息id,64位整型

我们需要做的是把 Latitude 和 Longitude 转换成百度地图对应的坐标(示例):

百度地图坐标转化API组成说明(更多):

服务参数说明

参数含义取值范围是否必须默认取值
coords源坐标格式:经度,纬度;经度,纬度…限制:最多支持100个格式举例:114.21892734521,29.575429778924;114.21892734521,29.575429778924
ak开发者密钥
from源坐标类型取值为如下:1:GPS设备获取的角度坐标;2:GPS获取的米制坐标、sogou地图所用坐标;3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标4:3中列表地图坐标对应的米制坐标5:百度地图采用的经纬度坐标6:百度地图采用的米制坐标

7:mapbar地图坐标;

8:51地图坐标

默认为1,即GPS设备获取的坐标
to目的坐标类型有两种可供选择:5、6。5:bd09ll(百度经纬度坐标),6:bd09mc(百度米制经纬度坐标);默认为5,即bd09ll(百度坐标)
output返回结果格式json或者xmljson

返回值说明

名称类型含义取值范围
statusinit状态码正常0,异常非0,详细见状态码说明
resultjson或者xml数组转换结果与输入顺序一致
xfloat横坐标
yfloat纵坐标

 

下面上代码:

<?php

$postData = "<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> ";

$object = simplexml_load_string($postData, 'SimpleXMLElement', LIBXML_NOCDATA);		

$lat = $object->Location_X;  //纬度
$lng = $object->Location_Y;  //经度

$q = "http://api.map.baidu.com/geoconv/v1/?coords={$lng},{$lat}&from=3&to=5&ak=你的API KEY";
$result = json_decode(file_get_contents($q));

echo "转换前的经度:".$lng."<br/>";
echo "转换后的经度:".$result->result[0]->x."<br/>";  
echo "转换前的纬度:".$lat."<br/>";
echo "转换后的纬度:".$result->result[0]->y."<br/>";

转化完之后我们就可以用百度地图API进行相关的开发了~~比如我们前面开发的《 微信公众号开发之周边商家》。

本文共 1 个回复

发表评论