日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

百度地图Marker优化方案

發(fā)布時間:2023/12/19 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 百度地图Marker优化方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

在使用百度地圖的時候,我們需要在地圖上增加標注Marker來展示設置信息。隨著用戶需要不斷增多,加載更多的Marker標注信息成為了一種奢望。然而通過自己技術的提升,歸結出來了一下方案。

引入百度地圖

需要在百度http://lbsyun.baidu.com/index.php?title=jspopular注冊為開發(fā)者。此過程略過...

<head>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你申請的密鑰"></script>
</head>

在頁面HTML 的<head>里引入百度提供的s

實例化地圖

在body中創(chuàng)建div

<body>
    <div id="allmap"></div>
    <script type="text/javascript">
            // 百度地圖API功能
            var map = new BMap.Map("allmap", { enableMapClick: false });//實例化百度地圖
            map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);//設置中心點位與縮放級別
            map.enableScrollWheelZoom();//啟用滾動
    </script>
</body>

這樣就打開HTML就可以看到頁面中引入的百度地圖了。

在地圖中創(chuàng)建Marker

// 百度地圖API功能
var map = new BMap.Map("allmap", { enableMapClick: false });//實例化百度地圖
map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);//設置中心點位與縮放級別
map.enableScrollWheelZoom();//啟用滾動
var pt = null,//點位
    i = 0,//
    mark=null;//新標注
for(; i < 10; i++) {
    pt = new BMap.Point(Math.random() * 40 + 85, Math.random() * 30 + 21);//隨機實例point
    mark=new BMap.Marker(pt);//實例marker
    map.addOverlay(mark);//添加到地圖上
};

現(xiàn)在地圖上就會有10Marker標注

給地圖綁定拖拽and縮放事件

//地圖綁定拖拽事件
map.addEventListener('dragend', function(e){
    console.log('拖拽事件');
});
//地圖綁定滾動事件
map.addEventListener('zoomend', function(e){
    console.log('縮放事件');
});

這樣的話當?shù)貓D縮放,或者拖拽時候就可以加載數(shù)據(jù)marker

獲取可視區(qū)域

獲取到可視區(qū)域就可以根據(jù)當前可視區(qū)域顯示maker數(shù)據(jù)。這樣避免不必要的marker顯示出來。

var bounds =  map.getBounds(),   //獲取可視區(qū)域
SouthWest = bounds.getSouthWest(),   //可視區(qū)域左下角
NorthEast = bounds.getNorthEast();   //可視區(qū)域右上角
console.log("當前地圖可視范圍是:" + SouthWest.lng + "," + SouthWest.lat + "到" + NorthEast.lng + "," + NorthEast.lat);            

獲取我們再次請求數(shù)據(jù)的時候,判斷當前marker是否存在,存在則不添加。這樣的話就會提升很大的速度。

