最近在项目中用到了地图,包含了移动标注修改坐标位置,点击标注弹出提示框等等功能,在这里我就对百度地图的一个简单运用进行分享一下:
1.首先加载百度地图JS,在引用的时候需要用到自己的百度地图ak秘钥,这里我就用*号代替我的秘钥的显示了,各位使用自己的秘钥ak,具体如何生成秘钥ak,详情见百度地图 JavaScriptAPI----->获取秘钥。这里的秘钥指的就是ak码,具体如下:
// 加载百度地图js var script = document.createElement("script"); script.src = "http://api.map.baidu.com/api?v=2.0&ak=***************" + "*********"; //这种方式为v2.0版本的引用方式 document.body.appendChild(script);
2.创建一个地图实例(在创建地图实例的时候,如果报BMap is not defined的话,则证明百度地图的JS还没有加载完成,创建地图实例需要加一个延时setTimeout,当然,也有可能是网络状态不佳):
var mapParam.map = new BMap.Map("baiduMap",{enableMapClick: false});
其中的参数baiduMap是显示地图的dom节点的id,
<div id="baiduMap"></div>
第二个参数enableMapClisk设置为false,意味着当你点击地图上的某个覆盖物时(地铁、公交站,地区等等),不会出现公交、驾驶、等的线路规划窗口,如果不传该参数,默认是能查看线路规划窗口的
3. 设置地图的中心点坐标
point的参数分别为经度和纬度,centerAndZoom的两个参数,第一个参数是创建的点的坐标。第二个参数是设置地图的缩放级别。然后使用maker方法创建标注,当打开地图时。就能看到标注了
var point = new BMap.Point(longitude, mData.latitude); // 创建点坐标
mapParam.map.centerAndZoom(point, 18); // 初始化地图,设置中心点坐标和地图级别var marker= new BMap.Marker(point); // 创建标注
mapParam.map.addOverlay(marker); // 将标注添加到地图中
完成上面这三步我们就可以得到一个简单的地图了。这时候我们可以根据我们所需要的功能进行补全:
例:拖拽标注
enableDragging方法和disableDragging方法是两个对立的方法,enableDragging是设置标注可拖动(这常常用来进行拖动定位,在地图上标注出新的位置),disableDragging是用来设置禁止拖动标注的(这一般仅仅只用作位置的标注),enableScrollWheelZoom方法是用来设置鼠标缩放地图的。
marker.enableDragging(); //可拖 map.addOverlay(marker); // 将标注添加到地图中 map.enableScrollWheelZoom(true); // 鼠标缩放 // map.disableDragging(); //禁止拖拽
例:监听标注的拖拽
marker.addEventListener("onmouseup", function() { var p = marker.getPosition(); //获取marker的位置 mapParam.longitude = p.lng; mapParam.latitude = p.lat; //根据经纬度获得对应的地址 var point = new BMap.Point(p.lng, p.lat); var gc = new BMap.Geocoder(); gc.getLocation(point, function(rs) { var addComp = rs.addressComponents; mapParam.address = addComp.province+addComp.city + addComp.district + addComp.street + addComp.streetNumber; }); });
例:给标注添加click事件
marker.addEventListener("click", function () { //事件内容 });
例:自定义标注图标
BMap.Icon 的四个参数,第一个参数是图标的位置(如果有多个图标,则使用循环进行设置图标),点击查看默认的百度地图标注,可以做一组自定义的图标,图标的size和图标的大小成比例的,anhor参数是用于设置标注图标停靠的位置,在2.0之前的版本使用的是offset,imageOffset是用来设置图标的偏移量的,
var myIcon = new BMap.Icon("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), { anchor: new BMap.Size(0, 0), imageOffset: new BMap.Size(0, 0 - 10* 25) }); marker = new BMap.Marker(point, { icon: myIcon }); mapParam.map.addOverlay(marker);
例:点击标注弹出信息框
openInfoWindow方法是用来打开提示窗口的,一般用在标注的click事件里,可以自己修改默认的一些样式,这就看个人怎么定制了
//pop弹窗标题 var title = '<div style="font-weight:bold;color:#CE5521;font-size:14px">' + title + '</div>'; //pop弹窗信息 var html = []; html.push('<table cellspacing="0" style="table-layout:fixed;width:100%;' + 'font:12px arial,simsun,sans-serif"><tbody>'); html.push('<tr>'); html.push('<td style="vertical-align:top;line-height:16px;width:38px;' + 'white-space:nowrap;word-break:keep-all">地址:</td>'); html.push('<td style="vertical-align:top;line-height:16px">'+address+ ' </td>'); html.push('</tr>'); html.push('</tbody></table>'); var infoWindow = new BMap.InfoWindow(html.join(""),{ title: title, width:200}) marker.openInfoWindow(infoWindow);})
例:地址解析(根据地址解析当前地址的经纬度,可以批量解析)
//根据省市区对地址进行解析 var latitude = ''; var longitude = ''; var myGeo = new BMap.Geocoder(); var address = '深圳市图书馆' //可以批量解析,只需要把地址放进数组里即可 var addressArray = [address]; myGeo.getPoint(addressArray, function (point) { latitude = point.lat; longitude = point.lng; }, "全国");;
百度地图还有很多用法,我在这里就不一一叙述了,如果有其它的特性不会用,或者有不明白的朋友欢迎评论留言,大家一起共同探讨