百度地图POI用法介绍(POI检索功能)

一、POI的概念

POI(point of interest)即兴趣点,它是指在地图上标注的与用户相关的位置数据,如商家门店、公共场馆、交通枢纽等。在百度地图中,POI是用来描述地图上标注的各类信息,如名称、地址、电话、营业时间等。在地图API中,我们可以通过POI的坐标或关键词来搜索到相关的地理位置信息。

二、POI的搜索

在百度地图API中,我们可以通过关键词、分类、城市、中心点、半径等条件来搜索POI信息。具体的搜索方法参见以下代码:

function searchPOI(){
    var options = {
        onSearchComplete: function(results){
            //搜索完成后的回调函数
            if (local.getStatus() == BMAP_STATUS_SUCCESS){
                for (var i = 0; i < results.getCurrentNumPois(); i++){
                    //获取POI信息并展示
                    var poi = results.getPoi(i);
                    var name = poi.title;
                    var address = poi.address;
                    var tel = poi.phoneNumber;
                    //展示POI信息
                    showPOI(name, address, tel);
                }
            }
        }
    };
    var key = document.getElementById("keyword").value;
    local.search(key, options);
}

其中,local.search()表示发起搜索,options是搜索时的参数,onSearchComplete()是搜索完成后的回调函数,results表示搜索结果。

三、POI的展示

在百度地图API中,我们可以通过高德地图、谷歌地图等第三方地图来展示POI信息。以下是使用百度地图API展示POI信息的示例代码:

var map = new BMap.Map("mapContainer"); //创建地图实例
var point = new BMap.Point(116.404, 39.915); // 创建点坐标
map.centerAndZoom(point, 14); //初始化地图,设置中心点和缩放级别

//添加POI信息
function addPOI(name, address, tel, point){
    var infoWindow = new BMap.InfoWindow(name + "
地址:" + address + "
电话:" + tel); //创建信息窗口 var marker = new BMap.Marker(point); //创建标注 marker.addEventListener("click", function(){ this.openInfoWindow(infoWindow); //点击标注时显示信息窗口 }); map.addOverlay(marker); //将标注添加到地图中 } //展示POI信息 function showPOI(name, address, tel){ var options = { onSearchComplete: function(results){ //搜索完成后的回调函数 if (local.getStatus() == BMAP_STATUS_SUCCESS){ for (var i = 0; i < results.getCurrentNumPois(); i++){ //获取POI信息并展示 var poi = results.getPoi(i); var point = poi.point; addPOI(name, address, tel, point); } } } }; var key = name + " " + address; var local = new BMap.LocalSearch(map, options); local.search(key); }

四、POI的定位

在百度地图API中,我们可以通过获取用户当前位置来定位POI信息,以下是示例代码:

var map = new BMap.Map("mapContainer"); //创建地图实例
var point = new BMap.Point(116.404, 39.915); // 创建点坐标
map.centerAndZoom(point, 14); //初始化地图,设置中心点和缩放级别

//获取用户当前位置
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
    if(this.getStatus() == BMAP_STATUS_SUCCESS){
        var mk = new BMap.Marker(r.point);
        map.addOverlay(mk);
        map.panTo(r.point);
        //展示附近的POI信息
        showNearbyPOI(r.point);
    }
});

//展示附近的POI信息
function showNearbyPOI(point){
    var local = new BMap.LocalSearch(map, {
        onSearchComplete: function(results){
            //搜索完成后的回调函数
            if (local.getStatus() == BMAP_STATUS_SUCCESS){
                for (var i = 0; i < results.getCurrentNumPois(); i++){
                    //获取POI信息并展示
                    var poi = results.getPoi(i);
                    var name = poi.title;
                    var address = poi.address;
                    var tel = poi.phoneNumber;
                    var dist = map.getDistance(point, poi.point).toFixed(2); //计算距离
                    //展示POI信息
                    showPOI(name, address, tel, dist);
                }
            }
        }
    });
    var key = "景点";
    local.searchNearby(key, point, 2000); //搜索半径2000米内的景点
}

//展示POI信息
function showPOI(name, address, tel, dist){
    var options = {
        onSearchComplete: function(results){
            //搜索完成后的回调函数
            if (local.getStatus() == BMAP_STATUS_SUCCESS){
                for (var i = 0; i < results.getCurrentNumPois(); i++){
                    //获取POI信息并展示
                    var poi = results.getPoi(i);
                    var point = poi.point;
                    addPOI(name, address, tel, point);
                }
            }
        }
    };
    var key = name + " " + address;
    var local = new BMap.LocalSearch(map, options);
    local.search(key);
}

五、POI的逆地址解析

在百度地图API中,我们可以通过POI的坐标来实现逆地址解析,即将经纬度转化为地理位置信息。以下是使用百度地图API逆地址解析的示例代码:

var geoc = new BMap.Geocoder(); //创建地址解析器实例

//根据坐标获取地址
function getLocation(point){
    geoc.getLocation(point, function(rs){
        var addComp = rs.addressComponents;
        var address = addComp.city + addComp.district + addComp.street + addComp.streetNumber;
        //展示POI信息
        showPOI(name, address, tel, point);
    });
}

//展示POI信息
function showPOI(name, address, tel, point){
    var marker = new BMap.Marker(point); //创建标注
    marker.addEventListener("click", function(){
        var infoWindow = new BMap.InfoWindow(name + "
地址:" + address + "
电话:" + tel); //创建信息窗口 this.openInfoWindow(infoWindow); //点击标注时显示信息窗口 }); map.addOverlay(marker); //将标注添加到地图中 } //搜索POI信息并逆地址解析 function searchPOI(keyword){ var options = { onSearchComplete: function(results){ //搜索完成后的回调函数 if (local.getStatus() == BMAP_STATUS_SUCCESS){ for (var i = 0; i < results.getCurrentNumPois(); i++){ //获取POI信息并逆地址解析 var poi = results.getPoi(i); var name = poi.title; var tel = poi.phoneNumber; var point = poi.point; getLocation(point); } } } }; var local = new BMap.LocalSearch(map, options); local.search(keyword); }

六、POI的使用场景

POI信息在生活中有很多应用场景,以下是几个常见的场景:

1、地图导航:通过搜集POI信息,使得在驾车、步行、公交等导航模式下,可以方便地查找目的地。

2、旅游出行:通过搜索景点、餐厅、住宿等POI信息,规划旅游路线、查找旅游资源。

3、商业服务:通过搜索商家门店、超市、酒店等POI信息,提供商业服务、便民服务。

4、地理分析:通过POI信息对一个区域的商圈、交通等方面做分析,提供商业数据、交通分析和城市规划等服务。

七、总结

本文主要介绍了百度地图POI的概念、搜索、展示、定位、逆地址解析等方面,以及POI在地图导航、旅游出行、商业服务、地理分析等方面的应用场景。通过本文的学习,相信对使用百度地图API开发应用会有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平