BIGEMAP卫星地图_高清卫星地图_北斗高清地图_地图软件_矢量地图数据_专题地图

  百度離線地圖 教程

添加自定義覆蓋物

編輯時間:2017-03-03

zdy.jpg



自定義覆蓋物

API自1.1版本起支持用戶自定義覆蓋物。

要創建自定義覆蓋物,您需要做以下工作:

1.定義一個自定義覆蓋物的構造函數,通過構造函數參數可以傳遞一些自由的變量。

2.設置自定義覆蓋物對象的prototype屬性為Overlay的實例,以便繼承覆蓋物基類。

3.實現initialize方法,當調用map.addOverlay方法時,API會調用此方法。

4.實現draw方法。

定義構造函數并繼承Overlay

首先您需要定義自定義覆蓋物的構造函數,在下面的示例中我們定義一個名為SquareOverlay的構造函數,它包含中心點和邊長兩個參數,用來在地圖上創建一個方形覆蓋物。

// 定義自定義覆蓋物的構造函數 

function SquareOverlay(center, length, color){   

 this._center = center;   

 this._length = length;   

 this._color = color;   

}   

// 繼承APIBMap.Overlay   

SquareOverlay.prototype = new BMap.Overlay();

初始化自定義覆蓋物

當調用map.addOverlay方法添加自定義覆蓋物時,API會調用該對象的initialize方法用來初始化覆蓋物,在初始化過程中需要創建覆蓋物所需要的DOM元素,并添加到地圖相應的容器中。

地圖提供了若干容器供覆蓋物展示,通過map.getPanes方法可以得到這些容器元素,它們包括:

floatPane

markerMouseTarget

floatShadow

labelPane

markerPane

mapPane

這些對象代表了不同的覆蓋物容器元素,它們之間存在著覆蓋關系,最上一層為floatPane,用于顯示信息窗口內容,下面依次為標注點擊區域層、信息窗口陰影層、文本標注層、標注層和矢量圖形層。

我們自定義的方形覆蓋物可以添加到任意圖層上,這里我們選擇添加到markerPane上,作為其一個子結點。

// 實現初始化方法 

SquareOverlay.prototype.initialize = function(map){   

// 保存map對象實例  

 this._map = map;       

 // 創建div元素,作為自定義覆蓋物的容器  

 var div = document.createElement("div");   

 div.style.position = "absolute";       

 // 可以根據參數設置元素外觀  

 div.style.width = this._length + "px";   

 div.style.height = this._length + "px";   

 div.style.background = this._color;     

// div添加到覆蓋物容器中  

 map.getPanes().markerPane.appendChild(div);     

// 保存div實例  

 this._div = div;     

// 需要將div元素作為方法的返回值,當調用該覆蓋物的show  

// hide方法,或者對覆蓋物進行移除時,API都將操作此元素。  

 return div;   

}

繪制覆蓋物

到目前為止,我們僅僅把覆蓋物添加到了地圖上,但是并沒有將它放置在正確的位置上。您需要在draw方法中設置覆蓋物的位置,每當地圖狀態發生變化(比如:位置移動、級別變化)時,API都會調用覆蓋物的draw方法,用于重新計算覆蓋物的位置。通過map.pointToOverlayPixel方法可以將地理坐標轉換到覆蓋物的所需要的像素坐標。

// 實現繪制方法  

SquareOverlay.prototype.draw = function(){   

// 根據地理坐標轉換為像素坐標,并設置給容器   

 var position = this._map.pointToOverlayPixel(this._center);   

 this._div.style.left = position.x - this._length / 2 + "px";   

 this._div.style.top = position.y - this._length / 2 + "px";   

}

移除覆蓋物

當調用map.removeOverlay或者map.clearOverlays方法時,API會自動將initialize方法返回的DOM元素進行移除。

顯示和隱藏覆蓋物

自定義覆蓋物會自動繼承Overlay的show和hide方法,方法會修改由initialize方法返回的DOM元素的style.display屬性。如果自定義覆蓋物元素較為復雜,您也可以自己實現show和hide方法。

// 實現顯示方法   

SquareOverlay.prototype.show = function(){   

 if (this._div){   

   this._div.style.display = "";   

 }   

}     

// 實現隱藏方法 

SquareOverlay.prototype.hide = function(){   

 if (this._div){   

   this._div.style.display = "none";   

 }   

}

自定義其他方法 通過構造函數的prototype屬性,您可以添加任何自定義的方法,比如下面這個方法每調用一次就能改變覆蓋物的顯示狀態:

// 添加自定義方法  

SquareOverlay.prototype.toggle = function(){   

 if (this._div){   

   if (this._div.style.display == ""){   

     this.hide();   

   }   

   else {   

     this.show();   

   }   

 }   

}

