Openlayers学习笔记——Geometry 和 Feature类

来源:互联网 发布:急用淘宝赚钱 编辑:程序博客网 时间:2024/05/18 01:49

   Geometry
   Geometry类是feature对象的基本组成部分,Vector类采用Geometry类来存储一个要素的几何信息。
   
   Feature
   Feature类是Vector类用来在地图上展示几何对象,是Vector图层类一个属性。这个属性是个要素数组。
   要素基类有两个部分,Geometry对象和attributes属性,attributes包含要素相关的数据。在OpenLayers中Vector图层对应着一个Feature.Vector类,该类除了继承了父类的Geometry和attributes属性之外,还添加了一个控制要素外观的style属性。
   1.要素类的方法
     %destroy():销毁要素对象;
     %clone:复制要素对象;
     %getVisibilrty():判断指定要素是否显示出来;
     %move():将要素对象移动到location,location一般是OpenLayers.LonLat对象。
   2.要素对象初始化
     创建要素对象:
        var my_feature=new OpenLayers.Feature.Vector(geometry_object,attributes,style);
    geometry_object是个几何对象。attributes对象是个可选对象可指定要素数据的属性数据,附加数据如{'building_area':18000,'building_floors':2},style对象也是可选的,可以指定要素的样式。
    
    3.要素间的交互类——Control.SelectFeature
    在OpenLayers中,矢量数据是加载到客户端的,所以与矢量要素的交互是实时的,快速的,在选择要素时它不需要向服务器请求数据。
    在选择要素时,我们需要应用SelectFeature control类(OpenLayers.Control.SelectFeature)。该控制类允许我们与要素对象交互,比如当鼠标移动到或点击某一要素时做些处理。
    %SelectFeature的使用
   1) 在地图、矢量图层、要素添加到矢量图层后,我们首先创建selectFeature类
    var select_feature_control=new Openlayers.Control.SelectFeature(vector_layer,{
   multiple:false,
   toggle:true,
   multipleKey:'shiftKey'
});
   map.addControl(select_feature_control);
   2)完成上面代码,我们就已经将selectFeature添加到了地图上,但是在我们使用之前需要调用一个activate方法。
   select_feature_control.activate();
   3) 现在我们可以选择要素了,在此注意multiple属性值为false,说明在鼠标点击要素时一次只能选择一个,若是需要多选可以将其改为true,或者按住shift进行多选。
   4) 选择要素过程中需要指定相关事件的执行函数,这里我们调用featureselected事件。
     function select_feature(event){
      document.getElmentById('map_feature_log').innerHTML='';
            
      //Show the current selected feature (passed in from the 
event object) 
      var display_text = 'Clicked on: ' 
          + '<strong>' + event.feature.attributes.location + '</
strong>' 
          + ': ' + event.feature.attributes.description + '<hr 
/>'; 
    document.getElementById('map_feature_log').innerHTML = 
display_text; 
         
    //Show all the selected features 
    document.getElementById('map_feature_log').innerHTML += 'All 
selected features: '; 
    //Now, loop through the selected feature array 
    for(var i=0; i<vector_layer.selectedFeatures.length; i++){ 
            document.getElementById('map_feature_log').innerHTML 
+= 
                vector_layer.selectedFeatures[i].attributes.
location + ' | '; 
        }
  }
    }
     5) 注册函数与事件的联系
      vector_layer.events.register('featureselected',this,selected_feature);
     6) 允许查看效果