Give Layer.Vector a getFeatureByFid and a getFeatureBy method. Thanks vog for this very clean patch and the verbose unit tests. r=me (closes #2722)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10691 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -823,30 +823,61 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
var featureId = this.renderer.getFeatureIdFromEvent(evt);
|
var featureId = this.renderer.getFeatureIdFromEvent(evt);
|
||||||
return this.getFeatureById(featureId);
|
return this.getFeatureById(featureId);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIMethod: getFeatureById
|
* APIMethod: getFeatureBy
|
||||||
* Given a feature id, return the feature if it exists in the features array
|
* Given a property value, return the feature if it exists in the features array
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* featureId - {String}
|
* property - {String}
|
||||||
|
* value - {String}
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* {<OpenLayers.Feature.Vector>} A feature corresponding to the given
|
* {<OpenLayers.Feature.Vector>} A feature corresponding to the given
|
||||||
* featureId
|
* property value or null if there is no such feature.
|
||||||
*/
|
*/
|
||||||
getFeatureById: function(featureId) {
|
getFeatureBy: function(property, value) {
|
||||||
//TBD - would it be more efficient to use a hash for this.features?
|
//TBD - would it be more efficient to use a hash for this.features?
|
||||||
var feature = null;
|
var feature = null;
|
||||||
for(var i=0, len=this.features.length; i<len; ++i) {
|
for(var i=0, len=this.features.length; i<len; ++i) {
|
||||||
if(this.features[i].id == featureId) {
|
if(this.features[i][property] == value) {
|
||||||
feature = this.features[i];
|
feature = this.features[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return feature;
|
return feature;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIMethod: getFeatureById
|
||||||
|
* Given a feature id, return the feature if it exists in the features array
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* featureId - {String}
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {<OpenLayers.Feature.Vector>} A feature corresponding to the given
|
||||||
|
* featureId or null if there is no such feature.
|
||||||
|
*/
|
||||||
|
getFeatureById: function(featureId) {
|
||||||
|
return this.getFeatureBy('id', featureId);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIMethod: getFeatureByFid
|
||||||
|
* Given a feature fid, return the feature if it exists in the features array
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* featureFid - {String}
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {<OpenLayers.Feature.Vector>} A feature corresponding to the given
|
||||||
|
* featureFid or null if there is no such feature.
|
||||||
|
*/
|
||||||
|
getFeatureByFid: function(featureFid) {
|
||||||
|
return this.getFeatureBy('fid', featureFid);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unselect the selected features
|
* Unselect the selected features
|
||||||
* i.e. clears the featureSelection array
|
* i.e. clears the featureSelection array
|
||||||
|
|||||||
@@ -154,6 +154,47 @@
|
|||||||
t.eq(extent.toBBOX(), "-111.04,45.68,-111.04,45.68", "extent from getDataExtent is correct");
|
t.eq(extent.toBBOX(), "-111.04,45.68,-111.04,45.68", "extent from getDataExtent is correct");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Layer_Vector_getFeature(t) {
|
||||||
|
t.plan(13);
|
||||||
|
|
||||||
|
var layer = new OpenLayers.Layer.Vector(name);
|
||||||
|
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-111.04, 45.68));
|
||||||
|
|
||||||
|
t.ok(layer.getFeatureById(feature.id) == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureById returns null while the layer is empty");
|
||||||
|
t.ok(layer.getFeatureByFid('my_fid') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureByFid returns null while the layer is empty");
|
||||||
|
|
||||||
|
layer.addFeatures([feature]);
|
||||||
|
|
||||||
|
t.ok(layer.getFeatureByFid('my_fid') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureByFid returns null on unset feature fid");
|
||||||
|
|
||||||
|
feature.fid = 'my_fid';
|
||||||
|
|
||||||
|
t.ok(layer.getFeatureById(feature.id) == feature,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureById returns the correct feature");
|
||||||
|
t.ok(layer.getFeatureByFid(feature.fid) == feature,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureByFid returns the correct feature");
|
||||||
|
t.ok(layer.getFeatureById('some_id_that_does_not_exist') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureById returns null on non-existing feature id");
|
||||||
|
t.ok(layer.getFeatureByFid('some_fid_that_does_not_exist') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureByFid returns null on non-existing feature fid");
|
||||||
|
t.ok(layer.getFeatureById(feature.fid) == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureById ignores the feature fid");
|
||||||
|
t.ok(layer.getFeatureByFid(feature.id) == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureByFid ignores the feature id");
|
||||||
|
|
||||||
|
t.ok(layer.getFeatureBy('id', feature.id) == feature,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureBy('id', ...) works like getFeatureById on existing feature id");
|
||||||
|
t.ok(layer.getFeatureBy('id', 'some_id_that_does_not_exist') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureBy('id', ...) works like getFeatureById on non-existing feature id");
|
||||||
|
t.ok(layer.getFeatureBy('fid', feature.fid) == feature,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureBy('fid', ...) works like getFeatureByFid on existing feature fid");
|
||||||
|
t.ok(layer.getFeatureBy('fid', 'some_fid_that_does_not_exist') == null,
|
||||||
|
"OpenLayers.Layer.Vector.getFeatureBy('fid', ...) works like getFeatureByFid on non-existing feature fid");
|
||||||
|
}
|
||||||
|
|
||||||
function test_Layer_Vector_getDataExtent(t) {
|
function test_Layer_Vector_getDataExtent(t) {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
var layer = new OpenLayers.Layer.Vector(name);
|
var layer = new OpenLayers.Layer.Vector(name);
|
||||||
|
|||||||
Reference in New Issue
Block a user