1. 程式人生 > >Openlayers通過feature獲取Layer以及通過點獲取線feature

Openlayers通過feature獲取Layer以及通過點獲取線feature

Openlayers雖然提供了很多方法, 一般是從圖層(Layer)獲取獲取元素(feature),或者從元素(Feature)獲取座標(Coordinate)。獲取到的一般都是集合。但是想要反著通過元素(feature)獲取圖層(Layer),需要另外寫一個方法。

OL選擇線元素有一個BUG,一般選擇到的是線上的點元素,而不是線元素,因此需要寫一個方法通過這個點元素去獲取線元素。下面主要是我使用的方法。

1、從元素獲取圖層。

function getLayer(feature,map){
   var layers = map.getLayers();
   for(var i=0;i<layers.length;i++){
       var source = layers[i].getSource();
       if(source instanceof ol.source.Vector){
          var features = source.getFeatures();
          if(features.length>0){
  	     for(var j=0;j<features.length;j++){
     		if(features[j]===feature){
		   return layers[i];
		}
	     }
	  }
       }
   }
   return null;
}

2、從點元素獲取線元素

function getLayer(Point,map){
   var layers = map.getLayers();
   for(var i=0;i<layers.length;i++){
       var source = layers[i].getSource();
       if(source instanceof ol.source.Vector){
          var features = source.getFeatures();
          if(features.length>0){
			 for(var j=0;j<features.length;j++){
				if(features[j].getGeometry().getType()=="LineString"){
				   var Line = features[j];
				   var Points = Line.getGeometry().getCoordinates();
				   for (var k = 0; k < Points.length; k++) {
						var p = Point.getGeometry().getLastCoordinate();
						if (Points[k][0] == p[0] && Points[k][1] == p[1]) {
							return Line;
						}
					}
				}
			 }
		  }
      }
   }
   return null;
}

為了方便,我講方法整合成了一個JS檔案。http://download.csdn.net/detail/feishusang/9778451