前段时间,因为项目需求,用到了百度地图的一些功能,总结一下:
1. 判断地图是否加载完毕事件;
2. 获取可视区域的坐标点;
3. 标点并判断标点所属城市;
4. 百度地图关键字搜索功能;
5. 连续标点并实现测距功能。
判断地图是否加载完毕事件:
有时候,我们希望在地图正在加载过程中时,不要处理某些事,而是在地图加载完毕之后再处理,这时候即可用到此事件:
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
map.addEventListener("tilesloaded",function(){
});
获取可视区域的坐标点
比如,有很多个坐标点需要加载,如果一次性加载出来肯定就很慢,我们可以考虑只加载当前可视区域里需要加载的坐标点,非可视区域的不加载。
如图所示:

使用map类的getBounds()方法即可获取可视区域信息,返回值是个类(Bounds)实例,返回类中可用的方法可查阅 百度地图API参考说明文档:Bounds。
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
map.addEventListener("tilesloaded",function(){
var bs,bssw,bsne;
bs = map.getBounds();
bssw = bs.getSouthWest();
bsne = bs.getNorthEast();
});
标点并判断标点所属城市
场景:在地图上标点时,只希望标注本城市内的点,非本城市的不希望标点,即为百度的逆地址解析功能。
百度地图API类参考说明文档:Geocoder 和 GeocoderResult
百度地图逆地址解析示例
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
var geoc = new BMap.Geocoder();
var city = '北京';
map.addEventListener("click", function(e){
var pt = e.point;
geoc.getLocation(pt, function(rs){
var add = rs.address;
var addComp = rs.addressComponents;
if(addComp.city != city){
alert('只能在本城市范围内标点');
return false;
}
});
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
百度地图关键字搜索功能
根据关键词搜索指定位置,并标点,有可返回多个搜索结果,下面实例只使用了第一个标点:
百度地图API类参考说明文档:LocalSearch 和 LocalSearchOptions
百度地图关键字检索示例
var keyword = document.getElementById('keyword').value;
if(!keyword) return false;
var local = new BMap.LocalSearch(map, {
renderOptions:{map: map},
pageCapacity:1,
onSearchComplete: function(results){
if (local.getStatus() == BMAP_STATUS_SUCCESS){
var objpoint=results.getPoi(0).point;
if(!objpoint){
alert("不能匹配到位置: " + keyword);
}else{
map.centerAndZoom(objpoint, 18);
map.addOverlay(new BMap.Marker(objpoint));
}
}
local.clearResults();
}
});
local.search(keyword,{forceLocal:true});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
连续标点并实现测距功能
该功能类似于地图的测距,但根据自己项目需要又会复杂一些,同时也用到了上面提到的一些功能,具体描述如下:
1. 点击“开始标点”按钮后,才能开始标点并测距;
2. 只能在本城市范围内标点,非本城市的不允许标点;
3. 每标一个点显示已标完的总距离(按米为单位计量),未标下一个点时,显示鼠标点与上一个点的距离;
4. 标点完一段,双击结束标点,点击“确认提交”后,弹框提示:“确定提交吗?”点取消,停留在当前页可继续标点,点确定,则保存标点;
5. 标点成功保存后,不刷新该页面,地图上显示该次标点的所有坐标点(红色图标表示已保存的标点,蓝色表示正在标点的),但不再显示测距时的直线和距离;
6. 再次加载该页面时,要在地图中展示保存过的标点,但只展示可视范围内的标点;
7. 百度地图默认比例尺设置为20米;
8. 提供搜索功能,方便定位要标点的位置;
9. 若比例尺缩放的较大,当前可视范围展示所有标点,加载也会很慢(标点比较多时),此种情况考虑只标部分点。

由于代码过多,放在git上了https://github.com/huohuanyu/mappoint。