最終案例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>marker--標注點位優(yōu)化方案</title>
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=E06eb9d756d0eafc722effb355657b4c"></script>
    
    </head>
    <body>
        <div id="allmap"></div>
        <p id='conunt'></p>
        <script type="text/javascript">
            // 百度地圖API功能
            var map = new BMap.Map("allmap", { enableMapClick: false });//實例化百度地圖
            map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);//設置中心點位與縮放級別
            map.enableScrollWheelZoom();//啟用滾動
            
            var markers = [];//所有marker標注集合
            
            //console.log(markers);

            //地圖綁定拖拽事件
            map.addEventListener('dragend', function(e){
                getBounds('dragend');
            });
            //地圖綁定滾動事件
            map.addEventListener('zoomend', function(e){
                getBounds('zoomend');
            });
            /**
             * 獲取可視區(qū)域
             * @type {string} 類型
             * */
            function getBounds(type){
                //函數(shù)節(jié)流
                if(getBounds.timer){
                    clearTimeout(getBounds.timer);
                    getBounds.timer=null;
                }
                getBounds.timer=setTimeout(function(){
                    //如果超過2000則不加載
                    if(markers.length>=1000){
                    }else{
                        addMarker(100);//加載500個marker
                    }
                    var bounds =  map.getBounds(),   //獲取可視區(qū)域
                    SouthWest = bounds.getSouthWest(),   //可視區(qū)域左下角
                    NorthEast = bounds.getNorthEast();   //可視區(qū)域右上角
                    console.log("當前地圖可視范圍是:" + SouthWest.lng + "," + SouthWest.lat + "到" + NorthEast.lng + "," + NorthEast.lat);
                    //處理顯示與隱藏的marker
                    var data=boundsShow(SouthWest.lng,NorthEast.lng,SouthWest.lat,NorthEast.lat);
                    
                    //把不在可視區(qū)域的maker隱藏起來
                    for(var i=0,lengths=data.listhide.length;i<lengths;i++){
                        data.listhide[i].hide();
                    }
                    dom.innerText='共有:'+markers.length+'個點位,顯示:'+data.listshow.length+'個點位';//設置地圖上的marker數(shù)量
                },200);
                
            }
            /**
             * 在可視區(qū)域顯示,不在可視區(qū)域隱藏
             * @smlng {number} 小 經(jīng)度
             * @bglng {number} 大 經(jīng)度
             * @smlat {number} 小緯度
             * @bglat {number} 大緯度
             * 
             * return 返回顯示的數(shù)量與隱藏的數(shù)量
             * */
            function boundsShow(smlng,bglng,smlat,bglat){
                var listhide=[],//隱藏的數(shù)據(jù)
                    listshow=[];//顯示的數(shù)據(jù)
                for(var i=0,lengths=markers.length;i<lengths;i++){
                    var _point=markers[i].point;
                    //如果marker的經(jīng)度 小于可視范圍的最大經(jīng)度大于可視范圍的最小經(jīng)度--
                    //并且marker的緯度 小于可是范圍的最大緯度大于可視范圍的最小緯度--則需要顯示
                    if(smlng<_point.lng && _point.lng<bglng && smlat<_point.lat && _point.lat < bglat){
                        //顯示
                        listshow.push(markers[i]);
                        //如果之前被隱藏則顯示
                        if(!markers[i].isVisible()){
                            markers[i].show();
                        }
                    }else{
                        //不顯示
                        listhide.push(markers[i]);
                    }
                }
                //返回顯示的數(shù)量與隱藏的數(shù)量
                return{
                    listshow:listshow,
                    listhide:listhide
                }
            }
            
            
            /**
             * 新增marker
             * @MAX {number} 數(shù)量
             * */
            function addMarker(MAX){
                dliags(true,'加載中...');
            
                var pt = null,//點位
                    i = 0,//
                    mark=null;//新標注
                for(; i < MAX; i++) {
                    pt = new BMap.Point(Math.random() * 40 + 85, Math.random() * 30 + 21);//隨機實例point
                    mark=new BMap.Marker(pt);//實例marker
                    map.addOverlay(mark);//添加到地圖上
                    markers.push(mark);//存儲到數(shù)組中
                };
                //等待繪制引擎渲染完畢再清楚彈出層
                setTimeout(function(){
                    dliags(false);
                },0);
            }
            
            
            
            /**
             * 彈出層
             * @state {Boolean}  true:顯示  or  false:隱藏
             * @txt {string} 顯示文字
             * */
            function dliag(){
                var dom=null;
                return function(state,txt){
                    var dlog=null,p=null;
                    //如果為 true:顯示
                    if(state){
                        if(dom){
                            document.body.appendChild(dom);
                        }else{
                            p=document.createElement('p');
                            p.innerText=txt;
                            p.style.width='100px';
                            p.style.height='45px';
                            p.style.textAlign='center';
                            p.style.position='absolute';
                            p.style.margin='auto';
                            p.style.zIndex='2';
                            p.style.left='0';
                            p.style.right='0';
                            p.style.bottom='0';
                            p.style.top='0';
                            p.style.backgroundColor='#F2F2F2';
                            p.style.lineHeight='45px';
                            p.style.borderRadius='5px';
                            
                            dlog=document.createElement('div');
                            dlog.style.position='absolute';
                            dlog.style.zIndex='1';
                            dlog.style.margin='auto';
                            dlog.style.left='0';
                            dlog.style.right='0';
                            dlog.style.bottom='0';
                            dlog.style.top='0';
                            dlog.style.backgroundColor='#000';
                            dlog.style.opacity='0.6';
                            
                            dom=document.createElement('div');
                            dom.appendChild(dlog);
                            dom.appendChild(p);
                            document.body.appendChild(dom);
                        }
                    }else{
                        document.body.removeChild(dom);
                    }
                }
            }
            //彈出框
            var dliags=dliag();
            //添加marker
            addMarker(100);
            //獲取conunt
            var dom=document.getElementById('conunt');
            //設置顯示數(shù)量
            dom.innerText='共有:'+markers.length+'個點位,顯示:'+markers.length;
        </script>
    </body>
