通过某位置的经纬度获取周边百度地图POI的信息

通过某位置的经纬度获取周边百度地图POI的信息:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<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 : 1             //最多只有12个 系统决定的
    }
    var ponits_=[];//经纬度和地址信息
    myGeo.getLocation(mPoint,
        function mCallback(rs){
            var allPois = rs.surroundingPois; //获取全部POI(半径R的范围 最多12个点)
            console.log(allPois);
            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进行升序排列后的数组
            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>

 

 

 

原文参考点击打开链接

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用Python获取百度地图POI数据,可以使用百度地图API提供的web服务来实现。首先,你需要申请一个百度开发者账号,并创建一个应用程序以获取访问API的密钥。 接下来,你可以使用Python中的requests库来发送HTTP请求并获取百度地图POI数据。首先,你需要构建一个HTTP请求URL,包括你的密钥和其他必需的参数,比如城市、关键词等。然后,发送GET请求到百度地图API,并获取返回的JSON数据。 下面是一个示例代码,演示如何使用Python获取百度地图POI数据: ```python import requests # 设置百度地图API的密钥和其他参数 api_key = "你的密钥" city = "北京市" keyword = "餐厅" # 构建HTTP请求URL url = f"http://api.map.baidu.com/place/v2/search?query={keyword}&region={city}&output=json&ak={api_key}" # 发送GET请求并获取返回的数据 response = requests.get(url) data = response.json() # 处理返回的数据 if data["status"] == 0: # 输出POI数据 for poi in data["results"]: print(poi["name"], poi["address"], poi["telephone"]) else: print("获取POI数据失败") ``` 在这个示例代码中,我们使用了requests库来发送GET请求并获取返回的JSON数据。然后,我们可以通过解析JSON数据来提取感兴趣的POI信息,比如名称、地址和电话号码。 需要注意的是,在构建HTTP请求URL时,我们使用了f-string来方便地将参数插入URL中。此外,你还需要根据你的需求来调整代码中的其他参数,比如城市和关键词。 这只是一个简单的示例,你可以根据自己的需求来扩展和优化代码。希望这个答案能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mickey_于浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值