微信和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 = "北京市"; } };
var getSuccess=function(position){
var latlon = position.coords.latitude+','+position.coords.longitude;//baidu
var 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 = "北京市";}; 2、微信公众平台
微信直接提供了获取用户的地理位置的方法,需要我们在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 = " 北京市 " ; } } ) ;}