微信公众号最佳实践 ( 4.7)获取用户地理位置
程序员文章站
2024-03-16 23:35:46
...
开通了上报地理位置接口的微信公众号,在用户关注并进入微信公众号回话时,会弹框让用户确认是否允许微信公众号使用其地理位置。弹框只在关注后出现一次,用户以后可以在微信公众号详情页面进行操作。
本章代码还需测试
4.7.1 获取用户地理位置的方式
有两种:
- 一种是仅在进入会话时上报一次
- 一种是进入会话后每隔5秒上报一次
推送地理位置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>
4.7.2 转换坐标到地址
目前国内外主要有以下几种不同形式的坐标体系:
-
WGS-84坐标系:是一种国际上采用的
地心坐标系
,目前GPS
所采用的坐标系统 - GCJ-0是由中国国家测绘局制定的地理信息系统的坐标系统:是一种对经纬度数据进行加密算法,即加入随机的偏差,也俗称“火星坐标系”
- 百度坐标系统是百度公司的地图坐标系统:它在国家测绘局的GJC-02的基础上,进行了BD-09二次加密,更加保护个人隐私。
微信公众号
地理坐标接口
支持上述三种坐标系的坐标
百度地图API 服务地址接口为:
http://api.map.baidu.com/geocoder/v2/
例如:
http://api.map.baidu.com/geocoder/v2/?ak=B944e1fce373e33ea4627f95f54f2ef9&location=$object->Latitude,$object->Longitude&output=json&coordtype=gcj02ll
执行后返回结果如下:
获取用户地理位置
示例代码如下:
4.7.3 用户地理位置的意义
- 获得用户的地理位置能够帮助企业更加了解他们的用户
- 根据位置数据能够了解用户在什么时候,什么地方有什么样的生活习惯,并且追踪群发事件的效果
- 位置数据分析功能能够预测用户的行为,从而为公司的经营策越制定提供依据
- 但这只是移动位置数据分析的冰山一角,以后可能也许能够知道用户在做什么,在想什么,以及更多。
<?php
private function receiveEvent($object)
{
$contentStr = "";
switch ($object->Event)
{
case "subscribe":
$contentStr = "欢迎关注".(isset($object->EventKey)?("\n场景 ".$object->EventKey):"");
break;
case "unsubscribe":
$contentStr = "取消关注";
break;
case "LOCATION":
$url = "http://api.map.baidu.com/geocoder/v2/?ak=B944e1fce373e33ea4627f95f54f2ef9&location=$object->Latitude,$object->Longitude&output=json&coordtype=gcj02ll";
$output = file_get_contents($url);
$address = json_decode($output, true);
$contentStr = "位置 ".$address["result"]["addressComponent"]["province"]." ".$address["result"]["addressComponent"]["city"]." ".$address["result"]["addressComponent"]["district"]." ".$address["result"]["addressComponent"]["street"];
break;
default:
break;
}
$resultStr = $this->transmitText($object, $contentStr);
return $resultStr;
}
?>
上一篇: npm全局环境变量配置
下一篇: 1.8 封装、继承、多态