OpenLayers-Vector图层Feature选择工具

1、创建Vector图层

1 var vlayer = new OpenLayers.Layer.Vector("Vector Layer");
2 map.addLayer(vlayer);

2、创建Select Tool

1 // 创建select control
2 var sf = new OpenLayers.Control.SelectFeature(vlayer); 3 // 将select control添加到map上 4 map.addControl(sf ); 5 // 激活select control,否则select control不可用 6 sf.activate();

3、 定义Select/UnSelect事件响应函数

复制代码
 1 // Feature 选中事件响应
 2 function onFeatureSelect (feature)  3 {  4 alert("onFeatureSelect");  5 }  6 // Feature取消选中事件响应  7 function onFeatureUnselect (feature)  8 {  9 alert("onFeatureUnselect"); 10 } 
复制代码

4、 注册事件

1 // 注册Select事件
2 sf.onSelect = onSelectFeature;
3 // 注册取消Select事件 4 sf.onUnselect = onUnSelectFeature;

5、更新onFeatureSelect函数,实现选中Feature时,弹出属性框功能

复制代码
 1 function onFeatureSelect (feature) {
 2     selectedFeature = feature;
 3 popup = new OpenLayers.Popup.FramedCloud("chicken",  4  feature.geometry.getBounds().getCenterLonLat(),  5 null,  6 "<div style='font-size:.8em'>Feature: " + feature.id +"<br />Area: " + feature.geometry.getArea()+"</div>",  7 null,  8 true,  9  onPopupClose); 10 feature.popup = popup; 11  map.addPopup(popup); 12 }
复制代码

定义关闭Popup框的响应函数,在这个函数中,取消选中图元的选择。

1 function onPopupClose (evt) {
2      // 取消选择 3  select_control.unselect(selectedFeature); 4 }

6、更新取消选择事件响应函数

图元取消选择后,就删除弹出的对话框

复制代码
1 // Feature取消选中事件响应
2 function onFeatureUnselect (feature) 3 { 4  map.removePopup(feature.popup); 5  feature.popup.destroy(); 6 feature.popup = null; 7 } 
复制代码

下图为鼠标点击选中图元,弹出对话框,显示图元的ID和面积 

下图为鼠标点击空白区域,需要选择,删除原来的对话框

 

 

完整代码

复制代码
  1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2 <HTML>  3 <HEAD>  4 <TITLE> OpenLayer : Feature Select </TITLE>  5 <link rel="stylesheet" href="./OpenLayers-2.10/theme/default/style.css" type="text/css" />  6 <link rel="stylesheet" href="./css/style.css" type="text/css" />  7 <script src="./OpenLayers-2.10/lib/OpenLayers.js"></script>  8 <script type="text/javascript">  9  10 var map = null;  11 var wms_url = "http://192.168.111.156:8080/geoserver/wms?";  12 var wms_version = "1.3.0";  13 var layer_name = 'country';  14  15 var wms_layer = null;  16 var vector_layer = null;  17 var select_control = null; // SelectFeature Control  18  19 var wkt_reader = null;  20 var point = "POINT(-10 -10)";  21 var line = "LINESTRING(-180 90, 0 0)";  22 var polygon = "POLYGON(0 0,0 90,180 90,180 0,0 0)";  23  24 function init()  25  {  26 //创建map对象,  27  map = new OpenLayers.Map("map");  28  wms_layer = new OpenLayers.Layer.WMS("OpenLayers WMS",  29  wms_url,  30  {layers: layer_name, version: wms_version},  31  {singleTile: true});  32  33  vector_layer = new OpenLayers.Layer.Vector("Vector");  34  35 // 添加图层  36  map.addLayers([wms_layer, vector_layer]);  37  map.addControl( new OpenLayers.Control.LayerSwitcher() );  38  39 // 在Vector图层上添加图元element  40  addFeature(point , vector_layer);  41  addFeature(line , vector_layer);  42  addFeature(polygon, vector_layer);  43  44  addSelectControl(map, vector_layer);  45  46 // 放大到全屏  47  map.zoomToMaxExtent();  48  }  49  50 function addSelectControl(map, vector_layer)  51  {  52 if(select_control!=null)  53  {  54 return ;  55  }  56  alert("addSelectControl");  57  select_control =  58 new OpenLayers.Control.SelectFeature(vector_layer,  59  {  60  hover: false,  61  onSelect: onFeatureSelect,  62  onUnselect: onFeatureUnselect 
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值