一、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开发应用会有所帮助。