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
转载自:https://blog.csdn.net/feishusang/article/details/61616101