百度地图API之覆盖物和事件

来源:互联网 发布:出入无时 莫知其乡解释 编辑:程序博客网 时间:2024/05/18 01:04

前言

之前已经介绍了如何添加地图上一些控件,添加一些控件后就会实现一些常用的功能。具体请参考http://blog.csdn.net/u010989191/article/details/51326397。下面主要介绍如何添加覆盖物及给地图、地标等添加响应事件。

覆盖物相关API介绍

地图覆盖物概述

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、信息窗口等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
地图API提供了如下几种覆盖物:
Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法。
Marker:标注表示地图上的点,可自定义标注的图标。
Label:表示地图上的文本标注,您可以自定义标注的文本内容。
Polyline:表示地图上的折线。
Polygon:表示地图上的多边形。多边形类似于闭合的折线,另外您也可以为其添加填充颜色。
Circle: 表示地图上的圆。
InfoWindow:信息窗口也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。注意:同一时刻只能有一个信息窗口在地图上打开。
可以使用map.addOverlay方法向地图添加覆盖物,使用map.removeOverlay方法移除覆盖物,注意此方法不适用于InfoWindow。

添加默认标注

标注表示地图上的点。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.removeOverlay(marker);    marker.dispose(); // 1.1 版本不需要这样调用

可托拽的标注

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

marker.enableDragging();    marker.addEventListener("dragend", function(e){     alert("当前位置:" + e.point.lng + ", " + e.point.lat);    })

信息窗口

