您的位置:首页 > 其它

百度地图,根据地图上任意一点的经纬度获取周边最近的POI位置信息

2015-04-17 10:31 561 查看
<!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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