添加覆蓋物

您現在已經完成了一個完整的自定義覆蓋物的編寫,可以添加到地圖上了。

// 初始化地圖 

var map = new BMap.Map("container");   

var point = new BMap.Point(116.404, 39.915);   

map.centerAndZoom(point, 15);   

// 添加自定義覆蓋物  

var mySquare = new SquareOverlay(map.getCenter(), 100, "red");   

map.addOverlay(mySquare);

實現上圖效果的JS代碼示例:

<script type="text/javascript">
    
// 創建Map實例
   
var mp = new BMap.Map("allmap", {enableMapClick:false});
    
// 設置地圖背景色為白色
   
mp.getContainer().style.background = '#FFF';
    
var point = new BMap.Point(110.1, 35.1);
    
// 默認顯示中心點和地圖層級
  
mp.centerAndZoom(point, 5);
    
mp.addControl(new BMap.NavigationControl());
    
mp.addControl(new BMap.NavigationControl());
    
//顯示比例尺在右下角
mp.addControl(new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: true}));
//右上角顯示電子地圖和衛星圖切換
mp.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP,BMAP_SATELLITE_MAP]}));
   
mp.enableScrollWheelZoom();      // 啟用滾輪放大縮小。
  
mp.enableKeyboard();             // 啟用鍵盤操作。 
  
mp.enableContinuousZoom();    //啟用連續縮放效果
  
function ComplexCustomOverlay(point, text, mouseoverText){
       
this._point = point;
       
this._text = text;
       
this._overText = mouseoverText;
       
}
        ComplexCustomOverlay.prototype =
new BMap.Overlay();
       
ComplexCustomOverlay.prototype.initialize = function(map){
       
this._map = map;
       
var div = this._div = document.createElement("div");
       
div.style.position = "absolute";
       
div.style.zIndex = BMap.Overlay.getZIndex(this._point.lat);
       
div.style.backgroundColor = "#EE5D5B";
       
div.style.border = "1px solid #BC3B3A";
       
div.style.color = "white";
       
div.style.height = "18px";
       
div.style.padding = "2px";
       
div.style.lineHeight = "18px";
       
div.style.whiteSpace = "nowrap";
       
div.style.MozUserSelect = "none";
       
div.style.fontSize = "12px"
       
var span = this._span = document.createElement("span");
       
div.appendChild(span);
       
span.appendChild(document.createTextNode(this._text));
       
var that = this;

       
var arrow = this._arrow = document.createElement("div");
       
arrow.style.background = "url(images/label.png) no-repeat";
       
arrow.style.position = "absolute";
       
arrow.style.width = "11px";
       
arrow.style.height = "10px";
       
arrow.style.top = "22px";
       
arrow.style.left = "10px";
       
arrow.style.overflow = "hidden";
       
div.appendChild(arrow);

       
div.onmouseover = function(){
       
this.style.backgroundColor = "#6BADCA";
       
this.style.borderColor = "#0000ff";
       
this.getElementsByTagName("span")[0].innerHTML = that._overText;
       
arrow.style.backgroundPosition = "0px -20px";
        
}

        div.onmouseout = function(){
       
this.style.backgroundColor = "#EE5D5B";
       
this.style.borderColor = "#BC3B3A";
       
this.getElementsByTagName("span")[0].innerHTML = that._text;
       
arrow.style.backgroundPosition = "0px 0px";
        
}

        mp.getPanes().labelPane.appendChild(div)
;

       
return div;
       
}
        ComplexCustomOverlay.prototype.draw = function(){
        var map =
this._map;
       
var pixel = map.pointToOverlayPixel(this._point);
       
this._div.style.left = pixel.x - parseInt(this._arrow.style.left) + "px";
       
this._div.style.top  = pixel.y - 30 + "px";
       
}
var txt =
"銀湖海岸城", mouseoverTxt = txt + " " + parseInt(Math.random() * 1000,10)
+
"" ;

var myCompOverlay = new ComplexCustomOverlay(new BMap.Point(116.407845,39.914101),
"銀湖海岸城",mouseoverTxt);
       
mp.addOverlay(myCompOverlay);
</script>

                           