var opts = {     width : 250,     // 信息窗口宽度     height: 100,     // 信息窗口高度     title : "Hello"  // 信息窗口标题   }    var infoWindow = new BMap.InfoWindow("World", opts);  // 创建信息窗口对象    map.openInfoWindow(infoWindow, map.getCenter());      // 打开信息窗口

折线

Polyline表示地图上的折线覆盖物。它包含一组点,并将这些点连接起来形成折线。
添加折线
折线在地图上绘制为一系列直线段。可以自定义这些线段的颜色、粗细和透明度。颜色可以是十六进制数字形式(比如:#ff0000)或者是颜色关键字(比如:red)。
Polyline的绘制需要浏览器支持矢量绘制功能。在Internet Explorer中,地图使用VML绘制折线;在其他浏览器中使用SVG或者Canvas
以下代码段会在两点之间创建6像素宽的蓝色折线:

var polyline = new BMap.Polyline([       new BMap.Point(116.399, 39.910),       new BMap.Point(116.405, 39.920)     ],     {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}    );    map.addOverlay(polyline);

自定义覆盖物,请参考官网API:http://lbsyun.baidu.com/index.php?title=jspopular/guide/cover。

事件监听

百度地图API中的大部分对象都含有addEventListener方法,您可以通过该方法来监听对象事件。例如,BMap.Map包含click、dblclick等事件。在特定环境下这些事件会被触发,同时监听函数会得到相应的事件参数e,比如当用户点击地图时,e参数会包含鼠标所对应的地理位置point。
有关地图API对象的事件,请参考完整的API参考文档。
addEventListener方法有两个参数:监听的事件名称和事件触发时调用的函数。在下面示例中,每当用户点击地图时,会弹出一个警告框。

var map = new BMap.Map("container");    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    map.addEventListener("click", function(){     alert("您点击了地图。");    });

添加拖拽事件监听:

var map = new BMap.Map("container");    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    map.addEventListener("dragend", function(){     var center = map.getCenter();     alert("地图中心点变更为:" + center.lng + ", " + center.lat);    });

事件参数和this

在标准的DOM事件模型中(DOM Level 2 Events),监听函数会得到一个事件对象e,在e中可以获取有关该事件的信息。同时在监听函数中this会指向触发该事件的DOM元素。 百度地图API的事件模型与此类似,在事件监听函数中传递事件对象e,每个e参数至少包含事件类型(type)和触发该事件的对象(target)。 API还保证函数内的this指向触发(同时也是绑定)事件的API对象。
例如,通过参数e得到点击的经纬度坐标

var map = new BMap.Map("container");    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    map.addEventListener("click", function(e){     alert(e.point.lng + ", " + e.point.lat);    });

通过this得到地图缩放后的级别:

var map = new BMap.Map("container");    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    map.addEventListener("zoomend", function(){     alert("地图缩放至:" + this.getZoom() + "级");    });

移除监听事件

var map = new BMap.Map("container");    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    function showInfo(e){     alert(e.point.lng + ", " + e.point.lat);     map.removeEventListener("click", showInfo);    }    map.addEventListener("click", showInfo);

演示实例

<!DOCTYPE html><html><head>    <title>Hello world</title>    <script src="http://api.map.baidu.com/api?v=2.0&ak=DDd05fcba9fea5b83bf648515e04fc4c" type="text/javascript"></script></head><body><div align="center">    <!--<h3>以天安门为中心显示</h3>-->    <div id="tamMap" style="width:99%;height: 750px;"></div><!--onmousewheel="mScroll()"-->    <button onclick="zoomOut()">放大</button>    <button onclick="zoomIn()">缩小</button></div><script type="text/javascript">    var currentSize = 15;    var maxSize = 20;   //默认最大19级    var minSize = 2;    //默认最小3级    var step = 1;    var tamMap = new BMap.Map("tamMap");    //创建地图实例    var point = new BMap.Point(116.404,39.915); //创建坐标点    //往地图中添加控件    tamMap.addControl(new BMap.NavigationControl());    //地图平移缩放控件PC端默认位于地图左上方,它包含控制地图的平移和缩放的功能。移动端提供缩放控件,默认位于地图右下方。    tamMap.addControl(new BMap.OverviewMapControl());   //添加缩略地图控件,默认位于地图右下方,是一个可折叠的缩略地图。    tamMap.addControl(new BMap.ScaleControl());     //比例尺控件,默认位于地图左下方,显示地图的比例关系。    tamMap.addControl(new BMap.MapTypeControl());   //地图类型控件,默认位于地图右上方。    tamMap.addControl(new BMap.GeolocationControl());   //定位控件,针对移动端开发,默认位于地图左下方。    tamMap.addControl(new BMap.CopyrightControl());     //版权控件,默认位于地图左下方。    tamMap.centerAndZoom(point,currentSize);    //第二个参数越小表示缩小,越大则表示地图放大显示    //地图添加点击事件    tamMap.addEventListener("click",function(e){        // alert("当前位置:"+e.point.lng+","+e.point.lat);        tamMap.centerAndZoom(e.point,currentSize);  //将点击地方居中并放大显示    });    //创建一个默认的marker    var marker = new BMap.Marker(point);    tamMap.addOverlay(marker);    marker.enableDragging();    marker.addEventListener("dragend",function(e){        // alert("当前位置:"+e.point.lng+","+e.point.lat);        tamMap.centerAndZoom(e.point,currentSize);    });    //创建图标    var markerIcon = new BMap.Icon("./marker.png",new BMap.Size(23,25));    var marker2 = new BMap.Marker(point,{icon:markerIcon});    tamMap.addOverlay(marker2);    //marker添加监听事件    var m2 = 0;    marker2.addEventListener("click",function (){        alert("点击了标注..");        if(m2 == 1)        {            tamMap.removeOverlay(marker2);            return;        }        alert("再点击就会消失哦");        m2++;    });    // 添加缩放监听事件    tamMap.addEventListener("zoomend", function(){            alert("地图缩放至:" + this.getZoom() + "级");        });    //打开信息窗口    var opts = {             width : 250,     // 信息窗口宽度             height: 100,     // 信息窗口高度             title : "This is Tile"  // 信息窗口标题         } ;       var infoWindow = new BMap.InfoWindow("Content:this is main msg content", opts);  // 创建信息窗口对象        tamMap.openInfoWindow(infoWindow, tamMap.getCenter());      // 打开信息窗口    // 随机向地图添加10个标注        /*var bounds = tamMap.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);        }*/    //地图放大    function zoomOut()    {        currentSize = currentSize+step > maxSize? currentSize:currentSize+step;        tamMap.centerAndZoom(point,currentSize);        // alert(currentSize);    }    //地图缩小    function zoomIn()    {        currentSize = currentSize-step < minSize? currentSize:currentSize-step;        tamMap.centerAndZoom(point,currentSize);        // alert(currentSize);    }</script><span id="wheelData"></span></body></html>

运行结果

这里写图片描述

总结

本文主要介绍了给地图添加一些标注及响应事件等。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为p9手机gps信号弱怎么办 小米手机导航gps信号弱怎么办 安卓手机gps信号弱怎么办 苹果6导航gps信号弱怎么办 苹果6plus反应慢怎么办 手机文件打开是乱码怎么办 手机wps文件打开是乱码怎么办 腾讯视频vip账号被盗怎么办 附单据数错了 怎么办 橡胶的回弹性差怎么办 自己喷漆喷坏了怎么办 透明塑料磨花了怎么办 包包金属刮花了怎么办 鞋子刮了黑印子怎么办 黑色鞋跟磨白了怎么办 脚穿鞋子磨起泡怎么办 脚被鞋子磨红了怎么办 脚被鞋子磨黑了怎么办 白鞋皮鞋磨了皮怎么办 小脚趾磨肿了怎么办 穿鞋小拇指磨脚怎么办 高铁东西忘了怎么办 人故意去撞车死了怎么办? 新货车上户超重怎么办 车险出保单车号填错怎么办 货车拦板变形了怎么办 行车监控看不清楚车号怎么办? 1.5米的鱼缸要怎么办 被锤子砸到手了怎么办 家里地下污水管道堵塞怎么办 家里pvc灯罩变黄怎么办 欧普吸顶灯灯罩坏了怎么办 硬盘用久了变慢怎么办 地税申报工资人员弄错怎么办 买保险保单丢了怎么办 买保险的银行卡丢了怎么办 没学过JAVA入职怎么办 磨砂皮擦了鞋油怎么办 磨破皮伤口有沙子怎么办 工行信用卡被风险锁定了怎么办 超重被超限站查住以后怎么办