麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > JavaScript > 正文

基于OL2實(shí)現(xiàn)百度地圖ABCD marker的效果

2019-11-20 11:29:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文概述:

上文中提到了在Arcgis for JS中實(shí)現(xiàn)百度地圖ABCD的marker效果,在本文,講述如何在OpenLayers2中實(shí)現(xiàn)類似的效果。

效果圖展示如下:

為直觀期間,先將效果貼出來(lái)。

聯(lián)動(dòng)展示

思路:

1、列表與地圖的互動(dòng)

鼠標(biāo)經(jīng)過(guò)列表時(shí),修改列表圖標(biāo),并根據(jù)列表返回的值在地圖上繪藍(lán)色的marker;鼠標(biāo)移出,修改列表圖標(biāo)為紅色,清空地圖marker圖層。

關(guān)鍵代碼:

title.on("mouseover",function(){   var i = $(this).attr("i");   $("#img"+i).attr("src","img/blue.png");   var data = $(this).data("attr");   var hpt = new OpenLayers.LonLat(data.x,data.y);   var hicon = new OpenLayers.Icon('img/blue.png',size,offset);   hMarker = new OpenLayers.Marker(hpt,hicon);   markerLyr.addMarker(hMarker);   showName(hpt,data.name,"item-label-name"); }); title.on("mouseout",function(){   var i = $(this).attr("i");   $("#img"+i).attr("src","img/red.png");   markerLyr.removeMarker(hMarker);   hlabelLyr.clear(); }); title.on("click",function(){   var data = $(this).data("attr");   showInfowindow(data.name,data.desc); }); 

2、地圖與列表的互動(dòng)

鼠標(biāo)經(jīng)過(guò)地圖紅色的marker時(shí),修改對(duì)應(yīng)列表圖標(biāo),并將紅色 marker的圖片換成藍(lán)色的;鼠標(biāo)移出,修改對(duì)應(yīng)列表圖標(biāo),并修改marker為紅色。

關(guān)鍵代碼:

marker.events.register("click", feature, function(e){   var data = e.object.attr;   showInfowindow(data.name,data.desc); }); marker.events.register("mouseover", feature, function(e){   map.layerContainerDiv.style.cursor = "pointer";   var id= e.object.id;   $("#img"+id).attr("src","img/blue.png");   $("#li"+id).css("background","#f2f2f2");   var data = e.object.attr;   var hpt = new OpenLayers.LonLat(data.x, data.y);   showName(hpt,data.name,"item-label-name-map"); }); marker.events.register("mouseout", feature, function(e){   map.layerContainerDiv.style.cursor = "url("     + OpenLayers.Util.getRootPath()     + "img/pan.cur),default";   var id= e.object.id;   $("#img"+id).attr("src","red.png");   $("#li"+id).css("background","#ffffff");   hlabelLyr.clear(); }); markerLyr.addMarker(marker); var label = new OpenLayers.Label(pt,i+1,"item-label"); labelLyr.add(label); 

3、地圖上的1,2,3,4...等數(shù)字是一個(gè)label圖層,不參與聯(lián)動(dòng);

4、數(shù)據(jù)以JSON的形式傳遞,在本實(shí)例中,根據(jù)地圖的四至動(dòng)態(tài)生成的,如下:

function getRandomXY(){   var json = new Array();   for(var i=0;i<8;i++){     var w = bounds.getWidth();     var h = bounds.getHeight();     var x = Math.random() * w + bounds.left;     var y = Math.random() * h + bounds.bottom;     json.push({       id:i,       name:"name"+i,       desc:"this is the name"+i,       x:x,       y:y     })   }   return json; }

完整代碼如下:

