您现在的位置: 365建站网 > 建站教程 > 微信公众平台开发 > 14.4.2获取用户坐标及地址

14.4.2获取用户坐标及地址

此节有 207 人学习过     参与评论

使用JS SDK获取用户地理位置坐标的代码如下:

 1 <?PHP
 2 require_once('wxjssdk.class.php');
 3 $weixin = new class_weixin();
 4 $signPackage = $weixin->GetSignPackage();
 5 ?>
 6 <!DOCTYPE HTML>
 7 <html>
 8 <head>
 9     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=1.0, user-scalable=no" />
11     <meta name="format-detection" content="telephone=no" />
12     <title>位置</title>
13     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
14     <link rel="stylesheet" href="http://demo.open.weixin.qq.com/jssdk/CSS/style.css">
15 </head>
16 <body ontouchstart="">
17 </body>
18 <script src="https://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
19 <script>
20     wx.config({
21         debug: false,
22         appId: '<?php echo $signPackage["appId"];?>',
23         timestamp: <?php echo $signPackage["timestamp"];?>,
24         nonceStr: '<?php echo $signPackage["nonceStr"];?>',
25         signature: '<?php echo $signPackage["signature"];?>',
26         jsApiList: [
27             'checkJsApi',
28             'openLocation',
29             'getLocation',
30           ]
31     });
32 
33     wx.ready(function () {
34         
35         //自动执行的
36         wx.checkJsApi({
37             jsApiList: [
38                 'getLocation',
39             ],
40             success: function (res) {
41             }
42         });
43     
44         //如果不支持则不会执行
45         wx.getLocation({
46             success: function (res) {
47                 alert(JSON.stringify(res));
48           },
49           cancel: function (res) {
50                 alert('用户拒绝授权获取地理位置');
51           }
52         });
53       
54     });
55 
56     wx.error(function (res) {
57         alert(res.errMsg);
58     });
59  </script>
60 </html>

获得坐标时的效果图如图14-3所示:

图14-3获取用户地理位置
获得坐标之后,一项重要的工作是将坐标转为地址。
我们先了解一下坐标体系的相关知识,目前国内外主要有以下几种不同的坐标体系。
 WGS-84坐标系(World Geodetic System一1984 Coordinate System)是一种国际上采用的地心坐标系。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH(国际时间服务机构)1984.O定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为1984年世界大地坐标系统。该坐标系统俗称为“地球坐标系”,即目前GPS所采用的坐标系统。
 GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。该坐标系统也俗称为“火星坐标系”。
 百度坐标系统是百度公司的地图坐标系统,它在国家测绘局的GCJ-02的基础上,进行了BD-09二次加密,更加保护个人隐私。同时,百度地图支持将WGS-84坐标和GCJ-02坐标转换成百度坐标。
当微信公众账号获取到用户地理位置坐标以后,一般需要将坐标转换成用户的真实所在地(省、市、区等信息),以便于更直观的理解以及进行用户数据分析。百度地图Geocoding API提供逆地址解析功能,即由经纬度信息得到地址信息,使用这一功能可以获得微信用户具体所在地。该接口支持上述三种坐标系统的坐标,在不同的坐标系统中,经纬度解析后的地址有一定的偏差。例如:“lat:22.539968,lng:113.954980”在百度坐标下解析的结果是“广东省深圳市南山区高新南七道2号”,而在GCJ-02坐标系下解析的结果为“广东省深圳市南山区深南大道9789-2”。
在微信JS SDK中,采用的是WGS-84坐标系统。当我们进行逆地址解析的时候,需要注意选择正确的坐标类型。
百度地图Geocoding API服务地址接口为:
http://api.map.baidu.com/geocoder/v2/
该接口的参数说明如表14-2所示:

表14-2 百度地图Geocoding API参数说明
该接口的一个请求示例如下:
http://api.map.baidu.com/geocoder/v2/?ak=B944e1fce373e33ea4627f95f54f2ef9&location=22.539968,113.954980&output=json&coordtype=gcj02ll
上述接口执行后,返回结果如下:

{
    "status": 0,
    "result": {
        "location": {
            "lng": 113.96151089462,
            "lat": 22.54572267759
        },
        "formatted_address": "广东省深圳市南山区深南大道9789-2",
        "business": "科技园,大冲,深圳湾",
        "addressComponent": {
            "city": "深圳市",
            "district": "南山区",
            "province": "广东省",
            "street": "深南大道",
            "street_number": "9789-2"
        },
        "cityCode": 340
    }
}

我们可以在微信中接收到用户地理位置事件的时候,把用户的坐标转换成国内的省市区地址,这样就能实时收集到很多用户的实际位置。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (207人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------
微信公众平台开发目录