主站蜘蛛池模板: 气象站_校园气象站_自动气象站_光伏气象站-山东万象环境科技有限公司 | 亚克力游泳池_透明/空中/无边泳池_别墅亚克力泳池设计生产厂家_瑞地格乐-深圳他拍档 | 山东华德耐特工业设备有限公司-仓储货架-钢托盘-物流车-周转箱-工位器具 | 清扫器-聚氨酯清扫器-合金清扫器-四连杆自动纠偏-机械纠偏-锥辊纠偏-衡水涌泉机械科技有限公司 | 深圳PCB电路板厂|PCB线路板厂|FPC柔性电路板厂|FPC软性线路板生产厂家|恒成和电路板:18681495413 | 企好网 - 中国B2B产业互联网践行者|百度爱采购官方授权一级服务商 | 耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技-耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技 | 水硬度在线分析仪-氟离子|悬浮固体浓度分析仪-ldo分析仪-上海植茂 | 山东净化车间_净化工程_净化公司-山东海蓝净化装饰工程有限公司 山东金起起重机械有限公司[官网]-金桥银路悬臂吊,金起龙门吊,山东金起起重行吊,单梁起重机 | 青岛熔喷过滤芯_青岛过滤器生产厂家_青岛净水滤料厂家_青岛净达过滤技术有限公司 | 上海礼品公司_定制商务礼品_促销礼品_福利礼品_创意礼品_上海普田商贸有限公司 | 强德防盗门-防盗门厂家-中国防盗门十大品牌-强德门业 - 浙江臻品工贸有限公司 | 展馆展厅设计_数字多媒体展厅_3D全息投影_三维动画制作_企业宣传片|深圳市华南数字科技有限公司 斩天手游网_高质量手机游戏下载中心 | 消字号牙膏代加工|面膜代加工|凝胶贴牌|漱口水贴牌-南京三盾药业有限公司-消字号牙膏代加工|面膜代加工|凝胶贴牌|漱口水贴牌-南京三盾药业有限公司 | 移动CRM软件_SaaS CRM_crm管理软件系统_crm客户关系管理系统_销售管理软件-上海企能软件科技有限公司 | 郑州空调维修_郑州中央空调维修_空调清洗维保-郑州大晟机电设备安装工程有限公司 | 江苏华海诚科新材料有限公司、连云港华海诚科新材料有限公司、连云港新材料 | 泰安华特玻璃钢有限公司|泰安玻璃钢|泰安华特玻璃钢 | 真空烘箱-高低温试验箱-防爆烘箱-防爆高低温试验箱-老化房-恒温恒湿箱-高低温试验箱-高低温冲击试验箱厂家—上海标承实验仪器有限公司 | 济南排队机,济南触摸屏一体机,济南拼接屏广告机厂家,汇通视控 | 腻子粉厂家_耐水腻子粉_内墙腻子粉批发_生态腻子粉_长沙美恩生态腻子粉厂家 | 无尘投料站-真空上料机-旋振筛|超声波振动筛|摇摆筛|筛分机-新乡市欧霖佳机械有限公司 | 无铅锡膏,无铅锡膏厂家,有铅锡膏厂家,高温锡膏厂家,环保锡丝,贴片红胶-东莞市科舜电子科技有限公司 | 金华银焊条-金华银焊丝-银焊片制造商-银焊环批发商-浙江焊丝生产商-焊环厂家-浙江永旺焊材制造有限公司 | 青州东威机械有限公司,洗沙机,脱水筛、细沙回收机,淘金设备,洗石机,砂石分离机,筛沙机,采沙船,清淤船,破碎制砂机,海沙淡化设备 | 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 | 桥梁支座更换_桥梁检测车租赁_高空作业车出租_支座更换_伸缩缝安装_隧道防水_养护加固_维修_出租_衡水庆兴桥梁养护工程有限公司 桥梁养护|桥梁维修加固|隧道裂缝修补|支座更换|管道堵水气囊|衡水众拓路桥养护有限公司 | 制砂机_选矿设备_耐磨件-郑州富嵩机械设备有限公司 | 全彩LED显示屏厂家_室内户外电子屏-深圳华邦瀛光电有限公司 | 天津翻译公司盖章|022-58385822| 翰文博译(天津)商务咨询有限公司 | 昆明子弟食品有限公司| 矿用精确定位系统,井下4G无线通讯系统,工作面集控系统,皮带保护系统-山东新云鹏电气有限公司 | 液压油缸_液压系统_液压泵站生产厂家-浙江汉达机械专注液压行业21年 | 频谱矢量网络分析仪_鼎阳数字示波器-苏州东伟元电子有限公司 | 无锡防火门-防火窗-防火卷帘门-福臣门业科技有限公司 | 医院,小型生活污水处理设备-山东明基环保设备有限公司 | 今日标准_走心机_数控走心机_车铣复合_厂家_深圳今日标准官方网站 | 江西挤塑板_挤塑板厂家_挤塑板价格-江合保温材料 | 抛丸机-通过式抛丸机-履带吊钩式抛丸机厂家-青岛泓霖智能设备公司 | 徐州护栏,铝艺栏杆,铝艺大门,铝艺栏杆门,别墅铝艺大门-徐州桂丰金属科技有限公司 | 基坑护栏,临边护栏网,爬架网,爬架网片,铁路防护栅栏,公路护栏网,河北昊坤金属制品有限公司 |