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>

                           

微信掃碼添加客服
400-028-7262
聯系我們
主站蜘蛛池模板: 上海珑析仪表有限公司| 三原图库 - 设计图片素材打包下载sytuku.com | 双合金_注塑机_螺杆|炮筒|料管|料筒-广东海驰德塑胶机械有限公司 | 种植槽系统,移动苗床,多层种植货架,潮汐苗床,物流苗床,潮汐面板,立体旋转育秧床,河北博超温室设备有限公司 | 沈阳资质代办_代办建筑资质「快」-【华廷元】沈阳代办公司首页- 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 吉林市康艺商贸有限公司_吉林市康艺商贸有限公司 | 无锡新源润不锈钢官网|304不锈钢平板|316L冷轧宽幅|2米卷分条开平 | 云南亿华工贸有限公司-云南护栏网-云南锌钢护栏-昆明市政护栏-工地护栏-昆明护栏网厂家 | 联系我们果博东方在线开户客服电话:19038688886 - 黑龙江旺广机械设备有限公司 | 健力普医疗-半导体激光治疗仪,红外偏振光治疗仪,近红外线治疗仪-独家功能,光疗典范 | 球墨井盖厂家-铸铁井盖批发-雨水篦子生产厂家-安徽含山县林头新华铸造厂 | 亚洲一区日韩一区欧美一区a,中文字幕乱妇无码AV在线,欧美日韩免费在线观看,国产精品一区二区三区免费,日韩精品免费一线在线观看,日韩一本在线,国产呦精品一区二区三区下载,国产日韩精品一区二区在线观看,欧美日韩高清一区二区三区,日韩在线免费观看视频,欧美日韩一区在线观看 | 全彩LED显示屏厂家_室内户外电子屏-深圳华邦瀛光电有限公司 | 深山工作室提供网络投票系统|微信公众号投票|微信公众号小程序|抖音小程序|百度小程序|微信公众号开发|企业网站建设 | 离婚协议书怎么写_离婚协议书模板标准版_离婚协议书范本下载 - 离婚协议书 | 手术无影灯生产厂家-提供电动手术台,电动产床定制与批发-山东华辰医疗设备有限公司 | 压滤机_板框压滤机_生产厂家陕西华星佳洋装备制造有限公司 | 惠声电子、广州市惠声电子科技有限公司、VBS、VBS惠声电子、VBS公共广播生产厂家、VBS广播功放生产厂家、VBS会议系统设备批发、VBSIP网络对讲系统厂家、VBS会议系统厂家、VBS智能中控厂家、VBS专业扩声厂家 | 卷帘门,防火卷帘,快速门,硬质快速门,提升门,伸缩门,堆积门,车库门维修-烟台捷曼门业有限公司 | 秦皇岛天视影像有限公司,宣传片创意拍摄制作,商业广告拍摄公司,影视影像服务商 - 秦皇岛天视影像有限公司,宣传片创意拍摄制作,商业广告拍摄公司,影视影像服务商 秦皇岛市信恒电子科技有限公司 秦皇岛市华谊彩印有限公司 | 启东华立石油化工机械设备有限公司|过滤器|混合机|消声器|混合器|管道过滤器|空气过滤器|精细过滤器 | 河北博隆环保科技有限公司-甲醛检测_甲醛治理_光触媒 | 三相干式变压器|三相隔离变压器|上海盖能电气有限公司官方网站|上海干式变压器生产厂家 | 水环式真空泵-旋片式真空泵-上海飞鲁泵业科技有限公司 | 乐云SEO | 品牌营销:抖音小红书关键词优化-ai搜索优化GEO推广 | 山东自保温砌块_泰安自保温砌块厂家_山东润德新型建材有限公司【网站】 | 环保除尘设备_燃气/燃油热水锅炉_光氧空气净化器_蒸汽玉米压片机_压片设备_烘干设备-山东金盾节能环保设备有限公司 | 叶片泵,液压电机,油泵电机,变量叶片泵,油压电机-广东俊泰液压科技有限公司 | 手术无影灯生产厂家-提供电动手术台,电动产床定制与批发-山东华辰医疗设备有限公司 | 西安男科医院_陕西男性专科医院_陕西老医协生殖医学医院【官网】 | 扭力扳手_扭力扳手检定仪_数显扭力扳手_扭力测试仪_测力计_推拉力计_拉力测试仪_测试台架-上海实干实业有限公司 | 柔性电缆-专业机器人电缆,拖链电缆生产厂家 | 上海钧尚电器有限公司 - Faulhaber电机 AMETEK pittman电机 AMETEK ROTRON军用航空风机 Exlar电动缸 MAE电机 MCG电机 CP电动工具 马头工具 AMCI驱动器 直流电机 减速箱 直流伺服电机,无刷电机,直线电机 直流防爆电机 防爆电机 汽车助力转向电机 EPS电机 faulhaber motor faulhaber gearbox NANOTEC电机 ELWOOD电机 PHYTRON电机 EXLAR伺服电动缸 高力矩、高性能直流电机,音圈电机,风机,直流风机,航空风机 | 长沙市富巴机电设备有限公司-长期销售施能,霍尼韦尔,霍科德,意莱克斯,台仪,泛达 | 山东凯达起重机械有限公司-单梁行车,龙门吊,提梁机,门式起重机,悬臂起重机 | 水宜生-水宜生水杯价格-水宜生保温杯-【水宜生水杯官网】 | 原创软文新闻稿-网站SEO文章代写-征文演讲稿代笔-写作阁 | 景德镇芳然装饰有限公司 | 铝压铸件_铝合金压铸件_铝合金压铸件厂家-安平县长虹压铸厂 | 液压油缸生产厂家-常州辰佰液压机械有限公司 | 深圳危化品经营许可证_危险化学品经营许可证办理 |