openlayers 高亮显示记录

来源:互联网 发布:php判断是不是正整数 编辑:程序博客网 时间:2024/05/18 13:05

研究了好几天感谢penLayers官方旗舰群[2] 各位大神的帮助

直接上代码吧

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD>  <TITLE> OpenLayer : Feature Select </TITLE>  <link rel="stylesheet" href="theme/default/style.css" type="text/css" />  <link rel="stylesheet" href="style.css" type="text/css" />  <script src="OpenLayers.js"></script>  <script  type="text/javascript">        var map = null;//地图对象    var wms_layer = null;//本地图片wms图层    var vector_layer = null;//矢量图形图层    var select_control = null;    // 选择要素控件    var wkt_reader = null;//wkt图形解析器    var point   = "POINT(-10 -10)";//点    var line    = "LINESTRING(-180 90, 0 0)";//线    var polygon = "POLYGON(0 0,0 50,150 50,150 0,0 0)";//面 var polygon1 = "POLYGON(20 0,0 20,120 20,120 0,0 0)";//面//异常图片设置透明    OpenLayers.Util.onImageLoadErrorColor = "transparent";//初始化地图    function init()    {//地图配置var options = {controls: [],//空间配置maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),//范围控制//maxResolution: "auto",maxResolution: 0.17578125,//最大分辨率projection: "EPSG:4326",//minScale: 50000000,numZoomLevels: 2,resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],//分辨率scales: [50000000, 30000000, 10000000, 5000000]//比例尺};//实例化 DragPan 控件//var dragPan = new OpenLayers.Control.DragPan();//创建地图对象map = new OpenLayers.Map('map', options);//本地切片地图wms_layer = new OpenLayers.Layer.TMS( "TMS Layer","",{  url: '', serviceVersion: '.', layername: '.', alpha: false,type: 'png', getURL: overlay_getTileURL });//矢量图形图层        vector_layer = new OpenLayers.Layer.Vector("Vector");//配置图层初始化透明vector_layer.style = {                fillOpacity:1,fillColor:"yellow",strokeOpacity: 1,                cursor: "pointer"}//var dragFeature = new OpenLayers.Control.DragFeature(vector_layer);//map上添加控件//map.addControl(dragFeature);//激活控件//dragFeature.activate();        // 添加图层        map.addLayers([wms_layer, vector_layer]);   //图层选择控件        map.addControl(new OpenLayers.Control.LayerSwitcher() );//导航控件map.addControl(new OpenLayers.Control.Navigation());map.addControl(new OpenLayers.Control.PanZoomBar());//地图控制-鼠标坐标拾取     map.addControl(new OpenLayers.Control.MousePosition());//地图控制-编辑工具 map.addControl(new OpenLayers.Control.EditingToolbar(vector_layer));//显示比例尺map.addControl(new OpenLayers.Control.Scale(document.getElementById('scale')));        // 在Vector图层上添加图元element        //addFeature(point  , vector_layer);        addFeature(line   , vector_layer);        addFeature(polygon, vector_layer);addFeature(polygon1, vector_layer);        addSelectControl(map, vector_layer);        // 放大到全屏        map.zoomToMaxExtent();    }//重写切片请求路径function overlay_getTileURL(bounds) {var res = this.map.getResolution();var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));var z = this.map.getZoom();if (x >= 0 && y >= 0) {return this.url + z + "/" + x + "/" + y + "." + this.type;} else {return "img/none.png";}}//添加选择控制    function addSelectControl(map, vector_layer)    {        if(select_control!=null)        {            return ;        }//地图控件-要素选择控件        select_control = new OpenLayers.Control.SelectFeature(vector_layer,{onSelect:onFeatureSelect,// 注册Select事件onUnselect:onFeatureUnselect,// 注册取消Select事件callbacks:{//over:onHover,//鼠标移入事件//out:onOut//鼠标移除事件}});//下面两句解决feature移动,地图不移动的问题select_control.handlers.feature.stopDown=false;select_control.handlers.feature.stopUp=false;//添加要素选择控件        map.addControl(select_control);//激活要素选择控件        select_control.activate();    }//鼠标移入要素事件function onHover(feature){vector_layer.drawFeature(getShowFeature(feature));}//获取显示要素function getShowFeature(feature){var style={strokeWidth:1,strokeColor: "yellow", strokeOpacity: 1, fillOpacity:0.1,fillColor:"yellow",cursor:'pointer'}feature.style = style;return feature;}//鼠标移出要素样式function onOut(feature){feature.style = {fillOpacity: 0,strokeOpacity: 0,            cursor: "pointer"}//重绘要素(必须的)vector_layer.drawFeature(feature);}//添加要素    function addFeature(wkt, layer)     {        var geometry = toGeometryFromWkt(wkt);        if(wkt!=null)        {            layer.addFeatures(geometry);        }    }    //要素解析    function toGeometryFromWkt(wkt)    {        var geometry = null;        if(wkt_reader==null)        {            wkt_reader = new OpenLayers.Format.WKT();        }        geometry = wkt_reader.read(wkt);var pan = new OpenLayers.Control.Pan();pan.activate();        return geometry;    }    // Feature 选中事件响应    function onFeatureSelect(feature)     {alert("featureselect");var restoreFeatures=[];vector_layer.drawFeature(getShowFeature(feature));restoreFeatures.push(feature);        selectedFeature = feature;        popup = new OpenLayers.Popup.FramedCloud("chicken",                                  feature.geometry.getBounds().getCenterLonLat(),                                 null,                                 "<div style='font-size:.8em'>Feature: " + feature.id +"<br />Area: " + feature.geometry.getArea()+"</div>",                                 null, true, onPopupClose);        feature.popup = popup;        map.addPopup(popup);            }    // Feature取消选中事件响应    function onFeatureUnselect(feature)     {        map.removePopup(feature.popup);        feature.popup.destroy();        feature.popup = null;    }    //弹窗关闭事件    function onPopupClose(evt) {        select_control.unselect(selectedFeature);    }    // 获取多边形ringsfunction getRings () {var features = vector_layer.features;//for(var i = 0;i<features.length;i++){//console.log(features[i]);//}var polygon1 = features[0];var cpts = polygon1.geometry.components;var ret=[];for (var i = 0; i < cpts.length; i++) {var linearRings = cpts[i].components;for (var j = 0; j < linearRings.length; j++) {var point = linearRings[j];ret.push({x:point.x, y:point.y});};};addFeatureByRings(ret);}//根据rings添加图形function addFeatureByRings(ret){var retLength = ret.length-1;var wkt = "POLYGON(";for(var i=0;i<ret.length;i++){if(i==retLength){wkt+=ret[i].x+' '+ret[i].y;break;}wkt+=ret[i].x+' '+ret[i].y+',';}wkt+=")";//console.log(wkt);//addFeature(wkt, vector_layer);var wkt_c = new OpenLayers.Format.WKT();var geometry = wkt_c.read(wkt);geometry.style={strokeWidth:2,strokeColor: "red", strokeOpacity: 1, fillOpacity:1,fillColor:"red",}vector_layer.addFeatures(geometry);}  </script> </HEAD> <BODY onload="init()"><input type="button" value="获取所有多边形" onclick="getRings()">    <div id="map" class=""></div> </BODY></HTML>

完整包下载地址:http://download.csdn.net/detail/wd4java/8554335

0 0