百度地圖爬坑路

1. 多邊形覆蓋物在移動端點擊事件觸發(fā)不了問題

解決方案:由于繪制的多邊形 polygon直接監(jiān)聽 polygon.addEventListener("click", ()=>) 移動端上事件不觸發(fā),所以在popInfo上添加個字段區(qū)分饶唤,map上監(jiān)聽事件可以獲取所添加的字段叨咖,然后賦值

<html>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>百度地圖繪制多邊形</title>
</head>
<body>
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.3"></script>
 
<script type="text/javascript">
var map;
window.lastInfoBox = null;
let markStyle = {
  boxStyle: {
    opacity: '0.9',
    background: 'rgba(0,43,112,.9)',
    borderRadius: '10px',
    height: 'auto',
    padding: '20px',
    fontSize: '14px',
    lineHeight: '22px',
    color: '#f8f8f8',
    boxShadow: '0px 2px 10px 10px rgba(0, 0, 0, 0.2)'
  },
  closeIconUrl: require('@/assets/images/track-display-close.png'),
  closeIconMargin: '-30px -15px 0px 0',
  enableAutoPan: true
};
function initialize() {
  // 百度地圖API功能
  map = new BMap.Map("map_canvas", { enableMapClick: false, mapType: mapSelect === '2d' ? BMAP_NORMAL_MAP : BMAP_SATELLITE_MAP, drawMargin: 100, drawer: BMAP_SVG_DRAWER_FIRST });
  map.addControl(new BMap.NavigationControl());               // 添加平移縮放控件
  map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件
  map.addControl(new BMap.OverviewMapControl());              //添加縮略地圖控件
  map.enableScrollWheelZoom();                            //啟用滾輪放大縮小
  map.addControl(new BMap.MapTypeControl());          //添加地圖類型控件
  map.setMapType(BMAP_SATELLITE_MAP);
  var point = new BMap.Point(108.896, 34.330);    // 創(chuàng)建點坐標
  map.centerAndZoom(point,13);                    // 初始化地圖,設置中心點坐標和地圖級別。
// 網(wǎng)格監(jiān)聽點擊事件(這個是重點)
  map.getPanes().floatPane;
  map.addEventListener("click", e => {
    if (e.overlay && e.overlay.popInfo) {
          polygonMarker(e.overlay.popInfo);
     }
});
// 繪制網(wǎng)格
setPolygonMarker () {
  const data = [
    [108.853025, 34.298633],
    [108.85475, 34.318075],
    [108.856475, 34.319744],
    [108.85245, 34.343354]
  ]
  const pol = data.map(v => new BMap.Point(v[0], v[1]));
  var polygon = new BMap.Polygon(pol,
    {strokeColor:"#f50704",fillColor:"", strokeWeight:3, strokeOpacity:0,fillOpacity:0}
  );
   polygon.popInfo = data; // 添加字段(這個是重點)
   map.addOverlay(polygon);
}
polygonMarker(data){
  markStyle = Object.assign(markStyle, { offset: new BMap.Size(0, -40) });
  let infoWindow = new BMapLib.InfoBox(map, detailGridHTML(data.name, data.org, data.user, 
  data.contact), markStyle);
  const marker = new BMap.Marker(new BMap.Point(data.coordinates[0][0], data.coordinates[0][1]));
  if (lastInfoBox) lastInfoBox.close(); // 判斷上一個窗體是否存在盲镶,若存在則執(zhí)行close
  lastInfoBox = infoWindow;
  infoWindow.open(marker);
  if (!store.state.isPCDevice)  this.map.disableDragging(); // 如果是移動端禁止拖動
}
detailGridHTML (name, org, user, contact) {
    let html = `
    <div class="monitor-map-info-window--flex">
      <div class="monitor-map-info-window">
        <ul>
          <li><span>網(wǎng)格名稱:</span><span>${name || ''}</span></li>
          <li><span>承接組織:</span><span>${org || ''}</span></li>
          <li><span>網(wǎng)格組長:</span><span>${user || ''}</span></li>
          <li><span>聯(lián)系方式:</span><span>${contact || ''}</span></li>
        </ul>
      </div>
    </div>
    `;
    return html;
};
</script>
</head>
<body onLoad="initialize()">
  <div id="map_canvas" style="width: 100%; height: 100%;"></div>
</body>
</html>

2. 移動端彈窗關(guān)閉不了(解決方案:禁止地圖拖動map.disableDragging())

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <style type="text/css">
    body, html {width: 100%;height: 100%;margin:0;font-family:"微軟雅黑";}
    #allmap{width:100%;height:100%;}
    .infoBoxContent{
      margin:20px;
    }
    .infoBoxContent button{
      background-color: #008CBA;
      border: none;
      color: white;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 16px;
      border-radius: 16px;
      width: 120px;
    }
    .infoBoxContent h3{
      color: white;
    }
    .infoBoxContent p{
      color:white;
    }
    .infoBoxContent:before {
      content: '';
      width: 0;
      height: 0;
      border: 20px solid transparent;
      border-top-color: #333333;
      position: absolute;
      left: 50%;
      top: 100%;
      margin-left: -20px;
    }
  </style>
  <title>自定義彈窗</title>
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=1H8Dhi2pGmOMYbN4EcaAGr1rv8f7Gmjz"></script>
  <script type="text/javascript" src="lib/InfoBox.js"></script>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
  // 百度地圖API功能
  var map = new BMap.Map("allmap");
  map.setMapStyle({style:'midnight'});
  var point = new BMap.Point(116.417854,39.921988);
  var marker = new BMap.Marker(point);  // 創(chuàng)建標注
  map.addOverlay(marker);              // 將標注添加到地圖中
  map.centerAndZoom(point, 15);
  var html = "<div class='infoBoxContent '><h3>哈哈哈公司</h3><hr /><div><p>所屬部門:研發(fā)部門</p>" +
    "<p>主要工作:制造BUG</p><div align=\"center\"><button>我是按鈕</button></div></div></div>";
  var infoBox = new BMapLib.InfoBox(map,html,{
    boxStyle:{
      opacity: "0.8",
      background: "#333333",
      width: "250px",
      height: "200px"
    },
    closeIconUrl:"lib/close.png",
    closeIconMargin: "1px 1px 0 0",
    enableAutoPan: true,
    align: INFOBOX_AT_TOP
  });
  marker.addEventListener("click", function(){
    infoBox.open(marker);
    // TODO: 觸摸移動時觸發(fā)此事件 此時開啟可以拖動子库。雖然剛初始化該地圖不可以拖動睬涧,但是可以觸發(fā)拖動事件募胃。
  map.addEventListener("touchmove", function (e) {
       map.enableDragging();
  });
   // TODO: 觸摸結(jié)束時觸發(fā)次此事件  此時開啟禁止拖動
   map.addEventListener("touchend", function (e) {
        map.disableDragging();
   });
 
  // 初始化地圖 禁止拖動   注:雖禁止拖動,但是可以出發(fā)拖動事件
  map.disableDragging();
 
  map.enableScrollWheelZoom(true);

  });
</script>

3.基于BMapLib.InfoBox自定義彈窗

image.png
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <style type="text/css">
    body, html {width: 100%;height: 100%;margin:0;font-family:"微軟雅黑";}
    #allmap{width:100%;height:100%;}
    .infoBoxContent{
      margin:20px;
    }
    .infoBoxContent button{
      background-color: #008CBA;
      border: none;
      color: white;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 16px;
      border-radius: 16px;
      width: 120px;
    }
    .infoBoxContent h3{
      color: white;
    }
    .infoBoxContent p{
      color:white;
    }
    .infoBoxContent:before {
      content: '';
      width: 0;
      height: 0;
      border: 20px solid transparent;
      border-top-color: #333333;
      position: absolute;
      left: 50%;
      top: 100%;
      margin-left: -20px;
    }
  </style>
  <title>自定義彈窗</title>
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=1H8Dhi2pGmOMYbN4EcaAGr1rv8f7Gmjz"></script>
  <script type="text/javascript" src="lib/InfoBox.js"></script>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
  // 百度地圖API功能
  var map = new BMap.Map("allmap");
  map.setMapStyle({style:'midnight'});
  var point = new BMap.Point(116.417854,39.921988);
  var marker = new BMap.Marker(point);  // 創(chuàng)建標注
  map.addOverlay(marker);              // 將標注添加到地圖中
  map.centerAndZoom(point, 15);
  var html = "<div class='infoBoxContent '><h3>哈哈哈公司</h3><hr /><div><p>所屬部門:研發(fā)部門</p>" +
    "<p>主要工作:制造BUG</p><div align=\"center\"><button>我是按鈕</button></div></div></div>";
  var infoBox = new BMapLib.InfoBox(map,html,{
    boxStyle:{
      opacity: "0.8",
      background: "#333333",
      width: "250px",
      height: "200px"
    },
    closeIconUrl:"lib/close.png",
    closeIconMargin: "1px 1px 0 0",
    enableAutoPan: true,
    align: INFOBOX_AT_TOP
  });
  marker.addEventListener("click", function(){
    infoBox.open(marker);
  });
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畦浓,一起剝皮案震驚了整個濱河市痹束,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讶请,老刑警劉巖祷嘶,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夺溢,居然都是意外死亡论巍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門风响,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘉汰,“玉大人,你說我怎么就攤上這事状勤⌒常” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵持搜,是天一觀的道長密似。 經(jīng)常有香客問我,道長朵诫,這世上最難降的妖魔是什么辛友? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮剪返,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邓梅。我一直安慰自己脱盲,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布日缨。 她就那樣靜靜地躺著钱反,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上面哥,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天哎壳,我揣著相機與錄音,去河邊找鬼尚卫。 笑死归榕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吱涉。 我是一名探鬼主播刹泄,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怎爵!你這毒婦竟也來了特石?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鳖链,失蹤者是張志新(化名)和其女友劉穎姆蘸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芙委,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡逞敷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了题山。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兰粉。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顶瞳,靈堂內(nèi)的尸體忽然破棺而出玖姑,到底是詐尸還是另有隱情,我是刑警寧澤慨菱,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布焰络,位于F島的核電站,受9級特大地震影響符喝,放射性物質(zhì)發(fā)生泄漏闪彼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一协饲、第九天 我趴在偏房一處隱蔽的房頂上張望畏腕。 院中可真熱鬧,春花似錦茉稠、人聲如沸描馅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铭污。三九已至恋日,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘹狞,已是汗流浹背岂膳。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留磅网,地道東北人谈截。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像知市,于是被迫代替她去往敵國和親傻盟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容