欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微信公众号最佳实践 ( 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)获取用户地理位置

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)获取用户地理位置

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

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

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

?>