* Remove default styling from the Feature.Vector class.
* Add a 'style' property to the layer. * When a feature is added to a layer, either uses the style on the layer, or uses the default feature style. * Add test to Layer.Vector for this funcionality * Adds a preFeatureInsert hook to change a feature *before* drawing it. * Change openmnnd demo to include the use of preFeatureInsert and style attribute on layer. git-svn-id: http://svn.openlayers.org/trunk/openlayers@2949 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
+32
-5
@@ -29,15 +29,42 @@
|
|||||||
map.addLayer(wms);
|
map.addLayer(wms);
|
||||||
|
|
||||||
wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4});
|
wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4});
|
||||||
wfs.onFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('stream_features').innerHTML = feature.layer.features.length;}
|
|
||||||
|
// preFeatureInsert can be used to set style before the feature is drawn
|
||||||
|
wfs.preFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue";
|
||||||
|
}
|
||||||
|
wfs.onFeatureInsert = function() {
|
||||||
|
$('stream_features').innerHTML = feature.layer.features.length;
|
||||||
|
}
|
||||||
map.addLayer(wfs);
|
map.addLayer(wfs);
|
||||||
|
|
||||||
pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url, {'typename':'plat'}, {ratio:1.25, minZoomLevel:8, extractAttributes: true});
|
// Or a style can be set on the layer.
|
||||||
pwfs.onFeatureInsert= function(feature) { feature.style.fillColor="green"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('plat_features').innerHTML = feature.layer.features.length;}
|
pwfsstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
|
||||||
|
OpenLayers.Util.extend(pwfsstyle, {'fillColor': 'green'});
|
||||||
|
|
||||||
|
pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url,
|
||||||
|
{'typename':'plat'},
|
||||||
|
{
|
||||||
|
ratio:1.25,
|
||||||
|
minZoomLevel:8,
|
||||||
|
extractAttributes: true,
|
||||||
|
style: pwfsstyle
|
||||||
|
});
|
||||||
|
|
||||||
|
pwfs.onFeatureInsert= function(feature) {
|
||||||
|
$('plat_features').innerHTML = feature.layer.features.length;
|
||||||
|
}
|
||||||
map.addLayer(pwfs);
|
map.addLayer(pwfs);
|
||||||
|
|
||||||
rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'}, {ratio:1.25, minZoomLevel:7, extractAttributes: true});
|
rstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
|
||||||
rwfs.onFeatureInsert= function(feature) { feature.style.strokeColor="white"; feature.style.strokeWidth="4"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('road_features').innerHTML = feature.layer.features.length; }
|
OpenLayers.Util.extend(rstyle, {'strokeColor': 'white', strokeWIdth: "4"});
|
||||||
|
rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'},
|
||||||
|
{ratio:1.25, minZoomLevel:7, extractAttributes: true, style:rstyle});
|
||||||
|
|
||||||
|
rwfs.onFeatureInsert= function(feature) {
|
||||||
|
$('road_features').innerHTML = feature.layer.features.length;
|
||||||
|
}
|
||||||
|
|
||||||
map.addLayer(rwfs);
|
map.addLayer(rwfs);
|
||||||
|
|
||||||
map.events.register('moveend', null, function() {
|
map.events.register('moveend', null, function() {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ OpenLayers.Feature.Vector.prototype =
|
|||||||
if (data) {
|
if (data) {
|
||||||
OpenLayers.Util.extend(this.attributes, data);
|
OpenLayers.Util.extend(this.attributes, data);
|
||||||
}
|
}
|
||||||
this.style = style ? style : OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
|
this.style = style ? style : null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ OpenLayers.Layer.Vector.prototype =
|
|||||||
/** @type {Boolean} */
|
/** @type {Boolean} */
|
||||||
reportError: true,
|
reportError: true,
|
||||||
|
|
||||||
|
/** @type {Object} */
|
||||||
|
style: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of supported Renderer classes. Add to this list to
|
* List of supported Renderer classes. Add to this list to
|
||||||
* add support for additional renderers. This list is ordered:
|
* add support for additional renderers. This list is ordered:
|
||||||
@@ -224,6 +227,16 @@ OpenLayers.Layer.Vector.prototype =
|
|||||||
//give feature reference to its layer
|
//give feature reference to its layer
|
||||||
feature.layer = this;
|
feature.layer = this;
|
||||||
|
|
||||||
|
if (!feature.style) {
|
||||||
|
if (this.style) {
|
||||||
|
feature.style = OpenLayers.Util.extend({}, this.style);
|
||||||
|
} else {
|
||||||
|
feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.preFeatureInsert(feature);
|
||||||
|
|
||||||
if (this.drawn) {
|
if (this.drawn) {
|
||||||
this.renderer.drawGeometry(feature.geometry, feature.style);
|
this.renderer.drawGeometry(feature.geometry, feature.style);
|
||||||
}
|
}
|
||||||
@@ -315,6 +328,17 @@ OpenLayers.Layer.Vector.prototype =
|
|||||||
*/
|
*/
|
||||||
onFeatureInsert: function(feature) {
|
onFeatureInsert: function(feature) {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method called before a feature is inserted.
|
||||||
|
* Does nothing by default. Override this if you
|
||||||
|
* need to do something when features are first added to the
|
||||||
|
* layer, but before they are drawn, such as adjust the style.
|
||||||
|
*
|
||||||
|
* @param {OpenLayers.Feature.Vector} feature
|
||||||
|
*/
|
||||||
|
preFeatureInsert: function(feature) {
|
||||||
|
},
|
||||||
|
|
||||||
/** @final @type String */
|
/** @final @type String */
|
||||||
CLASS_NAME: "OpenLayers.Layer.Vector"
|
CLASS_NAME: "OpenLayers.Layer.Vector"
|
||||||
|
|||||||
@@ -44,6 +44,17 @@
|
|||||||
|
|
||||||
t.ok(layer.features.length == 1, "OpenLayers.Layer.Vector.removeFeatures removes a feature from the features array");
|
t.ok(layer.features.length == 1, "OpenLayers.Layer.Vector.removeFeatures removes a feature from the features array");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Layer_Vector_addsStyle (t) {
|
||||||
|
t.plan(2);
|
||||||
|
layer = new OpenLayers.Layer.Vector(name);
|
||||||
|
var map = new OpenLayers.Map('map');
|
||||||
|
map.addLayer(layer);
|
||||||
|
f = new OpenLayers.Feature.Vector();
|
||||||
|
t.eq( f.style, null, "Feature style is null by default.");
|
||||||
|
layer.addFeatures(f);
|
||||||
|
t.ok( f.style != null, "Feature style is set by layer.");
|
||||||
|
}
|
||||||
|
|
||||||
function test_99_Layer_Vector_destroy (t) {
|
function test_99_Layer_Vector_destroy (t) {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user