百度地图API(三)
HTML
调用百度地图API,始终需要在html上展示,所以需要定义一个html来呈现地图,具体定义
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 6 <style type="text/css"> 7 body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;} 8 #l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;} 9 #r-result{height:100%;width:20%;float:left;} 10 </style> 11 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=XX"></script> 12 <script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script> 13 <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script> 14 <script type="text/javascript" src="api.js"></script> 15 <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" /> 16 <title>百度地图</title> 17 </head> 18 <body> 19 <div id="geo" style="display:none"></div> 20 <div id="lng" style="display:none"></div> 21 <div id="lat" style="display:none"></div> 22 <div id="allmap" ></div> 23 </body> 24 </html> 25 <script type="text/javascript"> 26 //显示一个地图 27 var map = new BMap.Map("allmap"); 28 map.addControl(new BMap.NavigationControl()); 29 map.addControl(new BMap.MapTypeControl()); 30 map.addControl(new BMap.ScaleControl()); 31 map.addControl(new BMap.OverviewMapControl()); 32 map.enableScrollWheelZoom(); 33 map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); 34 35 36 //地址的图标 37 var addrIcon = new BMap.Symbol(BMap_Symbol_SHAPE_POINT,{scale: 1,fillColor: "blue",fillOpacity: 0.8}); 38 39 //绑定鼠标单击事件 40 map.addEventListener("click", function(e) 41 { 42 document.getElementById("lng").innerText = e.point.lng; 43 document.getElementById("lat").innerText = e.point.lat; 44 map.enableScrollWheelZoom(); 45 }); 46 </script>
- 第一个script中ak是百度地图的密钥,需要申请账号才会有的,可以去百度官方申请一个,这是需要注意的
- 剩下的几个script是百度地图的样式和js文件
- body里面的div定义一个地理编码,经度,纬度,还有一个地图控件,还没有赋值
- 在最下面的script中,定义了一个BMap,然后在BMap上添加控件(对应MapControl中的AddControl方法)
- enableScrollWheelZoom方法是鼠标滚动轮放大缩小地图功能可用
- centerAndZoom方法是地图的中心和地图的尺寸,地图尺寸一共是18种
- addrIcon定义了一个地址的图标,一些百度地图上的图标定义,在js中是无效的,所以只能定义在html中
- 最后一个是鼠标的点击事件,给经度纬度赋值,并设鼠标滑动轮可用
API.js
首先,定义一些必要的公共变量
1 //*定义必要的公共变量 2 var maker;//标注对象 3 var distance;//测距对象 4 var drawingManager;//绘图对象 5 var drag;//拖框缩放对象 6 //绘制工具栏外观设定 7 var styleOptions = { 8 strokeColor: "red", //边线颜色。 9 fillColor: "red", //填充颜色。当参数为空时,圆形将没有填充效果。 10 strokeWeight: 3, //边线的宽度,以像素为单位。 11 strokeOpacity: 0.8, //边线透明度,取值范围0 - 1。 12 fillOpacity: 0.6, //填充的透明度,取值范围0 - 1。 13 strokeStyle: 'solid' //边线的样式,solid或dashed。 14 } 15 //* 16 //*结束16行//
以下这些是基本的方法,上面都有解释说明每个方法的作用
1 //*地图基础方法*// 2 //地图平移 3 function PanTo(lng, lat) 4 { 5 map.panTo(new BMap.Point(lng, lat)); 6 } 7 //返回当前地图中心坐标 8 function GetCenter() 9 { 10 document.getElementById("lng").innerText = map.getCenter().lng; 11 document.getElementById("lat").innerText =map.getCenter().lat; 12 } 13 //地图移到指定位置 14 function MoveMapTo(lng, lat, mapSize) 15 { 16 var point = new BMap.Point(lng, lat); 17 map.centerAndZoom(point, mapSize); 18 map.enableScrollWheelZoom(); 19 } 20 //设置当前地图所在城市 21 function SetCity(CityName) 22 { 23 map.setCenter(CityName); 24 } 25 //将地图放大一级 26 function ZoomIn() 27 { 28 map.zoomIn(); 29 } 30 //将地图缩小一级 31 function ZoomOut() { 32 map.zoomOut(); 33 } 34 //添加版权控件 35 function AddCopyrightControl() 36 { 37 map.addControl(new BMap.CopyrightControl()); 38 } 39 //添加地图类型控件 40 function AddMapTypeControl() 41 { 42 map.addControl(new BMap.MapTypeControl()); 43 } 44 //添加比例尺控件 45 function AddScaleControl() 46 { 47 map.addControl(new BMap.ScaleControl()); 48 } 49 //添加缩略图控件 50 function AddOverviewMapControl() 51 { 52 map.addControl(new BMap.OverviewMapControl()); 53 } 54 //开启滚轮调节地图 55 function EnableScrollWheelZoom() 56 { 57 map.enableScrollWheelZoom(); 58 } 59 //关闭滚轮调节地图 60 function DisableScrollWheelZoom() 61 { 62 map.disableScrollWheelZoom(); 63 } 64 //* 65 //*结束*//
添加覆盖物
1 //*覆盖物方法*// 2 //添加路线 3 function AddUserRoute(allArray) 4 { 5 var item = allArray.split(','); 6 var polylinePointsArray = []; 7 var latAry = new Array(); 8 var lngAry = new Array(); 9 var j = 0; 10 for(var i = 0; i<item.length;i=i+2) 11 { 12 polylinePointsArray[j] = new BMap.Point(item[i],item[i+1]); 13 j++; 14 } 15 var polyline = new BMap.Polyline( 16 polylinePointsArray, 17 {strokeColor:"blue", strokeWeight:2, strokeOpacity:1}); 18 map.addOverlay(polyline); 19 map.enableScrollWheelZoom(); 20 } 21 22 //添加用户图标 23 function AddUserMarker(lng, lat,userName,content) 24 { 25 var point = new BMap.Point(lng, lat); 26 var label = new BMap.Label(userName,{offset:new BMap.Size(20,-10)}); 27 //var myIcon = new BMap.Icon("person3.png", new BMap.Size(50,30)); 28 var marker = new BMap.Marker(point); // 添加用户图标 29 marker.setLabel(label); 30 map.addOverlay(marker); 31 // 创建信息窗口对象 32 var opts = { 33 width : 250, // 信息窗口宽度 34 //height: 120, // 信息窗口高度 35 title : "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>"+ userName +"</h4>", // 信息窗口标题 36 //title : '<span style="font-size:14px;color:#0A8021"> +userName + </span>', 37 enableMessage:false,//设置允许信息窗发送短息 38 message:"" 39 } 40 var info = new BMap.InfoWindow(content,opts); 41 marker.addEventListener("click", function () 42 { 43 map.openInfoWindow(info,point); 44 }); 45 } 46 //添加一个圆 47 function AddCirle(lng, lat, r) 48 { 49 var circle = new BMap.Circle(new BMap.Point(lng, lat), r); 50 map.addOverlay(circle); 51 } 52 //添加交通流图层 53 function AddTrafficLayer() 54 { 55 var traffic = new BMap.TrafficLayer(); 56 map.addTileLayer(traffic); 57 } 58 //添加普通标注 59 function AddNormalMaker(lng, lat) 60 { 61 var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建标注 62 map.addOverlay(marker); 63 } 64 //标注开启拖拽 65 function OpenMakerDraging() 66 { 67 marker.enableDragging(true); 68 } 69 //标注关闭拖拽 70 function CloseMakerDraging() 71 { 72 marker.disableDragging(true); 73 } 74 //添加动画标注 75 function AddAnimationMaker(lng, lat) 76 { 77 var userIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/fox.gif", new BMap.Size 78 79 (300,157)); 80 var marker = new BMap.Marker(new BMap.Point(lng, lat),{icon:userIcon}); // 创建标注 81 82 // var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建标注 83 map.addOverlay(marker); 84 marker.setAnimation(BMAP_ANIMATION_BOUNCE); 85 } 86 //添加包含一个标签的标注 87 function AddLabelMaker(lng, lat, content) 88 { 89 var userIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/fox.gif", new BMap.Size 90 91 (300,157)); 92 var marker = new BMap.Marker(new BMap.Point(lng, lat),{icon:userIcon}); // 创建标注 93 var label = new BMap.Label(content,{offset:new BMap.Size(20,-10)}); 94 marker.setLabel(label); 95 map.addOverlay(marker); 96 } 97 //添加包含一个信息窗口的标注marker.openInfoWindow(infoWindow); 98 function AddWindowMaker(lng, lat, content) 99 { 100 var point = new BMap.Point(lng, lat); 101 var marker = new BMap.Marker(point); // 创建标注 102 map.addOverlay(marker); 103 var opts = { 104 width : 200, // 信息窗口宽度 105 height: 100, // 信息窗口高度 106 title : "外访某某", // 信息窗口标题 107 enableMessage:false 108 } 109 // 创建信息窗口对象 110 var info = new BMap.InfoWindow(content); 111 marker.addEventListener("click", function () { 112 113 map.openInfoWindow(info,point); 114 }); 115 } 116 //添加城市边界 117 function SetBoundary(city) 118 { 119 var bdary = new BMap.Boundary(); 120 bdary.get(city, function (rs) { //获取行政区域 121 map.clearOverlays(); //清除地图覆盖物 122 var count = rs.boundaries.length; //行政区域的点有多少个 123 for (var i = 0; i < count; i++) { 124 var ply = new BMap.Polygon(rs.boundaries[i], { strokeWeight: 2, strokeColor: "#ff0000" }); 125 126 //建立多边形覆盖物 127 map.addOverlay(ply); //添加覆盖物 128 map.setViewport(ply.getPath()); //调整视野 129 } 130 }); 131 } 132 //添加一个信息窗口 133 function AddInfoWindow(lng,lat,content) 134 { 135 var point=new BMap.Point(lng, lat); 136 var info = new BMap.InfoWindow(content); 137 map.openInfoWindow(info,point); 138 } 139 //添加一个标注 140 function AddLabel(lng, lat, content) 141 { 142 var point = new BMap.Point(lng, lat); 143 var opts = 144 { 145 position: point, 146 offset: new BMap.Size(0, -0) 147 } 148 var label = new BMap.Label(content, opts); 149 label.setStyle({ 150 color: "red", 151 fontSize: "10px", 152 height: "10px", 153 lineHeight: "10px", 154 fontFamily: "微软雅黑" 155 }); 156 map.addOverlay(label); 157 } 158 //* 159 //*结束*//
添加地图服务
1 //*地图服务*// 2 //本地搜索 3 function LocalSearch(keywords) 4 { 5 var local = new BMap.LocalSearch(map, { 6 renderOptions: { 7 map: map, 8 autoViewport: true 9 } 10 }); 11 local.search(keywords); 12 } 13 //周边搜索 14 function SearchNearby(keywords, center) 15 { 16 var local = new BMap.LocalSearch(map, { 17 renderOptions: { 18 map: map, 19 autoViewport: true 20 } 21 }); 22 local.searchNearby(keywords, center); 23 } 24 //范围搜索 25 function SearchInBounds(keywords) 26 { 27 var local = new BMap.LocalSearch(map, { 28 renderOptions: { 29 map: map 30 } 31 }); 32 local.searchInBounds(keywords, map.getBounds()); 33 } 34 //公交导航 35 function GetTransitRoute(start, end) 36 { 37 var transit = new BMap.TransitRoute(map, { 38 renderOptions: { 39 map: map, 40 autoViewport: true 41 } 42 }); 43 transit.search(start, end); 44 } 45 //步行导航 46 function GetWalkingRoute(start, end) 47 { 48 var walking = new BMap.WalkingRoute(map, { 49 renderOptions: { 50 map: map, 51 autoViewport: true 52 } 53 }); 54 walking.search(start, end); 55 } 56 //驾车导航 57 function GetDrivingRoute(start, end) 58 { 59 var driving = new BMap.DrivingRoute(map, { 60 renderOptions: { 61 map: map, 62 autoViewport: true 63 } 64 }); 65 driving.search(start, end); 66 } 67 //返回指定坐标所在地址 68 function GetByPoint(lng, lat) 69 { 70 var gc = new BMap.Geocoder(); 71 pt = new BMap.Point(lng, lat); 72 gc.getLocation(pt, function (rs) { 73 var addComp = rs.addressComponents; 74 document.getElementById("geo").innerText = addComp.province + ", " + addComp.city + ", " + 75 76 addComp.district + ", " + addComp.street + ", " + addComp.streetNumber; 77 }); 78 } 79 //返回指定地址的坐标 80 function GetByAddress(geo) 81 { 82 //通过IP定位获取当前城市名称 83 IP(); 84 var cityName=document.getElementById("geo").innerText 85 var myGeo = new BMap.Geocoder(); 86 // 将地址解析结果显示在地图上,并调整地图视野 87 myGeo.getPoint(geo, function (point) { 88 if (point) { 89 map.centerAndZoom(point, 16); 90 map.addOverlay(new BMap.Marker(point)); 91 document.getElementById("lng").innerText = point.lng; 92 document.getElementById("lat").innerText = point.lat; 93 } 94 }, cityName); 95 } 96 //IP定位 97 function IP() { 98 var myCity = new BMap.LocalCity(); 99 myCity.get(myFun); 100 function myFun(result) { 101 var cityName = result.name; 102 document.getElementById("geo").innerText = cityName; 103 map.setCenter(cityName); 104 } 105 106 } 107 //* 108 //*结束*//
添加地图工具
1 //*地图工具*// 2 //开启地图测距工具 3 function DistanceToolOpen() 4 { 5 var distance = new BMapLib.DistanceTool(map);//测距组件 6 distance.open(); 7 } 8 //关闭地图测距工具 9 function DistanceToolOpen() 10 { 11 distance.close(); 12 } 13 //开启地图拖拽放大工具 14 function DragAndZoomOpen() 15 { 16 var drag = new BMap.DragAndZoomTool(map); 17 drag.open(); 18 } 19 //关闭地图拖拽放大工具 20 function DragAndZoomOpen() 21 { 22 drag.close(); 23 } 24 //开启地图绘制工具 25 function DrawingManagerOpen() 26 { 27 28 //实例化鼠标绘制工具 29 var drawingManager = new BMapLib.DrawingManager(map, { 30 isOpen: true, //是否开启绘制模式 31 enableDrawingTool: true, //是否显示工具栏 32 drawingToolOptions: { 33 anchor: BMAP_ANCHOR_BOTTOM_RIGHT, //位置 34 offset: new BMap.Size(5, 5), //偏离值 35 scale: 0.8 //工具栏缩放比例 36 }, 37 circleOptions: styleOptions, //圆的样式 38 polylineOptions: styleOptions, //线的样式 39 polygonOptions: styleOptions, //多边形的样式 40 rectangleOptions: styleOptions //矩形的样式 41 }); 42 } 43 //关闭地图绘制工具 44 function DrawingManagerClose() 45 { 46 drawingManager.close(); 47 } 48 //* 49 //*结束*//
剩下的几个function是根据业务写的,不过也许会用到,像清空所有覆盖物等,就一块写上
1 //*Add By Phil*// 2 3 //清空所有路线if(allOverlay[i].getLabel() == null) 4 function ClearAllUserRoute(userCount) 5 { 6 var allOverlay = map.getOverlays(); 7 for(var i = userCount;i < allOverlay.length ; i++) 8 { 9 { 10 map.removeOverlay(allOverlay[i]); 11 } 12 } 13 } 14 15 //清除所有覆盖物 16 function ClearAllOverlay() 17 { 18 map.clearOverlays(); 19 } 20 21 //选择人员 22 function SelectedUserMarker(userName) 23 { 24 var allOverlay = map.getOverlays(); 25 for(var i = 0; i < allOverlay.length ; i++) 26 { 27 if(allOverlay[i].getLabel().content == userName) 28 { 29 allOverlay[i].setAnimation(BMAP_ANIMATION_BOUNCE); 30 break; 31 } 32 } 33 } 34 35 //多个地址 55行 36 function GetAddresses(lng,lat,addressArray) 37 { 38 var userPoint = new BMap.Point(lng,lat); 39 var myGeo = new BMap.Geocoder(); 40 var index = 0; 41 for(var i = 0; i < addressArray.length ; i++) 42 { 43 myGeo.getPoint(addressArray[i],function(point) 44 { 45 if(point) 46 { 47 var address = new BMap.Point(point.lng,point.lat); 48 AddAddressMarker(address,new BMap.Label(index + ":" + add,{offset:new BMap.Size(20,- 49 50 10)})); 51 ConnectTwoPoint(userPoint,point); 52 } 53 } 54 ) 55 index++; 56 } 57 } 58 59 //单独地址 60 function GetSingleAddress(lng,lat,addr,cityName) 61 { 62 var userPoint = new BMap.Point(lng,lat); 63 var myGeo = new BMap.Geocoder(); 64 myGeo.getPoint(addr,function(point) 65 { 66 if(point) 67 { 68 var address = new BMap.Point(point.lng,point.lat); 69 AddAddressMarker(address,new BMap.Label(addr,{offset:new BMap.Size(20,-10)})); 70 ConnectTwoPoint(userPoint,point); 71 } 72 },cityName 73 ); 74 } 75 76 //地图添加地址图标 77 function AddAddressMarker(point,label) 78 { 79 var addrMarker = new BMap.Marker(point,{icon:addrIcon}); 80 map.addOverlay(addrMarker); 81 addrMarker.setLabel(label); 82 } 83 84 //连接地图两点 85 function ConnectTwoPoint(firstPoint,secondPoint) 86 { 87 //右键菜单事件 88 //var removePoly = function(e,ee,polyline){map.removeOverlay(polyline);} 89 //创建右键菜单 90 //var polyMenu=new BMap.ContextMenu(); 91 //polyMenu.addItem(new BMap.MenuItem("删除",removePoly.bind(polyline))); 92 93 var polyline = new BMap.Polyline( 94 [firstPoint,secondPoint], 95 {strokeColor:"maroon", strokeWeight:2, strokeOpacity:1}); 96 map.addOverlay(polyline); 97 //添加右键菜单 98 //polyline.addContextMenu(polyMenu); 99 } 100 101 //* 102 //*结束//
Waiting
这篇对于做web的童鞋比较简单,对于cs来时就郁闷了,也算是摸索着做js,也许有不正确的地方,欢迎指出~
下一篇,应该是具体应用~