<!DOCTYPE html> <html> <head lang="en">   <meta charset="UTF-8">   <title>openlayers map</title>   <link rel="stylesheet" type="text/css" href="http://localhost/olapi/theme/default/style.css"/>   <style>     html, body, #map{       padding:0;       margin:0;       height:100%;       width:100%;       overflow: hidden;       font-size: 12.5px;       font-family:"宋體"     }     .item-list{       position: absolute;       top:100px;       left: 20px;       z-index: 999;       border: 1px solid #ccc;       width: 200px;       background: #fff;     }     .list-close{       background: url("img/panel_tools.png");       width: 16px;       height: 16px;       float: right;       margin: 3px 3px;       background-position: -16px 0px;     }     .list-close:hover{       cursor: pointer;     }     .list-title{       background: #009dda;       color: #fff;       padding: 5px 8px;       font-weight: bold;     }     ul{       list-style: none;       margin: -0px 0;     }     ul li{       border-bottom: 1px dotted #eee;       margin-left: -40px;       margin-top: 5px;       position: relative;     }     ul li:hover{       background: #f2f2f2;     }     .item{       padding: 2px 5px;     }     .item:hover{       cursor: pointer;     }     .item-num{       position: absolute;       top: 4px;       left: 12px;       color:#fff;       font-size: 15px;       font-weight: bold;     }     .item-title{       float: right;       font-weight: bold;       margin-right: 10px;     }     .item-content{       padding: 3px 5px;     }     .item-detail{       margin: 3px 5px;       float: right;     }     .item-detail:hover{       text-decoration: underline;       color: #01A4F8;       cursor: pointer;     }     .item-label{       color:#fff;       font-size: 15px;       font-weight: bold;       margin-top: 2px;       margin-left: 7px;     }     .item-label-name,.item-label-name-map{       border:1px solid #a6c9e2;       background: #fff;       padding: 3px 5px;       font-size: 12px;       margin-top: 23px;       margin-left: 15px;       border-radius: 5px;     }     .item-label-name-map{       margin-left: 25px;     }   </style>   <!--引入jquery 庫(kù) -->   <script type="text/javascript" src="http://localhost/olapi/OpenLayers.js"></script>   <script type="text/javascript" src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>   <script src="http://localhost/jquery/jquery-1.8.3.js"></script>   <script src="extend/LabelLayer.js"></script>   <script>     var map;     var tiled;     $(window).load(function() {       var bounds = new OpenLayers.Bounds(           87.57582859314434, 19.969920291221204,           126.56713756740385, 45.693810203800794       );       var options = {         controls: [],         maxExtent: bounds,         maxResolution: 0.1523098006807012,         projection: "EPSG:4326",         units: 'degrees'       };       map = new OpenLayers.Map('map', options);       map.addControl(new OpenLayers.Control.Zoom());       map.addControl(new OpenLayers.Control.Navigation());       map.addControl( new OpenLayers.Control.MousePosition());       var tiled = new OpenLayers.Layer.WMS(           "province", "http://localhost:8088/geoserver/lzugis/wms",           {             "LAYERS": 'province',             "STYLES": '',             format: 'image/png'           },           {             buffer: 0,             displayOutsideMaxExtent: true,             isBaseLayer: true,             yx : {'EPSG:4326' : true}           }       );       var markerLyr = new OpenLayers.Layer.Markers("marker");       var labelLyr = new OpenLayers.Layer.Labels("label");       var hlabelLyr = new OpenLayers.Layer.Labels("hlabelLyr");       map.addLayers([tiled,markerLyr,labelLyr,hlabelLyr]);       map.zoomToExtent(bounds);        var data = getRandomXY();       console.log(data);       var ul = $("#items");       var size = new OpenLayers.Size(24,26);       var offset = new OpenLayers.Pixel(0, 0);       var hMarker=null;       for(var i=0;i<data.length;i++) {         /**          * 地圖內(nèi)容          */         var pt = new OpenLayers.LonLat(data[i].x, data[i].y);         var icon = new OpenLayers.Icon('img/red.png',size,offset);         var feature = new OpenLayers.Feature(markerLyr,             pt,             {'icon': icon,'attr':data[i]});         var marker = feature.createMarker();         marker.attr = data[i];         marker.id = i;         marker.events.register("click", feature, function(e){           var data = e.object.attr;           showInfowindow(data.name,data.desc);         });         marker.events.register("mouseover", feature, function(e){           map.layerContainerDiv.style.cursor = "pointer";           var id= e.object.id;           $("#img"+id).attr("src","img/blue.png");           $("#li"+id).css("background","#f2f2f2");           var data = e.object.attr;           var hpt = new OpenLayers.LonLat(data.x, data.y);           showName(hpt,data.name,"item-label-name-map");         });         marker.events.register("mouseout", feature, function(e){           map.layerContainerDiv.style.cursor = "url("             + OpenLayers.Util.getRootPath()             + "img/pan.cur),default";           var id= e.object.id;           $("#img"+id).attr("src","red.png");           $("#li"+id).css("background","#ffffff");           hlabelLyr.clear();         });         markerLyr.addMarker(marker);         var label = new OpenLayers.Label(pt,i+1,"item-label");         labelLyr.add(label);         /**          * 列表內(nèi)容          */         var li = $("<li />").attr("id","li"+i).appendTo(ul);         var title = $("<div />").addClass("item").attr("i",i).data("attr",data[i]);         var img = $("<img />").attr("id","img"+i).attr("src", "img/red.png")/*.attr("width", "16").attr("height", "18")*/;         var num = $("<a />").addClass("item-num").html(i+1);         var name = $("<div />").addClass("item-title").html(data[i].name);         title.append(img).append(num).append(name);         var content = $("<a />").addClass("item-content").html(data[i].desc);         var detail = $("<a />").addClass("item-detail").html("詳細(xì)>>");         li.append(title).append(content).append(detail);         title.on("mouseover",function(){           var i = $(this).attr("i");           $("#img"+i).attr("src","img/blue.png");           var data = $(this).data("attr");           var hpt = new OpenLayers.LonLat(data.x,data.y);           var hicon = new OpenLayers.Icon('img/blue.png',size,offset);           hMarker = new OpenLayers.Marker(hpt,hicon);           markerLyr.addMarker(hMarker);           showName(hpt,data.name,"item-label-name");         });         title.on("mouseout",function(){           var i = $(this).attr("i");           $("#img"+i).attr("src","img/red.png");           markerLyr.removeMarker(hMarker);           hlabelLyr.clear();         });         title.on("click",function(){           var data = $(this).data("attr");           showInfowindow(data.name,data.desc);         });       }        $(".item-list").draggable({         handle:'.list-title'       });       $("#close").on("click",function(){         $(".item-list").hide();       });        function showName(pt,name,classname){         var label = new OpenLayers.Label(pt,name,classname);         hlabelLyr.add(label);       }       function showInfowindow(title,content){         $("<div />").window({           width:200,           height:80,           modal:true,           maximizable:false,           minimizable:false,           collapsible:false,           closable:true,           title:title,           content:content         });       }        function getRandomXY(){         var json = new Array();         for(var i=0;i<8;i++){           var w = bounds.getWidth();           var h = bounds.getHeight();           var x = Math.random() * w + bounds.left;           var y = Math.random() * h + bounds.bottom;           json.push({             id:i,             name:"name"+i,             desc:"this is the name"+i,             x:x,             y:y           })         }         return json;       }     });   </script> </head> <body> <div id="map"></div>   <div class="item-list">     <div id="close" class="list-close"></div>     <div class="list-title">結(jié)果列表</div>     <ul id="items">     </ul>   </div> </body> </html>

