最近,在做微信公众平台PHP开发时,实现了根据用户发送的自身定位消息来获取周边信息的功能,为防止时间久后会忘记,特此总结,与大家分享,希望可以共同进步!!!
首先,我们自身的服务器应该与微信服务器对接成功,关于怎么去对接,笔者这里不再赘余,大家可以参考微信提供的开发者文档来实现对接功能。
当我们对接成功后,就可以根据用户发送的定位消息来实现了,这里我们使用的是百度开放平台提供的地图API(http://developer.baidu.com/map/webservice.htm)和静态图API(http://developer.baidu.com/map/static-1.htm),前提是我们需要注册百度帐号,毕竟免费用人家的东西嘛…
下面进行详细讲解:
1、一个API的事例,设置城市为北京,检索关键字是“银行”
http://api.map.baidu.com/place/v2/search?&query=银行&location=39.915,116.404&radius=2000&output=xml&ak=E4805d16520de693a3fe707cdc962045
2、接口参数
返回的结果为:
- This XML file does not appear to have any style information associated with it. The document tree is shown below.
- <PlaceSearchResponse>
- <status>0</status>
- <message>ok</message>
- <results>
- <result>
- <name>中国银行(前门支行)</name>
- <location>
- <lat>39.908395</lat>
- <lng>116.401507</lng>
- </location>
- <address>东城区西交民巷17号</address>
- <uid>9077bab3ea018f6a7dc876e1</uid>
- </result>
- <result>
- <name>中国工商银行(自动柜员机店)</name>
- <location>
- <lat>39.92203</lat>
- <lng>116.40349</lng>
- </location>
- <address>西城区景山前街4号故宫景运门</address>
- <uid>8ae8bed1a027af62705e8077</uid>
- </result>
- <result>
- <name>中国工商银行(华龙街分理处)</name>
- <location>
- <lat>39.915002</lat>
- <lng>116.413638</lng>
- </location>
- <address>东城区南河沿华龙街北京天安大厦贵宾楼饭店</address>
- <uid>8d0f865a1c57ef4e76e5b6ff</uid>
- </result>
- <result>
- <name>中国工商银行(长安和平门内支行)</name>
- <location>
- <lat>39.90742</lat>
- <lng>116.390732</lng>
- </location>
- <address>北京市西城区北新华街东松树胡同甲31号</address>
- <telephone>(010)66055708,(010)66057768</telephone>
- <uid>a74481d691a0bf46f503b838</uid>
- </result>
- <result>
- <name>中国农业银行长安支行</name>
- <location>
- <lat>39.910138</lat>
- <lng>116.41365</lng>
- </location>
- <address>北京市东城区正义路3号卫戍区正义路物业楼</address>
- <telephone>(010)65250432</telephone>
- <uid>37d60a4657d8ce601e1d11c9</uid>
- </result>
- <result>
- <name>中国工商银行(北池子储蓄所)</name>
- <location>
- <lat>39.921698</lat>
- <lng>116.409168</lng>
- </location>
- <address>东城区东华门大街87号</address>
- <uid>9577afcbeb7f4c1ae812e46c</uid>
- </result>
- <result>
- <name>中国工商银行北京东交民巷分理处</name>
- <location>
- <lat>39.908091</lat>
- <lng>116.413558</lng>
- </location>
- <address>北京市东城区正义路东交民巷30-6号</address>
- <telephone>010-65266185</telephone>
- <uid>5e53af1accd7a25c4151c026</uid>
- </result>
- <result>
- <name>中国工商银行东长安街支行</name>
- <location>
- <lat>39.91588</lat>
- <lng>116.418675</lng>
- </location>
- <address>北京市东城区东长安街1号东方广场W3座</address>
- <telephone>(010)85181650</telephone>
- <uid>24d05508ea8ccbd2128824de</uid>
- </result>
- <result>
- <name>中国工商银行新东安支行</name>
- <location>
- <lat>39.919304</lat>
- <lng>116.417906</lng>
- </location>
- <address>北京市东城区王府井大街138号一层</address>
- <telephone>010-65256818</telephone>
- <uid>8e96d243973dc4bfc51b75e5</uid>
- </result>
- <result>
- <name>中国工商银行北京王府井金街支行</name>
- <location>
- <lat>39.921006</lat>
- <lng>116.417403</lng>
- </location>
- <address>北京市市辖区东城区北京市东城区王府井大街237号</address>
- <telephone>(010)65246520</telephone>
- <uid>7d5f3a0afc6a944b2cb908c9</uid>
- </result>
- </results>
- </PlaceSearchResponse>
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<PlaceSearchResponse>
<status>0</status>
<message>ok</message>
<results>
<result>
<name>中国银行(前门支行)</name>
<location>
<lat>39.908395</lat>
<lng>116.401507</lng>
</location>
<address>东城区西交民巷17号</address>
<uid>9077bab3ea018f6a7dc876e1</uid>
</result>
<result>
<name>中国工商银行(自动柜员机店)</name>
<location>
<lat>39.92203</lat>
<lng>116.40349</lng>
</location>
<address>西城区景山前街4号故宫景运门</address>
<uid>8ae8bed1a027af62705e8077</uid>
</result>
<result>
<name>中国工商银行(华龙街分理处)</name>
<location>
<lat>39.915002</lat>
<lng>116.413638</lng>
</location>
<address>东城区南河沿华龙街北京天安大厦贵宾楼饭店</address>
<uid>8d0f865a1c57ef4e76e5b6ff</uid>
</result>
<result>
<name>中国工商银行(长安和平门内支行)</name>
<location>
<lat>39.90742</lat>
<lng>116.390732</lng>
</location>
<address>北京市西城区北新华街东松树胡同甲31号</address>
<telephone>(010)66055708,(010)66057768</telephone>
<uid>a74481d691a0bf46f503b838</uid>
</result>
<result>
<name>中国农业银行长安支行</name>
<location>
<lat>39.910138</lat>
<lng>116.41365</lng>
</location>
<address>北京市东城区正义路3号卫戍区正义路物业楼</address>
<telephone>(010)65250432</telephone>
<uid>37d60a4657d8ce601e1d11c9</uid>
</result>
<result>
<name>中国工商银行(北池子储蓄所)</name>
<location>
<lat>39.921698</lat>
<lng>116.409168</lng>
</location>
<address>东城区东华门大街87号</address>
<uid>9577afcbeb7f4c1ae812e46c</uid>
</result>
<result>
<name>中国工商银行北京东交民巷分理处</name>
<location>
<lat>39.908091</lat>
<lng>116.413558</lng>
</location>
<address>北京市东城区正义路东交民巷30-6号</address>
<telephone>010-65266185</telephone>
<uid>5e53af1accd7a25c4151c026</uid>
</result>
<result>
<name>中国工商银行东长安街支行</name>
<location>
<lat>39.91588</lat>
<lng>116.418675</lng>
</location>
<address>北京市东城区东长安街1号东方广场W3座</address>
<telephone>(010)85181650</telephone>
<uid>24d05508ea8ccbd2128824de</uid>
</result>
<result>
<name>中国工商银行新东安支行</name>
<location>
<lat>39.919304</lat>
<lng>116.417906</lng>
</location>
<address>北京市东城区王府井大街138号一层</address>
<telephone>010-65256818</telephone>
<uid>8e96d243973dc4bfc51b75e5</uid>
</result>
<result>
<name>中国工商银行北京王府井金街支行</name>
<location>
<lat>39.921006</lat>
<lng>116.417403</lng>
</location>
<address>北京市市辖区东城区北京市东城区王府井大街237号</address>
<telephone>(010)65246520</telephone>
<uid>7d5f3a0afc6a944b2cb908c9</uid>
</result>
</results>
</PlaceSearchResponse>
http://api.map.baidu.com/lbsapi/staticmap/staticmap-helper.html
4、下面是demo:获取用户定位信息
- //地理位置纬度
- location_X</span><span> = </span><span class="vars">xmlArr[‘Location_X’];
- //地理位置经度
- location_Y</span><span> = </span><span class="vars">xmlArr[‘Location_Y’];
//地理位置纬度
$location_X = $xmlArr['Location_X'];
//地理位置经度
$location_Y = $xmlArr['Location_Y'];
5、调用百度接口,并设置接收数据为json格式,进行json字符串编码
- //百度圆形区域地图调用接口
- strUrl</span><span> = </span><span class="string">"http://api.map.baidu.com/place/v2/search?&query="</span><span>.</span><span class="vars">forName.“&location=”. locationX</span><span>.</span><spanclass="string">","</span><span>.</span><spanclass="vars"> location_Y.“&radius=1500&output=json&ak=ekpxLUyfp8Lv7W1gdj57Oji6”;
- //接受json数据
- jsonStr</span><span> = </span><span class="func">file_get_contents</span><span>(</span><span class="vars">strUrl);
- //进行json字符串编码
- jsonArr</span><span> = json_decode(</span><span class="vars">jsonStr,TRUE);
//百度圆形区域地图调用接口
$strUrl = "http://api.map.baidu.com/place/v2/search?&query=".$forName."&location=".$location_X.",".$location_Y."&radius=1500&output=json&ak=ekpxLUyfp8Lv7W1gdj57Oji6";
//接受json数据
$jsonStr = file_get_contents($strUrl);
//进行json字符串编码
$jsonArr = json_decode($jsonStr,TRUE);
6、生成静态地图图片,获取该图片的二进制编码,将图片保存在服务器
- //获取百度地图生成图片
- pic_640</span><span> = </span><span class="string">"http://api.map.baidu.com/staticimage?width=640&height=320¢er="</span><span>.</span><span class="vars">location_Y.“,”.location_X</span><span>.</span><span class="string">"&zoom=13&markers="</span><span>.</span><span class="vars">location_Y.“,”.location_X</span><span>.</span><span class="string">"&markerStyles=l,"</span><span>; </span></span></li><li class="alt"><span> </span></li><li class=""><span> <span class="vars">pic_80 = “http://api.map.baidu.com/staticimage?width=80&height=80¢er=”. locationY</span><span>.</span><spanclass="string">","</span><span>.</span><spanclass="vars"> location_X.“&zoom=13&markers=”. locationY</span><span>.</span><spanclass="string">","</span><span>.</span><spanclass="vars"> location_X.“&markerStyles=l,”;
- //获取图片的二进制编码
- p_640</span><span> = </span><span class="func">file_get_contents</span><span>(</span><span class="vars">pic_640);
- file_put_contents(“./images/640_”. xmlArr</span><span>[</span><spanclass="string">′FromUserName′</span><span>].</span><spanclass="string">".png"</span><span>,</span><spanclass="vars"> p_640);
- p_80</span><span> = </span><span class="func">file_get_contents</span><span>(</span><span class="vars">pic_80);
- file_put_contents(“./images/80_”. xmlArr</span><span>[</span><spanclass="string">′FromUserName′</span><span>].</span><spanclass="string">".png"</span><span>,</span><spanclass="vars"> p_80);
//获取百度地图生成图片
$pic_640 = "http://api.map.baidu.com/staticimage?width=640&height=320¢er=".$location_Y.",".$location_X."&zoom=13&markers=".$location_Y.",".$location_X."&markerStyles=l,";
$pic_80 = "http://api.map.baidu.com/staticimage?width=80&height=80¢er=".$location_Y.",".$location_X."&zoom=13&markers=".$location_Y.",".$location_X."&markerStyles=l,";
//获取图片的二进制编码
$p_640 = file_get_contents($pic_640);
file_put_contents("./images/640_".$xmlArr['FromUserName'].".png",$p_640);
$p_80 = file_get_contents($pic_80);
file_put_contents("./images/80_".$xmlArr['FromUserName'].".png",$p_80);
7、组装成xml字符串,返回给用户
- xmlPic</span><span> = "<xml> </span></span></li><li class=""><span> <ToUserName><![CDATA[<span class="string">".xmlArr[‘FromUserName’].”]]></ToUserName>
- <FromUserName><![CDATA[”.xmlArr['ToUserName']."</span><span>]]></FromUserName> </span></span></li><li class=""><span> <CreateTime><span class="string">".time()."</span><span></CreateTime> </span></span></li><li class="alt"><span> <MsgType><![CDATA[news]]></MsgType> </span></li><li class=""><span> <ArticleCount><span class="string">".count(arr).”</ArticleCount>
- <Articles>”;
- //遍历地理位置信息
- foreach(arr</span><span> </span><span class="keyword">as</span><span> </span><span class="vars">key => val</span><span>) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="keyword">if</span><span>(</span><span class="vars">$key</span><span> == 0) </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="vars">$picUrl</span><span> = </span><span class="string">"http://weixin.duapp.com/images/640_"</span><span>.</span><span class="vars">$xmlArr</span><span>[</span><span class="string">'FromUserName'</span><span>].</span><span class="string">".png"</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> <span class="keyword">else</span><span> </span></span></li><li class="alt"><span> { </span></li><li class=""><span> <span class="vars">$picUrl</span><span> = </span><span class="string">"http://weixin.duapp.com/images/80_"</span><span>.</span><span class="vars">$xmlArr</span><span>[</span><span class="string">'FromUserName'</span><span>].</span><span class="string">".png"</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="vars">$xmlPic</span><span> .="<item> </span></span></li><li class=""><span> <Title><![CDATA[<span class="string">".$val['name']."</span><span> 地址:</span><span class="string">".$val['address']."</span><span> 电话:</span><span class="string">".$val['telephone']."</span><span>]]></Title> </span></span></li><li class="alt"><span> <Description><![CDATA[<span class="string">".$val['name']."</span><span> 地址:</span><span class="string">".$val['address']."</span><span> 电话:</span><span class="string">".$val['telephone']."</span><span>]]></Description> </span></span></li><li class=""><span> <PicUrl><![CDATA[<span class="string">".$picUrl."</span><span>]]></PicUrl> </span></span></li><li class="alt"><span> <Url><![CDATA[http:<span class="comment">//api.map.baidu.com/place/detail?uid=".$val['uid']."&output=html&src=".$val['name']."&output=html]]></Url></span><span> </span></span></li><li class=""><span> </item>"; </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="vars">xmlPic .= “ </Articles></xml>”;
- echo xmlPic</span><span>; </span></span></li></ol><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre code_snippet_id="250709" snippet_file_name="blog_20140322_5_833268" name="code" class="php" style="display: none;">xmlPic = “<xml> <ToUserName><![CDATA[“.
xmlArr[‘FromUserName′].”]]></ToUserName><FromUserName><![CDATA[“.
xmlArr[‘ToUserName’].”]]></FromUserName> <CreateTime>”.time().”</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>”.count(
arr).”</ArticleCount><Articles>”;//遍历地理位置信息foreach(
arr as
key=>
val) { if(
key==0)$picUrl="http://weixin.duapp.com/images/640′′.$xmlArr[‘FromUserName′].”.png”;else$picUrl="http://weixin.duapp.com/images/80′′.$xmlArr[‘FromUserName′].”.png”;
xmlPic .=”<item> <Title><![CDATA[“.
val[′name′]."地址:".
val[‘address’].” 电话:”.
val[‘telephone′].”]]></Title><Description><![CDATA[“.
val['name']." 地址:".
val[‘address′].”电话:”.
val[‘telephone’].”]]></Description> <PicUrl><![CDATA[“.
picUrl.”]]></PicUrl><Url><![CDATA[http://api.map.baidu.com/place/detail?uid=”.
val['uid']."&output=html&src=".val[‘name’].”&output=html]]></Url>
</item>”;
}xmlPic .= ” </Articles></xml>”; echo $xmlPic;
8、事例样式图片:
特此分享,如有错误,欢迎大家指出,嘿嘿~~~
(完)