通过微信获取当前地理位置,然后将其存到session中。

首先,在静态页面中,添加微信的配置文件,通过js获取。

<script type="text/javascript">

  wx.config({

    debug: false,

    appId: \'{$signPackage.appId}\',

    timestamp: \'{$signPackage.timestamp}\',

    nonceStr: \'{$signPackage.nonceStr}\',

    signature: \'{$signPackage.signature}\',

    jsApiList: [

      // 所有要调用的 API 都要加到这个列表中

      \'checkJsApi\',

      \'openLocation\',

       \'getLocation\',

       \'scanQRCode\'

    ]

  });

  wx.ready(function () {

    $(\'#scan\').click(function(){

      wx.scanQRCode({

        needResult: 0,

         });

       });

    wx.checkJsApi({

       jsApiList: [

         \'getLocation\'

      ],

      success: function (res) {

        if (res.checkResult.getLocation == false)

        {

          alert(\'你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!\');

           return;

        }

      }

    });

    wx.getLocation({

      success: function (res) {

           var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90

        var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。

        var geoconv = \'http://api.map.baidu.com/geoconv/v1/?callback=coordinateTransformation&coords=\' + longitude + \',\' + latitude + \'&from=1&to=5&ak=5BFNbSgnVF5g2O72NpvTDxFm\';

        var script = document.createElement(\'script\');

        script.src = geoconv;

        document.head.appendChild(script);

       },

      cancel: function (res) {

        alert(\'用户拒绝授权获取地理位置\');

         }

     });

  });

  function coordinateTransformation(data)

  {

    var LATLNG = data.result[0].y + \',\' + data.result[0].x;

    var url = \'http://api.map.baidu.com/geocoder/v2/?callback=getCurrentLocation&ak=5BFNbSgnVF5g2O72NpvTDxFm&location=\' + LATLNG + \'&output=json&pois=1\';

    var script = document.createElement(\'script\');

    script.src = url;

    document.head.appendChild(script);

   }

  function getCurrentLocation(data)

  {

    if(data.status === 0)

     {

      var address = data.result.formatted_address,

      x = data.result.location.lng,

         y = data.result.location.lat,

      city = data.result.addressComponent.city,

      street = data.result.addressComponent.street || data.result.formatted_address,

      reqData = \'street=\' + address + \'&name=\' + street + \'&lng=\' + x + \'&lat=\' + y + \'&city=\' + city;

      var url = "{:U(\'Index/savePosition\')}";

       $.getJSON(url,{\'name\':street,\'lng\':x,\'lat\': y,\'city\':city},function(data)

       {

         if(data.returnCode) { }

      });

     }

   }

</script>

其次,在控制器中接收ajax传递的地理坐标,然后保存到session中。

public function savePosition()
{
  $city   = II(\'get.city\',\'\',\'trim\');
  $addr = II(\'get.name\',\'\',\'trim\');
  $lng   = II(\'get.lng\',\'\',\'trim\');
  $lat    = II(\'get.lat\',\'\',\'trim\');

  $myLocation = array(
    \'city\'   =>$city,
    \'addr\' =>$addr,
    \'lng\'   =>$lng,
    \'lat\'   =>$lat,
  );

  $_SESSION[\'MyLocation\'] = $myLocation;


  $data[\'returnCode\'] = 1;
  $data[\'returnInfo\'] = \'获取位置成功!\';
  $this->ajaxReturn($data);
  return;
}

注:用的是thinkphp框架,II是自定义的方法,获取get或post传递的值,和 I 函数一样。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxfp.html