在本實(shí)例中,擴(kuò)展了OpenLayers的圖層Labels和對(duì)象Label。

以上就是本文全部敘述,希望大家喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 视频www | 性少妇chinesevideo | 美国黄色毛片女人性生活片 | 日日操日日操 | 一级在线观看视频 | 中国杭州少妇xxxx做受 | 国产毛片aaa一区二区三区视频 | 中日韩免费视频 | 羞羞视频免费观看网站 | 99综合视频 | 性大片1000免费看 | 日韩欧美高清片 | av免费在线观看不卡 | 国产亚洲精品网站 | 久久久久久久99 | 日韩激情一区二区三区 | av在线成人 | 激情亚洲网 | 精品免费在线视频 | 羞羞视频| 欧美成人一级片 | av在线免费观看网 | 9999久久久久久 | 日本在线视频二区 | 欧洲黄色一级视频 | 97视频| 国产午夜精品一区二区三区四区 | 久久sp | 青青国产在线视频 | 中文字幕亚洲一区二区三区 | 在线观看免费视频麻豆 | 国产一区二区三区黄 | 高清国产午夜精品久久久久久 | h色视频网站| 性欧美性欧美 | 久久国产一二区 | 51色视频 | 欧美h版在线观看 | 悠悠成人资源亚洲一区二区 | 中文字幕免费在线看 | 97超级碰碰人国产在线观看 |