微信和h5原生方法都提供了获取用户地理位置的方法,需要使用第三方的逆地理编码的方式获得用户的实际位置信息。
1、H5方法
H5的新特性中加入了获取地理位置的方法window.navigator.geolocation,使用该方法我们可以方便的获取用户的地理位置,在通过第三方的逆地理编码的方法可以获得用户所在的实际位置。我用的是百度地图的web API,需要使用者在百度地图的开发者平台上申请一个KEY,
var startGps=function (){ if(window.navigator.geolocation){ window.navigator.geolocation.getCurrentPosition(getSuccess,getError); }else{ $rootScope.SelectPayCityName = "北京市"; } };2、微信公众平台var getSuccess=function(position){var latlon = position.coords.latitude+','+position.coords.longitude;//baiduvar url = "https://api.map.baidu.com/geocoder/v2/?ak=&callback=renderReverse&location="+$scope.latlon+"&output=json&pois=0";$.ajax({ type: "GET", dataType: "jsonp", url: $scope.url , success: function (data) { if(data.status==0){var SelectPayCityName=data.result.addressComponent.city;}else{var SelectPayCityName = "北京市";} }, error: function (data) {var SelectPayCityName = "北京市"} });};var getError=function(){var SelectPayCityName = "北京市";};
微信直接提供了获取用户的地理位置的方法,需要我们在wx,cofig()中获取调用的权限
wx.config({ debug : false, appId : apiData.appid, timestamp : apiData.timestamp, nonceStr : apiData.noncestr, signature : apiData.signNature, jsApiList : ['scanQRCode','closeWindow','chooseWXPay','getLocation'] });获得权限后我们就可以直接使用wx.getLocation()方法获得用户的地理位置了。
var getCityName=function(){ wx.getLocation({ "type": 'wgs84', "success": function (res) {var latitude = res.latitude; // 纬度,var longitude = res.longitude; //精度 //百度地图逆地理编码 var url = "https://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location="+latitude+','+longitude+"&output=json&ak=4Dfl9xwPGejMePRRzASXZAoIznQY7fe2"; $.ajax({ type: "GET", dataType: "jsonp", url:url , success: function (data) { if(data.status==0){ var SelectPayCityName=data.result.addressComponent.city; }else{ var SelectPayCityName = "北京市"; } }, error: function (data) { var SelectPayCityName = "北京市"; } }) }, "cancel":function(res){ var SelectPayCityName = "北京市"; } });}