diff --git a/examples/openmnnd.html b/examples/openmnnd.html
index 30a0c17ec6..9e1283912d 100644
--- a/examples/openmnnd.html
+++ b/examples/openmnnd.html
@@ -99,25 +99,19 @@
}
}
}
- var displayedGeom = null;
- function feature_info_hover(geometry) {
- if(geometry.parent) {
- geometry = geometry.parent;
- }
- if (displayedGeom != geometry &&
- (!geometry.feature.layer.selectedFeatures.length ||
- (geometry.feature.layer.selectedFeatures[0].geometry == geometry))) {
- feature_info(geometry);
- displaydGeom = geometry;
+ var displayedFeature = null;
+ function feature_info_hover(feature) {
+ if (displayedFeature != feature &&
+ (!feature.layer.selectedFeatures.length ||
+ (feature.layer.selectedFeatures[0] == feature))) {
+ feature_info(feature);
+ displayedFeature = feature;
}
}
- function feature_info(geometry) {
- if(geometry.parent) {
- geometry = geometry.parent;
- }
+ function feature_info(feature) {
var html = "
";
- for(var i in geometry.feature.attributes)
- html += "- " + i + ": "+ geometry.feature.attributes[i] + "
";
+ for(var i in feature.attributes)
+ html += "- " + i + ": "+ feature.attributes[i] + "
";
html += "
";
$('feature_info').innerHTML = html;
}
diff --git a/examples/wfs-scribble.html b/examples/wfs-scribble.html
index ad02311281..bb741439b8 100644
--- a/examples/wfs-scribble.html
+++ b/examples/wfs-scribble.html
@@ -35,7 +35,7 @@
df.featureAdded = function(feature) {
feature.state = OpenLayers.State.INSERT;
feature.style['strokeColor'] = "#ff0000";
- feature.layer.renderer.drawGeometry(feature.geometry, feature.style);
+ feature.layer.drawFeature(feature);
}
p.addControls([ new OpenLayers.Control.Navigation(), df ]);
@@ -47,7 +47,7 @@
for(var i = 0; i < map.layers[1].features.length; i++) {
var f = map.layers[1].features[i];
f.style['strokeColor'] = '#ee9900';
- map.layers[1].renderer.drawGeometry(f.geometry, f.style);
+ map.layers[1].drawFeature(f);
}
map.layers[1].commit();
return false;
diff --git a/examples/wfs-t.html b/examples/wfs-t.html
index 1fe0396013..7ec9fbe0ec 100644
--- a/examples/wfs-t.html
+++ b/examples/wfs-t.html
@@ -27,7 +27,7 @@
featureNS: 'http://www.openplans.org/topp',
extractAttributes: false
} );
- rlayer.onFeatureInsert=function(feature) { feature.style.strokeColor = "#ff0000"; feature.layer.renderer.drawGeometry(feature.geometry, feature.style); }
+ rlayer.onFeatureInsert=function(feature) { feature.style.strokeColor = "#ff0000"; feature.layer.drawFeature(feature); }
map.addLayer(rlayer);
layer = new OpenLayers.Layer.WFS( "Cities",
"http://dev.openlayers.org/geoserver/wfs", {typename: 'topp:tasmania_cities'},
@@ -44,7 +44,7 @@
df.featureAdded = function(feature) {
feature.state = OpenLayers.State.INSERT;
feature.style['strokeColor'] = "#0000ff";
- feature.layer.renderer.drawGeometry(feature.geometry, feature.style);
+ feature.layer.drawFeature(feature);
}
dp = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {handlerOptions: {'freehand': false}, 'displayClass': 'olControlDrawFeaturePoint'});
dp.featureAdded = function(feature) {
@@ -53,7 +53,7 @@
feature.geometry = new OpenLayers.Geometry.MultiPoint(oldgeom);
feature.state = OpenLayers.State.INSERT;
feature.style['strokeColor'] = "#0000ff";
- feature.layer.renderer.drawGeometry(feature.geometry, feature.style);
+ feature.layer.drawFeature(feature);
}
p.addControls([ new OpenLayers.Control.Navigation(), df, dp ]);
diff --git a/examples/wkt.html b/examples/wkt.html
index 220c59ead1..92c32b5f91 100644
--- a/examples/wkt.html
+++ b/examples/wkt.html
@@ -77,8 +77,8 @@
}
}
- function displayWKT(geometry) {
- var str = wkt.write(geometry);
+ function displayWKT(feature) {
+ var str = wkt.write(feature.geometry);
// not a good idea in general, just for this demo
str = str.replace(/,/g, ', ');
document.getElementById('info').innerHTML = str;
diff --git a/lib/OpenLayers/Control/SelectFeature.js b/lib/OpenLayers/Control/SelectFeature.js
index 1cacf3a20a..ebda28f0f0 100644
--- a/lib/OpenLayers/Control/SelectFeature.js
+++ b/lib/OpenLayers/Control/SelectFeature.js
@@ -27,13 +27,13 @@ OpenLayers.Control.SelectFeature.prototype =
/**
* @type {Function} Optional function to be called when a feature is selected.
- * The function should expect to be called with a geometry.
+ * The function should expect to be called with a feature.
*/
onSelect: function() {},
/**
* @type {Function} Optional function to be called when a feature is unselected.
- * The function should expect to be called with a geometry.
+ * The function should expect to be called with a feature.
*/
onUnselect: function() {},
@@ -76,31 +76,28 @@ OpenLayers.Control.SelectFeature.prototype =
/**
* Called when the feature handler detects a mouse-down on a feature
- * @param {OpenLayers.Geometry}
+ * @param {OpenLayers.Vector.Feature}
*/
- downFeature: function(geometry) {
+ downFeature: function(feature) {
if(this.hover) {
return;
}
- if(geometry.parent) {
- geometry = geometry.parent;
- }
if (this.multiple) {
- if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
- this.unselect(geometry);
+ if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) {
+ this.unselect(feature);
} else {
- this.select(geometry);
+ this.select(feature);
}
} else {
- if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
- this.unselect(geometry);
+ if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) {
+ this.unselect(feature);
} else {
if (this.layer.selectedFeatures) {
for (var i = 0; i < this.layer.selectedFeatures.length; i++) {
- this.unselect(this.layer.selectedFeatures[i].geometry);
+ this.unselect(this.layer.selectedFeatures[i]);
}
}
- this.select(geometry);
+ this.select(feature);
}
}
},
@@ -108,63 +105,57 @@ OpenLayers.Control.SelectFeature.prototype =
/**
* Called when the feature handler detects a mouse-over on a feature.
* Only responds if this.hover is true.
- * @param {OpenLayers.Geometry}
+ * @param {OpenLayers.Feature.Vector}
*/
- overFeature: function(geometry) {
+ overFeature: function(feature) {
if(!this.hover) {
return;
}
- if(geometry.parent) {
- geometry = geometry.parent;
- }
- if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) {
- this.select(geometry);
+ if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1)) {
+ this.select(feature);
}
},
/**
* Called when the feature handler detects a mouse-out on a feature.
* Only responds if this.hover is true.
- * @param {OpenLayers.Geometry}
+ * @param {OpenLayers.Feature.Vector}
*/
- outFeature: function(geometry) {
+ outFeature: function(feature) {
if(!this.hover) {
return;
}
- if(geometry.parent) {
- geometry = geometry.parent;
- }
- this.unselect(geometry);
+ this.unselect(feature);
},
/**
* Add feature to the layer's selectedFeature array, render the feature as
* selected, and call the onSelect function.
- * @param {OpenLayers.Geometry} geometry
+ * @param {OpenLayers.Feature.Vector} feature
*/
- select: function(geometry) {
+ select: function(feature) {
// Store feature style for restoration later
- if(geometry.feature.originalStyle == null) {
- geometry.feature.originalStyle = geometry.feature.style;
+ if(feature.originalStyle == null) {
+ feature.originalStyle = feature.style;
}
- this.layer.selectedFeatures.push(geometry.feature);
- this.layer.renderer.drawGeometry(geometry, this.selectStyle);
- this.onSelect(geometry);
+ this.layer.selectedFeatures.push(feature);
+ this.layer.drawFeature(feature, this.selectStyle);
+ this.onSelect(feature);
},
/**
* Remove feature from the layer's selectedFeature array, render the feature as
* normal, and call the onUnselect function.
- * @param {OpenLayers.Geometry} geometry
+ * @param {OpenLayers.Feature.Vector} feature
*/
- unselect: function(geometry) {
+ unselect: function(feature) {
// Store feature style for restoration later
- if(geometry.feature.originalStyle == null) {
- geometry.feature.originalStyle = geometry.feature.style;
+ if(feature.originalStyle == null) {
+ feature.originalStyle = feature.style;
}
- this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle);
- OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);
- this.onUnselect(geometry);
+ this.layer.drawFeature(feature, feature.originalStyle);
+ OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature);
+ this.onUnselect(feature);
},
/** Set the map property for the control.
diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js
index b53e8965a8..dd03caad56 100644
--- a/lib/OpenLayers/Feature/Vector.js
+++ b/lib/OpenLayers/Feature/Vector.js
@@ -46,7 +46,7 @@ OpenLayers.Feature.Vector.prototype =
initialize: function(geometry, data, style) {
OpenLayers.Feature.prototype.initialize.apply(this, [null, null, data]);
this.lonlat = null;
- this.setGeometry(geometry);
+ this.geometry = geometry;
this.state = null;
if (data) {
OpenLayers.Util.extend(this.attributes, data);
@@ -125,56 +125,6 @@ OpenLayers.Feature.Vector.prototype =
return null;
},
- /**
- * Set a feature id to the feature
- *
- * @param {String} feature id to set
- */
- setFid: function(fid) {
- this.fid = fid;
- },
-
- /**
- * Set a geometry to the feature
- *
- * @param {OpenLayers.Geometry} geometry to set
- * @param {Boolean} recurse Recursively set feature (for components)
- */
- setGeometry: function(geometry, recurse) {
- if(geometry) {
- this.geometry = geometry;
- this.geometry.feature = this;
- if (recurse != false) {
- this._setGeometryFeatureReference(this.geometry, this);
- }
- }
- },
-
- /**
- * Sets recursively the reference to the feature in the geometry
- *
- * @param {OpenLayers.Geometry}
- * @param {OpenLayers.Feature}
- */
- _setGeometryFeatureReference: function(geometry, feature) {
- geometry.feature = feature;
- if (geometry.components) {
- for (var i = 0; i < geometry.components.length; i++) {
- this._setGeometryFeatureReference(geometry.components[i], feature);
- }
- }
- },
-
- /**
- * Adds attributes an attributes object to the feature.
- * (should not be in geometry but in feature class)
- *
- * @param {Attributes} attributes
- */
- setAttributes: function(attributes) {
- this.attributes=attributes;
- },
-
/**
* @param {OpenLayers.LonLat} lonlat
* @param {float} toleranceLon Optional tolerance in Geometric Coords
diff --git a/lib/OpenLayers/Format/GML.js b/lib/OpenLayers/Format/GML.js
index b2639c1599..3695684ab2 100644
--- a/lib/OpenLayers/Format/GML.js
+++ b/lib/OpenLayers/Format/GML.js
@@ -165,7 +165,7 @@ OpenLayers.Format.GML.prototype =
}
}
- feature.setGeometry(geom, false);
+ feature.geometry = geom;
if (this.extractAttributes) {
feature.attributes = this.parseAttributes(xmlNode);
}
diff --git a/lib/OpenLayers/Format/KML.js b/lib/OpenLayers/Format/KML.js
index 4d7a8d13d0..7ed9378b35 100644
--- a/lib/OpenLayers/Format/KML.js
+++ b/lib/OpenLayers/Format/KML.js
@@ -80,7 +80,7 @@ OpenLayers.Format.KML.prototype =
}
}
- feature.setGeometry(geom);
+ feature.geometry = geom;
feature.attributes = this.parseAttributes(xmlNode);
return feature;
diff --git a/lib/OpenLayers/Geometry.js b/lib/OpenLayers/Geometry.js
index 23874b3815..430c11539d 100644
--- a/lib/OpenLayers/Geometry.js
+++ b/lib/OpenLayers/Geometry.js
@@ -19,14 +19,6 @@ OpenLayers.Geometry.prototype = {
/** @type OpenLayers.Bounds */
bounds: null,
-
- /**
- * Cross reference back to the feature that owns this geometry so
- * that that the feature can be identified after the geometry has been
- * selected by a mouse click.
- *
- * @type OpenLayers.Feature */
- feature: null,
/**
* @constructor
@@ -42,7 +34,6 @@ OpenLayers.Geometry.prototype = {
this.id = null;
this.bounds = null;
- this.feature = null;
},
diff --git a/lib/OpenLayers/Handler/Feature.js b/lib/OpenLayers/Handler/Feature.js
index dbf5a35a2d..dafd0297dc 100644
--- a/lib/OpenLayers/Handler/Feature.js
+++ b/lib/OpenLayers/Handler/Feature.js
@@ -21,9 +21,9 @@ OpenLayers.Handler.Feature.prototype =
layerIndex: null,
/**
- * @type {OpenLayers.Geometry}
+ * @type {OpenLayers.Feature.Vector}
*/
- geometry: null,
+ feature: null,
/**
* @constructor
@@ -33,7 +33,7 @@ OpenLayers.Handler.Feature.prototype =
* @param {Array} callbacks An object with a 'over' property whos value is
* a function to be called when the mouse is over
* a feature. The callback should expect to recieve
- * a single argument, the geometry.
+ * a single argument, the feature.
* @param {Object} options
*/
initialize: function(control, layer, callbacks, options) {
@@ -75,7 +75,7 @@ OpenLayers.Handler.Feature.prototype =
/**
* Capture double-clicks. Let the event continue propagating if the
- * double-click doesn't hit a geometry. Otherwise call the dblclick
+ * double-click doesn't hit a feature. Otherwise call the dblclick
* callback.
*
* @param {Event} evt
@@ -92,26 +92,26 @@ OpenLayers.Handler.Feature.prototype =
* @type {Boolean} A feature was selected
*/
select: function(type, evt) {
- var geometry = this.layer.renderer.getGeometryFromEvent(evt);
- if(geometry) {
+ var feature = this.layer.getFeatureFromEvent(evt);
+ if(feature) {
// three cases:
// over a new, out of the last and over a new, or still on the last
- if(!this.geometry) {
- // over a new geometry
- this.callback('over', [geometry]);
- } else if(this.geometry != geometry) {
+ if(!this.feature) {
+ // over a new feature
+ this.callback('over', [feature]);
+ } else if(this.feature != feature) {
// out of the last and over a new
- this.callback('out', [this.geometry]);
- this.callback('over', [geometry]);
+ this.callback('out', [this.feature]);
+ this.callback('over', [feature]);
}
- this.geometry = geometry;
- this.callback(type, [geometry]);
+ this.feature = feature;
+ this.callback(type, [feature]);
return true;
} else {
- if(this.geometry) {
+ if(this.feature) {
// out of the last
- this.callback('out', [this.geometry]);
- this.geometry = null;
+ this.callback('out', [this.feature]);
+ this.feature = null;
}
return false;
}
diff --git a/lib/OpenLayers/Handler/Path.js b/lib/OpenLayers/Handler/Path.js
index 748f72e28b..0b0c42a7b1 100644
--- a/lib/OpenLayers/Handler/Path.js
+++ b/lib/OpenLayers/Handler/Path.js
@@ -17,7 +17,7 @@ OpenLayers.Handler.Path.prototype =
OpenLayers.Class.inherit(OpenLayers.Handler.Point, {
/**
- * @type OpenLayers.Geometry.LineString
+ * @type OpenLayers.Feature.Vector
* @private
*/
line: null,
@@ -65,15 +65,17 @@ OpenLayers.Handler.Path.prototype =
/**
* Add temporary geometries
*/
- createGeometry: function() {
- this.line = new OpenLayers.Geometry.LineString();
- this.point = new OpenLayers.Geometry.Point();
+ createFeature: function() {
+ this.line = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.LineString());
+ this.point = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Point());
},
/**
* Destroy temporary geometries
*/
- destroyGeometry: function() {
+ destroyFeature: function() {
this.line.destroy();
this.point.destroy();
},
@@ -83,7 +85,9 @@ OpenLayers.Handler.Path.prototype =
* the behavior of LinearRing that disregards adding duplicate points.
*/
addPoint: function() {
- this.line.addComponent(this.point.clone(), this.line.components.length);
+ this.line.geometry.addComponent(this.point.geometry.clone(),
+ this.line.geometry.components.length);
+ this.callback("point", [this.point.geometry]);
},
/**
@@ -100,18 +104,18 @@ OpenLayers.Handler.Path.prototype =
* Modify the existing geometry given the new point
*
*/
- modifyGeometry: function() {
- var index = this.line.components.length - 1;
- this.line.components[index].x = this.point.x;
- this.line.components[index].y = this.point.y;
+ modifyFeature: function() {
+ var index = this.line.geometry.components.length - 1;
+ this.line.geometry.components[index].x = this.point.geometry.x;
+ this.line.geometry.components[index].y = this.point.geometry.y;
},
/**
* Render geometries on the temporary layer.
*/
- drawGeometry: function() {
- this.layer.renderer.drawGeometry(this.line, this.style);
- this.layer.renderer.drawGeometry(this.point, this.style);
+ drawFeature: function() {
+ this.layer.drawFeature(this.line, this.style);
+ this.layer.drawFeature(this.point, this.style);
},
/**
@@ -120,7 +124,7 @@ OpenLayers.Handler.Path.prototype =
* @type OpenLayers.Geometry.LineString
*/
geometryClone: function() {
- return this.line.clone();
+ return this.line.geometry.clone();
},
/**
@@ -136,17 +140,17 @@ OpenLayers.Handler.Path.prototype =
return false;
}
if(this.lastDown == null) {
- this.createGeometry();
+ this.createFeature();
}
this.mouseDown = true;
this.lastDown = evt.xy;
var lonlat = this.control.map.getLonLatFromPixel(evt.xy);
- this.point.x = lonlat.lon;
- this.point.y = lonlat.lat;
+ this.point.geometry.x = lonlat.lon;
+ this.point.geometry.y = lonlat.lat;
if((this.lastUp == null) || !this.lastUp.equals(evt.xy)) {
this.addPoint();
}
- this.drawGeometry();
+ this.drawFeature();
this.drawing = true;
return false;
},
@@ -161,14 +165,14 @@ OpenLayers.Handler.Path.prototype =
mousemove: function (evt) {
if(this.drawing) {
var lonlat = this.map.getLonLatFromPixel(evt.xy);
- this.point.x = lonlat.lon;
- this.point.y = lonlat.lat;
+ this.point.geometry.x = lonlat.lon;
+ this.point.geometry.y = lonlat.lat;
if(this.mouseDown && this.freehandMode(evt)) {
this.addPoint();
} else {
- this.modifyGeometry();
+ this.modifyFeature();
}
- this.drawGeometry();
+ this.drawFeature();
}
return true;
},
@@ -190,7 +194,6 @@ OpenLayers.Handler.Path.prototype =
this.addPoint();
}
this.lastUp = evt.xy;
- this.callback("point", [this.point]);
}
return false;
}
@@ -205,9 +208,9 @@ OpenLayers.Handler.Path.prototype =
*/
dblclick: function(evt) {
if(!this.freehandMode(evt)) {
- var index = this.line.components.length - 1;
- this.line.removeComponent(this.line.components[index]);
- this.finalize(this.line);
+ var index = this.line.geometry.components.length - 1;
+ this.line.geometry.removeComponent(this.line.geometry.components[index]);
+ this.finalize();
}
return false;
},
diff --git a/lib/OpenLayers/Handler/Point.js b/lib/OpenLayers/Handler/Point.js
index c39ac7aaf9..435ce7025d 100644
--- a/lib/OpenLayers/Handler/Point.js
+++ b/lib/OpenLayers/Handler/Point.js
@@ -16,7 +16,7 @@ OpenLayers.Handler.Point.prototype =
OpenLayers.Class.inherit(OpenLayers.Handler, {
/**
- * @type OpenLayers.Geometry.Point
+ * @type OpenLayers.Feature.Vector
* @private
*/
point: null,
@@ -87,10 +87,11 @@ OpenLayers.Handler.Point.prototype =
},
/**
- * Add temporary geometries
+ * Add temporary features
*/
- createGeometry: function() {
- this.point = new OpenLayers.Geometry.Point();
+ createFeature: function() {
+ this.point = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Point());
},
/**
@@ -112,7 +113,7 @@ OpenLayers.Handler.Point.prototype =
/**
* Destroy the temporary geometries
*/
- destroyGeometry: function() {
+ destroyFeature: function() {
this.point.destroy();
},
@@ -122,7 +123,7 @@ OpenLayers.Handler.Point.prototype =
finalize: function() {
this.layer.renderer.clear();
this.callback("done", [this.geometryClone()]);
- this.destroyGeometry();
+ this.destroyFeature();
this.drawing = false;
this.mouseDown = false;
this.lastDown = null;
@@ -135,7 +136,7 @@ OpenLayers.Handler.Point.prototype =
cancel: function() {
this.layer.renderer.clear();
this.callback("cancel", [this.geometryClone()]);
- this.destroyGeometry();
+ this.destroyFeature();
this.drawing = false;
this.mouseDown = false;
this.lastDown = null;
@@ -151,10 +152,10 @@ OpenLayers.Handler.Point.prototype =
},
/**
- * Render geometries on the temporary layer.
+ * Render features on the temporary layer.
*/
- drawGeometry: function() {
- this.layer.renderer.drawGeometry(this.point, this.style);
+ drawFeature: function() {
+ this.layer.drawFeature(this.point, this.style);
},
/**
@@ -163,7 +164,7 @@ OpenLayers.Handler.Point.prototype =
* @type OpenLayers.Geometry.Point
*/
geometryClone: function() {
- return this.point.clone();
+ return this.point.geometry.clone();
},
/**
@@ -183,14 +184,14 @@ OpenLayers.Handler.Point.prototype =
return true;
}
if(this.lastDown == null) {
- this.createGeometry();
+ this.createFeature();
}
this.lastDown = evt.xy;
this.drawing = true;
var lonlat = this.map.getLonLatFromPixel(evt.xy);
- this.point.x = lonlat.lon;
- this.point.y = lonlat.lat;
- this.drawGeometry();
+ this.point.geometry.x = lonlat.lon;
+ this.point.geometry.y = lonlat.lat;
+ this.drawFeature();
return false;
},
@@ -204,9 +205,9 @@ OpenLayers.Handler.Point.prototype =
mousemove: function (evt) {
if(this.drawing) {
var lonlat = this.map.getLonLatFromPixel(evt.xy);
- this.point.x = lonlat.lon;
- this.point.y = lonlat.lat;
- this.drawGeometry();
+ this.point.geometry.x = lonlat.lon;
+ this.point.geometry.y = lonlat.lat;
+ this.drawFeature();
}
return true;
},
@@ -220,7 +221,7 @@ OpenLayers.Handler.Point.prototype =
*/
mouseup: function (evt) {
if(this.drawing) {
- this.finalize(this.point);
+ this.finalize();
return false;
} else {
return true;
diff --git a/lib/OpenLayers/Handler/Polygon.js b/lib/OpenLayers/Handler/Polygon.js
index 31089d63d2..8225c5e038 100644
--- a/lib/OpenLayers/Handler/Polygon.js
+++ b/lib/OpenLayers/Handler/Polygon.js
@@ -16,7 +16,7 @@ OpenLayers.Handler.Polygon.prototype =
OpenLayers.Class.inherit(OpenLayers.Handler.Path, {
/**
- * @type OpenLayers.Geometry.Polygon
+ * @type OpenLayers.Feature.Vector
* @private
*/
polygon: null,
@@ -44,17 +44,20 @@ OpenLayers.Handler.Polygon.prototype =
/**
* Add temporary geometries
*/
- createGeometry: function() {
- this.polygon = new OpenLayers.Geometry.Polygon();
- this.line = new OpenLayers.Geometry.LinearRing();
- this.polygon.addComponent(this.line);
- this.point = new OpenLayers.Geometry.Point();
+ createFeature: function() {
+ this.polygon = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Polygon());
+ this.line = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.LinearRing());
+ this.polygon.geometry.addComponent(this.line.geometry);
+ this.point = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Point());
},
/**
* Destroy temporary geometries
*/
- destroyGeometry: function() {
+ destroyFeature: function() {
this.polygon.destroy();
this.point.destroy();
},
@@ -63,18 +66,18 @@ OpenLayers.Handler.Polygon.prototype =
* Modify the existing geometry given the new point
*
*/
- modifyGeometry: function() {
- var index = this.line.components.length - 2;
- this.line.components[index].x = this.point.x;
- this.line.components[index].y = this.point.y;
+ modifyFeature: function() {
+ var index = this.line.geometry.components.length - 2;
+ this.line.geometry.components[index].x = this.point.geometry.x;
+ this.line.geometry.components[index].y = this.point.geometry.y;
},
/**
* Render geometries on the temporary layer.
*/
- drawGeometry: function() {
- this.layer.renderer.drawGeometry(this.polygon, this.style);
- this.layer.renderer.drawGeometry(this.point, this.style);
+ drawFeature: function() {
+ this.layer.drawFeature(this.polygon, this.style);
+ this.layer.drawFeature(this.point, this.style);
},
/**
@@ -83,7 +86,7 @@ OpenLayers.Handler.Polygon.prototype =
* @type OpenLayers.Geometry.Polygon
*/
geometryClone: function() {
- return this.polygon.clone();
+ return this.polygon.geometry.clone();
},
/**
@@ -95,9 +98,9 @@ OpenLayers.Handler.Polygon.prototype =
dblclick: function(evt) {
if(!this.freehandMode(evt)) {
// remove the penultimate point
- var index = this.line.components.length - 2;
- this.line.removeComponent(this.line.components[index]);
- this.finalize(this.line);
+ var index = this.line.geometry.components.length - 2;
+ this.line.geometry.removeComponent(this.line.geometry.components[index]);
+ this.finalize();
}
return false;
},
diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js
index a752552932..ae8c0076a5 100644
--- a/lib/OpenLayers/Layer/Vector.js
+++ b/lib/OpenLayers/Layer/Vector.js
@@ -21,18 +21,12 @@ OpenLayers.Layer.Vector.prototype =
/** @type Boolean */
isVector: true,
- /** @type {Array(OpenLayer.Feature.Vector)} */
+ /** @type Array(OpenLayer.Feature.Vector) */
features: null,
- /** @type {Array(OpenLayers.Feature.Vector)} */
+ /** @type Array(OpenLayers.Feature.Vector) */
selectedFeatures: [],
- /** @type {Boolean} */
- editing: false,
-
- /** @type {Boolean} */
- editable: false,
-
/** @type {Boolean} */
reportError: true,
@@ -75,6 +69,7 @@ OpenLayers.Layer.Vector.prototype =
* Options renderer {Object}: Typically SVGRenderer or VMLRenderer.
*/
initialize: function(name, options) {
+ this.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
OpenLayers.Layer.prototype.initialize.apply(this, arguments);
// allow user-set renderer, otherwise assign one
@@ -102,8 +97,6 @@ OpenLayers.Layer.Vector.prototype =
// calling feature[i].destroy() here.
this.features = null;
this.selectedFeatures = null;
- this.editing = null;
- this.editable = null;
if (this.renderer) {
this.renderer.destroy();
}
@@ -172,7 +165,7 @@ OpenLayers.Layer.Vector.prototype =
/** Reset the vector layer's div so that it once again is lined up with
* the map. Notify the renderer of the change of extent, and in the
* case of a change of zoom level (resolution), have the
- * renderer reproject.
+ * renderer redraw features.
*
* If the layer has not yet been drawn, cycle through the layer's
* features and draw each one.
@@ -191,15 +184,11 @@ OpenLayers.Layer.Vector.prototype =
this.renderer.setExtent(extent);
}
- if (zoomChanged) {
- this.renderer.reproject();
- }
-
- if (!this.drawn) {
+ if (!this.drawn || zoomChanged) {
this.drawn = true;
for(var i = 0; i < this.features.length; i++) {
var feature = this.features[i];
- this.renderer.drawGeometry(feature.geometry, feature.style);
+ this.drawFeature(feature);
}
}
},
@@ -228,17 +217,13 @@ OpenLayers.Layer.Vector.prototype =
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']);
- }
+ feature.style = OpenLayers.Util.extend({}, this.style);
}
this.preFeatureInsert(feature);
if (this.drawn) {
- this.renderer.drawGeometry(feature.geometry, feature.style);
+ this.drawFeature(feature);
}
this.onFeatureInsert(feature);
@@ -271,45 +256,57 @@ OpenLayers.Layer.Vector.prototype =
},
/**
- * @param {String} fid
+ * Draw (or redraw) a feature on the layer. If the optional style argument
+ * is included, this style will be used. If no style is included, the
+ * feature's style will be used. If the feature doesn't have a style,
+ * the layer's style will be used.
+ *
+ * @param {OpenLayers.Feature.Vector} feature
* @param {Object} style
*/
- 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);
+ drawFeature: function(feature, style) {
+ if(style == null) {
+ if(feature.style) {
+ style = feature.style;
+ } else {
+ style = this.style;
}
}
+ this.renderer.drawFeature(feature, style);
},
/**
- * Start editing the layer
- *
- * @returns Whether or not the layer is editable
- * @type Boolean
+ * Given an event, return a feature if the event occurred over one.
+ * Otherwise, return null.
+ *
+ * @param {Event}
+ * @type OpenLayers.Feature.Vector
+ * @return A feature if one was under the event
*/
- unlock: function() {
- if(this.editable) {
- this.editing = true;
- }
- return this.editable;
+ getFeatureFromEvent: function(evt) {
+ var featureId = this.renderer.getFeatureIdFromEvent(evt);
+ return this.getFeatureById(featureId);
},
-
+
/**
- * Stop editing the layer
+ * Given a feature id, return the feature if it exists in the features array
*
- * @return Whether or not the layer *was* editing
- * HACK HACK This return value seems wierd to me.
- * @type Boolean
+ * @param String featureId
+ * @type OpenLayers.Feature.Vector
+ * @return A feature corresponding to the given featureId
*/
- lock: function() {
- if(this.editing) {
- this.editing = false;
+ getFeatureById: function(featureId) {
+ //TBD - would it be more efficient to use a hash for this.features?
+ var feature = null;
+ for(var i=0; i