[OpenLayers-Commits] r2346 - sandbox/vector-2.4/lib/OpenLayers/Layer
commits at openlayers.org
commits at openlayers.org
Mon Mar 5 16:34:44 EST 2007
Author: crschmidt
Date: 2007-03-05 16:34:43 -0500 (Mon, 05 Mar 2007)
New Revision: 2346
Modified:
sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js
Log:
Vectors do not display correctly if they are drawn before the layer has a
center. Add a 'drawn' flag that is set the first time a center is set on
the map. In addition, many of the reader/writer functions of the layer
should instead be on a WFS layer or similar, so this layer is now much
simpler.
Modified: sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js
===================================================================
--- sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js 2007-03-05 21:12:39 UTC (rev 2345)
+++ sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js 2007-03-05 21:34:43 UTC (rev 2346)
@@ -25,17 +25,21 @@
map: null,
- url: '',
-
- /** @type OpenLayers.Parser */
- parser: null,
-
- /** @type OpenLayers.Writer */
- writer: null,
-
- /** @type string */
+ /**
+ * geometryType allows you to limit the types of geometries this
+ * layer supports. This should be set to something like
+ * "OpenLayers.Geometry.Point" to limit types.
+ *
+ * @type string
+ */
geometryType: null,
+ /** Whether the Vector Layer features have been drawn yet.
+ *
+ * @type boolean
+ */
+ drawn: false,
+
/**
* @constructor
*
@@ -48,20 +52,14 @@
if (!this.renderer) {
this.renderer = document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG", "1.1") ?
- new OpenLayers.Renderer.SVG(this.div) :
- new OpenLayers.Renderer.VML(this.div);
+ new OpenLayers.Renderer.SVG(this.div) :
+ new OpenLayers.Renderer.VML(this.div);
}
if (!this.style) {
this.style = OpenLayers.Style.DefaultRendererStyle;
}
- // load features
- if (!this.parser) {
- //this.parser = new OpenLayers.Parser.GML();
- //this.parser.load(this.url, this.map.bbox, this.requestSuccess, this.requestFailure);
- }
-
this.features = new Array();
this.selection = new Array();
},
@@ -86,6 +84,15 @@
this.renderer.setExtent(extent.left, extent.top,
extent.getWidth(), extent.getHeight());
}
+
+ if (!this.drawn) {
+ this.drawn = true;
+ for(var i = 0; i < this.features.length; i++) {
+ var style = this.features[i].geometry.style || this.style;
+ this.renderer.drawGeometry(this.features[i].geometry, style);
+
+ }
+ }
},
/**
@@ -108,21 +115,19 @@
for (var i = 0; i < features.length; i++) {
if (this.geometryType &&
!(features[i].geometry instanceof this.geometryType)) {
- console.log(features[i].geometry);
throw "addFeatures : component should be an " + this.geometryType.prototype.CLASS_NAME;
}
+
var style = features[i].geometry.style || this.style;
- var feature = this.renderer.drawGeometry(features[i].geometry, style);
- /*
- TODO
+
+ if (this.drawn) {
+ var feature = this.renderer.drawGeometry(features[i].geometry, style);
+ }
+
features[i].geometry.setEvents();
- features[i].toState(OpenLayers.State.INSERT);
-
+
if (features[i].state == OpenLayers.State.INSERT) {
this.onFeatureInsert(features[i]);
- } else if (features[i].state == OpenLayers.State.UNKNOWN) {
- this.onFeatureUnknown(features[i]);
- }*/
}
return features;
@@ -134,7 +139,7 @@
}
for (var i = 0; i < features.length; i++) {
- //this.features = OpenLayers.Util.removeItem(this.features, features[i]);
+ this.features = OpenLayers.Util.removeItem(this.features, features[i]);
var geometry = features[i].geometry;
if (geometry.components) {
@@ -146,29 +151,9 @@
}
}
-
- // update the feature state
- for(var i = 0; i < features.length; i++) {
- features[i].toState(OpenLayers.State.DELETE);
- }
-
return features;
},
- updateFeatures: function(features) {
- // update the feature state
- for (var i = 0; i < features.length; i++) {
- features[i].toState(OpenLayers.State.UPDATE);
-
- // only call if a feature is updated
- // ie. its state may be OpenLayers.State.INSERT
- if (features[i].state == OpenLayers.State.UPDATE) {
- this.onFeatureUpdate(features[i]);
- }
- }
-
- },
-
redrawFeature: function(fid, style) {
for (var i = 0; i < this.features.length; i++) {
var feature = this.features[i];
@@ -182,7 +167,6 @@
* Unselect the selected features
* i.e. clears the featureSelection array
* change the style back
- */
clearSelection: function() {
for (var i = 0; i < this.map.featureSelection.length; i++) {
@@ -190,45 +174,17 @@
}
this.map.featureSelection = [];
},
-
- /**
- * method called when a feature is updated
*/
- onFeatureUpdate: function(feature) {
- //console.log("feature updated");
- },
+
/**
- * method called when a feature is inserted
+ * method called when a feature is inserted.
+ * Does nothing by default. Override this if you
+ * need to do something on feature updates.
*/
onFeatureInsert: function(feature) {
- this.map.events.triggerEvent("insertfeature", feature);
},
- /**
- * method called when a feature is added as unknown
- */
- onFeatureUnknown: function(feature) {
- this.map.events.triggerEvent("unknownfeature", feature);
- },
-
-
- commit: function() {
- if (!this.writer) {
- this.writer = new OpenLayers.Writer.WFS();
- }
-
- var commitSuccess = this.commitSuccess.bind(this);
- var commitFailure = this.commitFailure.bind(this);
- this.writer.commit(this.url, this.features, commitSuccess, commitFailure);
- // foreach features: set state to null
- },
-
- /**
- * refreshes all the features of the layer
- */
- refresh: function() {},
-
/** @final @type String */
CLASS_NAME: "OpenLayers.Layer.Vector"
});
More information about the Commits
mailing list