#628 - a feature has a geometry - a geometry doesn't have a feature - features are rendered, selected, moved, modified, etc - down in the renderer, expando properties on nodes are limited to _featureId, _style, and _options - this removes expandos that created circular references back through the map and to other dom elements - when the renderer is involved in selecting features, it returns a featureId (instead of a geometry or feature) and the layer is responsible for fetching the appropriate feature

git-svn-id: http://svn.openlayers.org/trunk/openlayers@3043 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2007-04-10 16:07:56 +00:00
parent 8af1822d94
commit 645bff1286
21 changed files with 335 additions and 336 deletions
+10 -16
View File
@@ -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 = "<ul>";
for(var i in geometry.feature.attributes)
html += "<li><b>" + i + "</b>: "+ geometry.feature.attributes[i] + "</li>";
for(var i in feature.attributes)
html += "<li><b>" + i + "</b>: "+ feature.attributes[i] + "</li>";
html += "</ul>";
$('feature_info').innerHTML = html;
}
+2 -2
View File
@@ -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;
+3 -3
View File
@@ -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 ]);
+2 -2
View File
@@ -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;