</html>

參考鏈接 demo

總結

在使用百度地圖的時候,有時候會被百度地圖限制 但是我們能優(yōu)化的也只有js,能夠讓地圖少渲染瀏覽器少繪制,就會把性能提升到最大化

總結

以上是生活随笔為你收集整理的百度地图Marker优化方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩国产一区 | 91精品999 | 欧美日韩久久 | 国产高潮在线观看 | 在线播放黄色av | 国产视频你懂得 | 午夜啪啪福利视频 | 日韩xxx视频 | 亚洲日本影院 | 精品少妇一区二区三区密爱 | 激情瑟瑟 | 精品99久久 | 日本性视频网站 | 黄色一级视频免费 | 亚洲理论视频 | 日韩av综合网站 | 97人妻人人澡人人爽人人精品 | 中文字幕欲求不满 | 国产喷水福利在线视频 | 日本在线不卡一区二区三区 | 69视频国产 | 中文字幕一区二区久久人妻 | 国产91网址 | 国产免费成人av | 操大爷影院 | 女人18毛片毛片毛片毛片区二 | 国产天堂第一区 | 日韩精品国产AV | 国产精品老熟女一区二区 | 成人免费看类便视频 | 青青操在线 | 蜜桃av噜噜一区二区三区麻豆 | xxxx少妇| 黄色三级在线视频 | av片免费观看 | 朝桐光av在线一区二区三区 | 国模无码视频一区二区三区 | 欧美一级黄色录像 | 亚洲性夜 | 天天摸天天舔天天操 | 杨幂国产精品一区二区 | 小婕子伦流澡到高潮h | 欧美成人aaa片一区国产精品 | www..com国产 | 亚洲熟悉妇女xxx妇女av | 朝鲜黄色片 | 亚洲一区二区观看播放 | 在线观看国产视频 | 噼里啪啦动漫高清在线观看 | 亚洲成人播放器 | 一级片免费观看 | 福利二区 | 91九色网站 | 国产jk精品白丝av在线观看 | 美女脱了内裤喂我喝尿视频 | 啪啪免费 | 精品国产户外野外 | 国产亚洲精品久久久久久久 | 日韩免费不卡视频 | 日韩国产欧美综合 | 欧美日韩国产第一页 | 伊人网五月天 | 欧美日本一区二区三区 | 性欧美精品中出 | 精品人妻人人做人人爽夜夜爽 | 国产欧美第一页 | 少妇视频 | 毛片一区二区 | 97香蕉久久超级碰碰高清版 | 国产一区二区视频免费在线观看 | 欧美bdsm调教视频 | 色播av| 欧美特级黄色大片 | 乳色吐息免费看 | 亚洲天堂社区 | 国产清纯白嫩初高中在线观看性色 | 欧美日本一道本 | 精品国产乱码久久久久久鸭王1 | 亚洲视频一区二区在线观看 | 国模叶桐尿喷337p人体 | 可以免费看av的网址 | 黄网av| 国产日本在线播放 | 中文字幕15页 | 日本一区二区三区四区五区 | 在线看黄色的网站 | 自拍偷拍亚洲天堂 | 国产免费一区二区三区网站免费 | 成人永久视频 | 美女网站免费视频 | 手机在线一区 | 亚洲精品在线视频 | 中文字幕av网址 | av一片 | 寡妇高潮一级视频免费看 | 国产成人精品午夜福利Av免费 | 亚洲欧洲综合在线 | 麻豆爱爱视频 | 打屁股调教网站 |