百度地图封装的JS函数
很多年前做的,刚才维护一个很老的项目突然看到的 lol,特地单独摘出来拿到博客里做备份
把下面内容保存成js文件,然后就可以在你的项目中使用啦,当然别忘记引入百度地图的api啊,效果图
核心文件
//MAP_CONTAINER, INPUT_address, INPUT_lng, INPUT_lat, INPUT_zoom, INPUT_title, INPUT_img, INPUT_summary, OPEN_infowindow /* * render Single Marker On the Map */ var renderBaiduMap = function(MAP_CONTAINER, INPUT_address, INPUT_lng, INPUT_lat, INPUT_zoom){ $container = MAP_CONTAINER; $address = INPUT_address; $lng = INPUT_lng; $lat = INPUT_lat; $zoom = INPUT_zoom; if(arguments[5]) var $infoWindow = 1; var $title = arguments[5] ? arguments[5] : ''; var $img = arguments[6] ? arguments[6] : ''; var $summary = arguments[7] ? arguments[7] : ''; var $open = arguments[8] ? arguments[8] : 0; if(!$container || !document.getElementById($container)) { alert('Map Container does not exists!'); return false; } if(!$address && !($lng && $lat)) { alert('Address and lng,lat invalid!'); return false; } if(!$zoom) $zoom = 12; var map = new BMap.Map($container); //Hybrid switch var mapType1 = new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP,BMAP_HYBRID_MAP]}); map.addControl(mapType1); /** * 添加放大缩小控件 */ map.enableScrollWheelZoom();//启动鼠标滚轮缩放地图 var opts = {type: BMAP_NAVIGATION_CONTROL_ZOOM } map.addControl(new BMap.NavigationControl(opts)); //lng and lat first if($lng && $lat) { var point = new BMap.Point($lng,$lat); map.centerAndZoom(point,$zoom); maker = new BMap.Marker(point); map.addOverlay(maker); //maker info if($infoWindow == 1) { var $Content = "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>"+ $title +"</h4>"; if($img) $Content += "<img style='float:right;margin:4px' id='infoImg' src='"+ $img +"' width='120' height='100' title='"+ $title +"'/>"; if($summary) $Content +="<p style='margin:0;line-height:1.5;font-size:13px;'>"+ $summary +"</p>" + "</div>"; var infoWindow = new BMap.InfoWindow($Content); // 创建信息窗口对象 /** * 默认打开信息窗口 */ if($open == 1) { maker.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片 } /** * 点击打开信息窗口 */ maker.addEventListener("click", function(){ this.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow if(document.getElementById('infoImg')) { document.getElementById('infoImg').onload = function (){ infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片部分被隐藏 } } }); } //copy right /* var cr = new BMap.CopyrightControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT}); //设置版权控件位置 map.addControl(cr); //添加版权控件 var bs = map.getBounds(); //返回地图可视区域 cr.addCopyright({id: 1, content: "<a href='#' style='font-size:20px;background:yellow'>我是自定义版权控件呀我是自定义版权控件呀</a>", bounds: bs}); //Copyright(id,content,bounds)类作为CopyrightControl.addCopyright()方法的参数 */ } //address else { //by address if($address) { //console.log($address); var myGeo = new BMap.Geocoder(); // 将地址解析结果显示在地图上,并调整地图视野 myGeo.getPoint($address, function(point){ if (point) { map.centerAndZoom(point, $zoom); maker = new BMap.Marker(point); map.addOverlay(maker); //maker info if($infoWindow == 1) { var $Content = "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>"+ $title +"</h4>"; if($img) $Content += "<img style='float:right;margin:4px' id='infoImg' src='"+ $img +"' width='120' height='100' title='"+ $title +"'/>"; if($summary) $Content +="<p style='margin:0;line-height:1.5;font-size:13px;'>"+ $summary +"</p>" + "</div>"; var infoWindow = new BMap.InfoWindow($Content); // 创建信息窗口对象 /** * 默认打开信息窗口 */ if($open == 1) { maker.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片 } /** * 点击打开信息窗口 */ maker.addEventListener("click", function(){ this.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow if(document.getElementById('infoImg')) { document.getElementById('infoImg').onload = function (){ infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片部分被隐藏 } } }); } } }); } //end by address else { return false; } } } /* * render Multiple Marker On the Map */ //load map for add multiple marker var loadBaiduMap = function(MAP_CONTAINER, INPUT_address, INPUT_lng, INPUT_lat, INPUT_zoom, INPUT_maptype){ var $container = MAP_CONTAINER; var $address = INPUT_address; var $lng = INPUT_lng; var $lat = INPUT_lat; var $zoom = arguments[4] ? arguments[4] : 12; var INPUT_maptype = arguments[5] ? arguments[5] : 1; /** * 1 = BMAP_NORMAL_MAP //此地图类型展示普通街道视图。 * 2 = BMAP_HYBRID_MAP //此地图类型展示卫星和路网的混合视图。(自 1.2 新增) * 3 = BMAP_SATELLITE_MAP //此地图类型展示卫星视图。(自 1.2 新增)。 */ switch(INPUT_maptype) { case 1: $maptype = BMAP_NORMAL_MAP; break; case 2: $maptype = BMAP_HYBRID_MAP; break; case 3: $maptype = BMAP_SATELLITE_MAP; break; default: $maptype = BMAP_NORMAL_MAP; break; } //console.log($maptype); if(!document.getElementById($container)) return false; // 创建全局Map实例 window.mapMarkers = new BMap.Map($container,{mapType: $maptype}); map = window.mapMarkers; var mapType1 = new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP,BMAP_HYBRID_MAP]}); map.addControl(mapType1); //2D图,卫星图 map.enableScrollWheelZoom();//启动鼠标滚轮缩放地图 var opts = {type: BMAP_NAVIGATION_CONTROL_ZOOM } map.addControl(new BMap.NavigationControl(opts)); if($lng && $lat) { var point = new BMap.Point($lng,$lat); map.centerAndZoom(point, $zoom); } else { if($address) { //console.log($address); var myGeo = new BMap.Geocoder(); // 将地址解析结果显示在地图上,并调整地图视野 myGeo.getPoint($address, function(point){ if (point) { map.centerAndZoom(point, $zoom); } }); } } } //add marker to map var renderBaiduMapMaker = function(MAP_CONTAINER, INPUT_lng, INPUT_lat, INPUT_title, INPUT_img, INPUT_summary, INPUT_open) { var $container = MAP_CONTAINER; var $lng = INPUT_lng; var $lat = INPUT_lat; var $title = arguments[3] ? arguments[3] : ''; var $img = arguments[4] ? arguments[4] : ''; var $summary = arguments[5] ? arguments[5] : ''; var $open = arguments[6] ? arguments[6] : 0; if(!document.getElementById($container)) return false; // 百度地图API功能 /* * 初始化地图 */ map = window.mapMarkers; //map.centerAndZoom("中国",9); // 初始化地图,用城市名设置地图中心点 addMarker($lng,$lat); // 编写自定义函数,创建标注 /* * 生成标注核心函数 */ function addMarker(lng,lat){ var point = new BMap.Point(lng,lat); //map.centerAndZoom(point, $zoom); var marker = new BMap.Marker(point); map.addOverlay(marker); //open infoWindow if($title) { var $Content = "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>"+ $title +"</h4>"; if($img) $Content += "<img style='float:right;margin:4px' id='infoImg' src='"+ $img +"' width='120' height='100' title='"+ $title +"'/>"; if($summary) $Content +="<p style='margin:0;line-height:1.5;font-size:13px;'>"+ $summary +"</p>" + "</div>"; var infoWindow = new BMap.InfoWindow($Content); // 创建信息窗口对象 /** * 默认打开信息窗口 */ if($open == 1) { marker.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片 } /** * 点击打开信息窗口 */ marker.addEventListener("click", function(){ this.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow if(document.getElementById('infoImg')) { document.getElementById('infoImg').onload = function (){ infoWindow.redraw(); //防止在网速较慢,图片未加载时,生成的信息框高度比图片的总高度小,导致图片部分被隐藏 } } }); } } }
使用方法
window.onload = function() { loadBaiduMap('allmap','上海市','','',10,1); renderBaiduMapMaker('allmap',116.331398,39.897445,'title1','http://app.baidu.com/map/images/tiananmen.jpg','hello world'); renderBaiduMapMaker('allmap',116.360575,39.997011,'title2','','中文测试中文测试中文测试中文测试中文测试'); renderBaiduMapMaker('allmap',116.551447,39.929322,'title3','http://app.baidu.com/map/images/tiananmen.jpg','hello world'); renderBaiduMapMaker('allmap',116.799811,40.056239,'title4','http://app.baidu.com/map/images/tiananmen.jpg','hello world'); }
函数说明
loadBaiduMap
是初始化百度地图控件,后面通过renderBaiduMapMaker
函数来添加覆盖物,至于第一个函数renderBaiduMap
好像没啥用了,具体里面也写了不少注释,自己看吧