[OpenLayers-Commits] r2313 - sandbox/vector-2.4/lib/OpenLayers/Layer
commits at openlayers.org
commits at openlayers.org
Mon Mar 5 11:53:33 EST 2007
Author: crschmidt
Date: 2007-03-05 11:53:33 -0500 (Mon, 05 Mar 2007)
New Revision: 2313
Added:
sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js
Log:
Initial Vector layer, copied from vector sandbox.
Copied: sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js (from rev 2311, sandbox/vector/lib/OpenLayers/Layer/Vector.js)
===================================================================
--- sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js (rev 0)
+++ sandbox/vector-2.4/lib/OpenLayers/Layer/Vector.js 2007-03-05 16:53:33 UTC (rev 2313)
@@ -0,0 +1,233 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
+ * for the full text of the license. */
+
+/**
+ * @class
+ *
+ * @requires OpenLayers/Layer.js
+ */
+OpenLayers.Layer.Vector = OpenLayers.Class.create();
+OpenLayers.Layer.Vector.prototype =
+ OpenLayers.Class.inherit(OpenLayers.Layer, {
+
+ /** @type Boolean */
+ isBaseLayer: false,
+
+ /** @type Boolean */
+ isFixed: false,
+
+ /** @type Boolean */
+ isVector: true,
+
+ /** @type {Array} An array of {OpenLayer.Feature} */
+ features: null,
+
+ map: null,
+
+ url: '',
+
+ /** @type OpenLayers.Parser */
+ parser: null,
+
+ /** @type OpenLayers.Writer */
+ writer: null,
+
+ /** @type string */
+ geometryType: null,
+
+ /**
+ * @constructor
+ *
+ * @param {String} name
+ * @param {Object} options Hashtable of extra options to tag onto the layer.
+ * Options renderer {Object}: Typically SvgRenderer or VmlRenderer.
+ */
+ initialize: function(name, options) {
+ OpenLayers.Layer.prototype.initialize.apply(this, arguments);
+
+ 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);
+ }
+
+ 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();
+ },
+
+ setMap: function() {
+ OpenLayers.Layer.prototype.setMap.apply(this, arguments);
+ this.renderer.setSize(this.map.getSize());
+ },
+
+ onMapResize: function() {
+ OpenLayers.Layer.prototype.onMapResize.apply(this, arguments);
+ this.renderer.setSize(this.map.getSize());
+ },
+
+ moveTo: function(bounds, zoomChanged, dragging) {
+ OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
+
+ if (!dragging) {
+ this.div.style.left = - parseInt(this.map.layerContainerDiv.style.left) + "px";
+ this.div.style.top = - parseInt(this.map.layerContainerDiv.style.top) + "px";
+ var extent = this.map.getExtent();
+ this.renderer.setExtent(extent.left, extent.top,
+ extent.getWidth(), extent.getHeight());
+ }
+ },
+
+ /**
+ * Adds features to the layer
+ *
+ * @param {array} feature collection
+ */
+ addFeatures: function(features) {
+ if (!(features instanceof Array)) {
+ features = [features];
+ }
+
+ //add reference to the layer
+ for (var i = 0; i < features.length; i++) {
+ features[i].layer = this;
+ }
+
+ this.features = this.features.concat(features);
+
+ 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);
+
+ 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;
+ },
+
+ removeFeatures: function(features) {
+ if (!(features instanceof Array)) {
+ features = [features];
+ }
+
+ for (var i = 0; i < features.length; i++) {
+ //this.features = OpenLayers.Util.removeItem(this.features, features[i]);
+
+ var geometry = features[i].geometry;
+ if (geometry.components) {
+ for (var j = 0; j < geometry.components.length; j++) {
+ this.renderer.eraseGeometry(geometry.components[i]);
+ }
+ } else {
+ this.renderer.eraseGeometry(features[i].geometry);
+ }
+ }
+
+
+ // 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];
+ if (feature.fid == fid) {
+ this.renderer.drawGeometry(feature.geometry, style);
+ }
+ }
+ },
+
+ /**
+ * 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++) {
+ this.map.vectorLayer.renderer.drawGeometry(this.map.featureSelection[i].geometry, this.map.vectorLayer.style);
+ }
+ this.map.featureSelection = [];
+ },
+
+ /**
+ * method called when a feature is updated
+ */
+ onFeatureUpdate: function(feature) {
+ //console.log("feature updated");
+ },
+
+ /**
+ * method called when a feature is inserted
+ */
+ 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