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