1. 程式人生 > >百度地圖,根據地圖上任意一點的經緯度獲取周邊最近的POI位置資訊

百度地圖,根據地圖上任意一點的經緯度獲取周邊最近的POI位置資訊

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>根據地圖上任意一點的經緯度獲取周邊最近的POI位置資訊</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=FB14a133b9bf40fec90d36c84fb4dd13"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
</head>
<body>
<input type="button" onclick="getPOI();" value="確定" />
<div style="width:600px;height:340px;border:1px solid gray;" id="container"></div>
<div style="width:300px;height:340px;border:1px solid gray;border-left:0;" id="panel"></div>
</body>
</html>
<script type="text/javascript">
      //啟用滾輪縮放
    var map= new BMap.Map("container");
    var mPoint= new BMap.Point(104.0831760000, 30.6608250000);
    map.centerAndZoom(mPoint, 16);
function getPOI(){
    var ss=displayPOI(104.0831760000, 30.6608250000,1000);//根據需要自己傳經緯度
}
var myGeo = new BMap.Geocoder();    
function displayPOI(lng,lat,r){//引數:經lat、緯度lng、半徑r
    var mOption = {
        poiRadius : r,           //半徑為r米內的POI,
        numPois : 50             //最多隻有12個 系統決定的
    }
    var ponits_=[];//經緯度和地址資訊
    myGeo.getLocation(mPoint,
        function mCallback(rs){
            var allPois = rs.surroundingPois; //獲取全部POI(半徑R的範圍 最多12個點)
            if(allPois==null || allPois==""){
                return;
            }
            var disMile=[];//儲存周圍的點和指定點的距離
            for(i=0;i<allPois.length;i++){//計算得到的POI座標和指定座標的距離
                var pointA=new BMap.Point(allPois[i].point.lng,allPois[i].point.lat);
                disMile.push({'lng':allPois[i].point.lng,'lat':allPois[i].point.lat,'distance':map.getDistance(pointA, mPoint)}) ;
            }
            var result=arrBubble(disMile);//disMile進行升序排列後的陣列
            console.log(allPois);
            if(result!=null){
                if(result.length>=3){//獲取最多3個點  可以自己設定  但是最多就12個點
                    var k1=0;//去掉重複
                    var k2=0;
                    var k3=0;
                    for(var i=0;i<allPois.length;i++){
                        if(result[0].lng==allPois[i].point.lng && result[0].lat==allPois[i].point.lat && k1==0){
                            ponits_.push({'lng':result[0].lng,'lat':result[0].lat,'address':allPois[i].title});
                            k1++;
                           
                        }else if(result[1].lng==allPois[i].point.lng && result[1].lat==allPois[i].point.lat && k2==0){
                            ponits_.push({'lng':result[1].lng,'lat':result[1].lat,'address':allPois[i].title});
                             k2++;
                    
                        }else if(result[2].lng==allPois[i].point.lng && result[2].lat==allPois[i].point.lat && k3==0){
                            ponits_.push({'lng':result[2].lng,'lat':result[2].lat,'address':allPois[i].title});
                             k3++;
                        }
                    }
                }else if(result.length==2){
                    var k1=0;
                    var k2=0;
                   for(var i=0;i<allPois.length;i++){
                        if(result[0].lng==allPois[i].point.lng && result[0].lat==allPois[i].point.lat && k1==0){
                            ponits_.push({'lng':result[0].lng,'lat':result[0].lat,'address':allPois[i].title});
                            k1++;
                        }else if(result[1].lng==allPois[i].point.lng && result[1].lat==allPois[i].point.lat && k2==0){
                            ponits_.push({'lng':result[1].lng,'lat':result[1].lat,'address':allPois[i].title});
                            k2++;
                        }
                    }
                }else if(result.length==1){
                     var k1=0;
                   for(var i=0;i<allPois.length;i++){
                        if(result[0].lng==allPois[i].point.lng && result[0].lat==allPois[i].point.lat && k1==0){
                            ponits_.push({'lng':result[0].lng,'lat':result[0].lat,'address':allPois[i].title});
                            k1++;
                        }
                    }
                }
            }
            console.log(ponits_);
            if(ponits_!=null){//這裡的points_包含了所需的經緯度和地址資訊  具體操作自己設定
                for(var i=0;i<ponits_.length;i++){
                    var pt=new BMap.Point(ponits_[i].lng,ponits_[i].lat);
                    map.addOverlay(new BMap.Marker(pt));
                }
            }
            
        },mOption
    );          
}
//排序
function arrBubble(arr){
    for(var i=0;i<arr.length;i++){
        for(var j=0;j<arr.length-1;j++){
            if(arr[j+1].distance<arr[j].distance){
                 var temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
            }       
                
        }   
    }
    return arr;
}
</script>