微信公众号最佳实践 ( 4.7)获取用户地理位置

开通了上报地理位置接口的微信公众号,在用户关注并进入微信公众号回话时,会弹框让用户确认是否允许微信公众号使用其地理位置。弹框只在关注后出现一次,用户以后可以在微信公众号详情页面进行操作。

本章代码还需测试

4.7.1 获取用户地理位置的方式

有两种:

  • 一种是仅在进入会话时上报一次
  • 一种是进入会话后每隔5秒上报一次

推送地理位置XML格式:

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

微信公众号最佳实践 ( 4.7)获取用户地理位置_第1张图片

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)获取用户地理位置_第2张图片

微信公众号最佳实践 ( 4.7)获取用户地理位置_第3张图片

获取用户地理位置 示例代码如下:

4.7.3 用户地理位置的意义

  • 获得用户的地理位置能够帮助企业更加了解他们的用户
  • 根据位置数据能够了解用户在什么时候,什么地方有什么样的生活习惯,并且追踪群发事件的效果
  • 位置数据分析功能能够预测用户的行为,从而为公司的经营策越制定提供依据
  • 但这只是移动位置数据分析的冰山一角,以后可能也许能够知道用户在做什么,在想什么,以及更多。

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;
}

?>

你可能感兴趣的:(微信公众号开发最佳实践)