百度离线地图 教程

添加点标注

编辑时间:2017-03-02

3.jpg

标注

标注表示地图上的点。API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。Marker的构造函数的参数为Point和MarkerOptions(可选)。注意:当您使用自定义图标时,标注的地理坐标点将位于标注所用图标的中心位置,您可通过Icon的offset属性修改标定位置。

下面的示例向地图中心点添加了一个标注,并使用默认的标注样式。

var map = new BMap.Map("container");   

var point = new BMap.Point(116.404, 39.915);   

map.centerAndZoom(point, 15);   

var marker = new BMap.Marker(point);        // 创建标注   

map.addOverlay(marker);                     // 将标注添加到地图中

定义标注图标

通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置,您也可以使用marker.setIcon()方法。

var map = new BMap.Map("container");   

var point = new BMap.Point(116.404, 39.915);   

map.centerAndZoom(point, 15);  // 编写自定义函数,创建标注  

function addMarker(point, index){  // 创建图标对象  

var myIcon = new BMap.Icon("markers.png", new BMap.Size(23, 25), {   

// 指定定位位置。  

// 当标注显示在地图上时,其所指向的地理位置距离图标左上   

// 角各偏移10像素和25像素。您可以看到在本例中该位置即是  

   // 图标中央下端的尖角位置。   

   offset: new BMap.Size(10, 25),   

   // 设置图片偏移。  

   // 当您需要从一幅较大的图片中截取某部分作为标注图标时,您  

   // 需要指定大图的偏移位置,此做法与css sprites技术类似。   

   imageOffset: new BMap.Size(0, 0 - index * 25)   // 设置图片偏移   

 });     

// 创建标注对象并添加到地图  

 var marker = new BMap.Marker(point, {icon: myIcon});   

 map.addOverlay(marker);    

}   

// 随机向地图添加10个标注   

var bounds = map.getBounds();   

var lngSpan = bounds.maxX - bounds.minX;   

var latSpan = bounds.maxY - bounds.minY;   

for (var i = 0; i < 10; i ++) {   

 var point = new BMap.Point(bounds.minX + lngSpan * (Math.random() * 0.7 + 0.15),   

                            bounds.minY + latSpan * (Math.random() * 0.7 + 0.15));   

 addMarker(point, i);   

}

监听标注事件

事件方法与Map事件机制相同。可参考事件部分。

marker.addEventListener("click", function(){   

 alert("您点击了标注");   

});

可托拽的标注

marker的enableDragging和disableDragging方法可用来开启和关闭标注的拖拽功能。默认情况下标注不支持拖拽,您需要调用marker.enableDragging()方法来开启拖拽功能。在标注开启拖拽功能后,您可以监听标注的dragend事件来捕获拖拽后标注的最新位置。

marker.enableDragging();   

marker.addEventListener("dragend", function(e){   

 alert("当前位置:" + e.point.lng + ", " + e.point.lat);   

})


标注弹跳动画

<script type="text/javascript">
       
// 百度地图API功能
    
var map = new BMap.Map("allmap");
       
var point = new BMap.Point(116.404, 39.915);
       
map.centerAndZoom(point, 15);
       
var marker = new BMap.Marker(point)// 创建标注
    
map.addOverlay(marker);               // 将标注添加到地图中
    
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
</script>


设置标注是否可以拖拽

<script type="text/javascript">
    //
百度地图API功能
   
var map = new BMap.Map("allmap");
    var point = new BMap.Point(116.404, 39.915);
    map.centerAndZoom(point, 15);
    var marker = new BMap.Marker(point);  //
创建标注
   
map.addOverlay(marker);               // 将标注添加到地图中
   
marker.disableDragging();           // 默认不可拖拽
   
// marker.enableDragging(); // 设置可拖拽
</script>


内存释放

在API 1.0版本中,如果您需要在地图中反复添加大量的标注,这可能会占用较多的内存资源。如果您的标注在移除后不再使用,可调用Overlay.dispose()方法来释放内存。注意在1.0版本中,调用此方法后标注将不能再次添加到地图上。自1.1版本开始,您不在需要使用此方法来释放内存资源,API会自动帮助您完成此工作。

例如,您可以在标注被移除后调用此方法:

map.removeOverlay(marker);   

marker.dispose(); // 1.1 版本不需要这样调用