【百度编辑器】-地图组件-添加周边信息【附近公交】

jerry thinkphp 2015年11月19日 收藏
给百度编辑器的地图组件添加附近公交站的信息展示
效果图:




代码修改:

主要是两个文件:
Ueditor\dialogs\map\map.html (后台编辑模板)
Ueditor\dialogs\map\show.html (前台展示模板)

修改map.html:
  1.     function init(){
  2.         var mapNode = editor.selection.getRange().getClosedNode(),
  3.             isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute("src")),
  4.             isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');
  5.         if(isMapImg || isMapIframe){
  6.             var url, centerPos, markerPos;
  7.             if(isMapIframe) {
  8.                 url = decodeURIComponent(mapNode.getAttribute("src"));
  9.                 $G('is_dynamic').checked = true;
  10.                 styleStr = mapNode.style.cssText;
  11.             } else {
  12.                 url = mapNode.getAttribute("src");
  13.                 styleStr = mapNode.style.cssText;
  14.             }

  15.             centerPos = getPars(url,"center").split(",");
  16.             markerPos = getPars(url, "markers").split(",");
  17.             point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));
  18.             marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));
  19.             map.addControl(new BMap.NavigationControl());
  20.             map.centerAndZoom(point, Number(getPars(url,"zoom")));
  21.         }else{
  22.             var myIcon = new BMap.Icon("/Public/images/tools/shops-icon.png", new BMap.Size(30,60),{offset: new BMap.Size(17, 60),}); // 修改了这里,创建了自定义的标注图标
  23.             point = new BMap.Point(120.621962,31.344312);    // 创建点坐标
  24.             marker = new BMap.Marker(point,{icon:myIcon}); // 修改了这里,替换系统的标注图标
  25.             map.addControl(new BMap.NavigationControl());
  26.             map.centerAndZoom(point, 15);                     // 初始化地图,设置中心点坐标和地图级别。
  27.         }
  28.         marker.enableDragging();
  29.         map.addOverlay(marker);
  30.     }
  1.     dialog.onok = function (){
  2.         var center = map.getCenter();
  3.         var zoom = map.zoomLevel;
  4.         var size = map.getSize();
  5.         var mapWidth = size.width;
  6.         var mapHeight = size.height;
  7.         var point = marker.getPoint();

  8.         if($G('is_dynamic').checked) {
  9.             var URL = editor.options.UEDITOR_HOME_URL,
  10.                 url = [URL + (/\/$/.test(URL) ? '':'/') + "dialogs/map/show.html" +
  11.                     '#center=' + center.lng + ',' + center.lat,
  12.                     '&zoom=' + zoom,
  13.                     '&width=' + 430, // 修改了这里,这里是地图的宽度,因为加了一个公交信息展示的div,所以我把地图宽度调小了点
  14.                     '&height=' + mapHeight,
  15.                     '&markers=' + point.lng + ',' + point.lat,
  16.                     '&markerStyles=' + 'l,A'].join('');
  17.             editor.execCommand('inserthtml', '<iframe class="ueditor_baidumap" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + ' frameborder="0" width="' + (430+4+210) + '" height="' + (mapHeight+4) + '"></iframe>'); // 修改了这里,这里面的width="' + (430+4+210);其中的430对应上面的宽度,210我加的div宽度
  18.         } else {
  19.             var url = "http://api.map.baidu.com/staticimage?center=" + center.lng + ',' + center.lat +
  20.                     "&zoom=" + zoom + "&width=" + size.width + '&height=' + size.height + "&markers=" + point.lng + ',' + point.lat;
  21.             editor.execCommand('inserthtml', '<img width="'+ size.width +'"height="'+ size.height +'" src="' + url + '"' + (styleStr ? ' style="' + styleStr + '"' :'') + '/>');
  22.         }
  23.     };
修改show.html

这里添加了一个div,用于展示公交信息
  1. <body onload="initMap();">
  2. <!--百度地图容器-->
  3. <table>
  4.     <tr>
  5.         <td>
  6.             <div style="width:697px;height:550px;border:#ccc solid 1px;" id="dituContent"></div>
  7.         </td>
  8.         <td>
  9.             <div style="width:200px;height:338px;float:left;border:#ccc solid 1px;over-flow:hodden;">
  10.             <div style="width:100% ;height:32px;border-bottom:#ccc solid 1px;line-height:32px; font-weight: bold; padding-left:10px;background-color: #eee;">
  11.                 附近公交
  12.             </div>
  13.             <div id="busSite" style="padding:5px;font-size:14px;"></div>

  14.             </div>
  15.         </td>
  16.     </tr>
  17. </table>
  18. </body>
  1.     //创建和初始化地图函数:
  2.     function initMap() {
  3.         // [FF]切换模式后报错
  4.         if (!window.BMap) {
  5.             return;
  6.         }
  7.         var dituContent = document.getElementById('dituContent');
  8.         dituContent.style.width = widthParam + 'px';
  9.         dituContent.style.height = heightParam + 'px';

  10.         createMap();//创建地图
  11.         setMapEvent();//设置地图事件
  12.         addMapControl();//向地图添加控件

  13.         // 创建标注
  14.         var markersArr = markersParam.split(',');
  15.         var point = new BMap.Point(markersArr[0], markersArr[1]);
  16.         // marker = new BMap.Marker(point);
  17.         // marker.enableDragging();
  18.         // map.addOverlay(marker); // 将标注添加到地图中
  19.         
  20.         // 这里开始下面,修改了标注图标
  21.         var myIcon = new BMap.Icon("/Public/images/tools/shops-icon.png", new BMap.Size(30,60),{offset: new BMap.Size(17, 60),});
  22.         var marker2 = new BMap.Marker(point,{icon:myIcon});  // 创建标注
  23.         marker2.enableDragging();
  24.         map.addOverlay(marker2); // 将标注添加到地图中

  25.         // 这里开始下面获取了周边公交信息
  26.         var local = new BMap.LocalSearch(map, {
  27.             renderOptions: {map: map, panel: "busSite"}
  28.         }); // 这里的 panel: "busSite",中的busSite 公交信息面板div的ID
  29.         local.disableFirstResultSelection();
  30.         local.setPageCapacity(5);
  31.         local.searchNearby("公交",point,1000); // “公交” 可以改成别的试试!
  32.         // 这里结束周边公交信息获取
  33.         if(parent.editor && parent.document.body.contentEditable=="true") { //在编辑状态下
  34.             setMapListener();//地图改变修改外层的iframe标签src属性
  35.         }
  36.     }