微信js獲取地理位置


1.綁定域名

先登錄微信公眾平台進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。

備注:登錄后可在“開發者中心”查看對應的接口權限。

2.引入js文件

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=DD279b2a90afdf0ae7a3796787a0742e"></script>//地圖文件

3.獲取微信需要字段

 
         

var appId, //公眾號名稱,由商戶傳入
    timeStamp, //時間戳,自1970年以來的秒數
    nonceStr, //隨機串
    signature; //微信簽名方式

$.ajax({
                type : 'post',
                url : '../',
                dataType:'json', 
                success : function(data){ 
                        
                     //alert(JSON.stringify(data));
                        appId= data.appId; // 必填,公眾號的唯一標識
                        timeStamp= data.timeStamp; // 必填,生成簽名的時間戳
                        nonceStr= data.nonceStr; // 必填,生成簽名的隨機串
                        signature= data.signature;
                        
                        getLocation();//獲取地理位置                            
                    
                },
                beforeSend:function(){
                    
                },
                error:function(){
                    
                    alert('error');
                }
            });

4.調微信獲取地理位置接口(返回經、緯度值)

function getLocation(){
            
            /* 微信分享朋友圈 */
            wx.config({
                debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
                appId: appId, // 必填,公眾號的唯一標識
                timestamp: timeStamp, // 必填,生成簽名的時間戳
                nonceStr: nonceStr, // 必填,生成簽名的隨機串
                signature: signature,// 必填,簽名,見附錄1
                jsApiList: ["getLocation"] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
            });
            
            wx.ready(function(){
                //獲取地理位置
                wx.getLocation({
                    type: 'wgs84', // 默認為wgs84的gps坐標,如果要返回直接給openLocation用的火星坐標,可傳入'gcj02'
                    success: function (res) {
                        var latitude = res.latitude; // 緯度,浮點數,范圍為90 ~ -90
                        var longitude = res.longitude; // 經度,浮點數,范圍為180 ~ -180。
                        var speed = res.speed; // 速度,以米/每秒計
                        var accuracy = res.accuracy; // 位置精度
                        //alert('緯度'+latitude+" ;經度"+longitude);
                        //生成地理位置
                        var fname = '';
                        var point = new BMap.Point(longitude, latitude);
                        var geoc = new BMap.Geocoder();
                        geoc.getLocation(point, function(rs) {
                            var addComp = rs.addressComponents;
                            
                            //alert(addComp.province + ", "+addComp.city + ", "+addComp.district + ", "+addComp.street + ", "+addComp.streetNumber);
                            fname = addComp.district;
                            //alert('您現在所處位置:'+fname);
                            //抽獎--判斷地理位置 & 抽獎機會
                                
                            if(fname=='XX區'){
                                //執行
                            }else{
                                alert('本次活動目前向針對活動地區開放,其他地區敬請期待!');return;
                            }
                        });
                    },
                    fail:function(res){
                        alert("獲取位置失敗,檢查是否開啟定位服務");
                    }
                });
            });
            
            wx.error(function(res){
                console.log(res.errMsg);
            });
            
            wx.checkJsApi({
                jsApiList: ["getLocation"], // 需要檢測的JS接口列表,所有JS接口列表見附錄2,
                success: function(res) {
                    //alert('check success!')
                    // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
                }
            });
        }

 

5.根據徑、緯度獲取地理位置方法

/*
         * 根據經緯度獲取位置
         * param1:經度
         * param2:緯度
         */
        //獲取地理位置
       //var map = new BMap.Map("allmap");
            var point = new BMap.Point(lng, lat);
            //map.centerAndZoom(point, 12);
            var geoc = new BMap.Geocoder();
            geoc.getLocation(point, function(rs) {
                var addComp = rs.addressComponents;
                
                //alert(addComp.province + ", "+addComp.city + ", "+addComp.district + ", "+addComp.street + ", "+addComp.streetNumber);
                return addComp.district;
            });
        

 

6.常見問題

我在使用時把經緯度轉換地理位置寫成一個getAddress()方法,在wx.getLocation的成功回調是調用getAddress,發現我幾處彈框彈出的順序不對,沒有成功拿到getAddress的返回值。

所以使用時需要注意百度地圖的這個API是異步執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM