From 7b908631984ee0954f1307973a8ed184b0350fed Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Mon, 27 Jul 2009 16:50:33 +0000 Subject: [PATCH] Instead of storing the geometry on all nodes (increasing memory drain) we only store what the indexer needs. The bounds bottom is only used in the compare method when checking for z and y ordering. r=ahocevar (closes #2198) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9590 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/Elements.js | 12 ++---- tests/Renderer/Elements.html | 60 ++++++++++++++++------------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/lib/OpenLayers/Renderer/Elements.js b/lib/OpenLayers/Renderer/Elements.js index 2c7c514b5c..38b30ba0a5 100644 --- a/lib/OpenLayers/Renderer/Elements.js +++ b/lib/OpenLayers/Renderer/Elements.js @@ -318,12 +318,9 @@ OpenLayers.ElementsIndexer.IndexingMethods = { nextNode ); - if (nextNode && returnVal == 0) { - var newLat = newNode._geometry.getBounds().bottom; - var nextLat = nextNode._geometry.getBounds().bottom; - - var result = nextLat - newLat; - returnVal = (result ==0) ? 1 : result; + if (nextNode && returnVal === 0) { + var result = nextNode._boundsBottom - newNode._boundsBottom; + returnVal = (result === 0) ? 1 : result; } return returnVal; @@ -560,7 +557,7 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { // Set the data for the node, then draw it. node._featureId = featureId; - node._geometry = geometry; + node._boundsBottom = geometry.getBounds().bottom; node._geometryClass = geometry.CLASS_NAME; node._style = style; @@ -697,7 +694,6 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { break; } - node._style = style; node._options = options; //set style diff --git a/tests/Renderer/Elements.html b/tests/Renderer/Elements.html index 69adc7cf42..2111a59a83 100644 --- a/tests/Renderer/Elements.html +++ b/tests/Renderer/Elements.html @@ -155,9 +155,10 @@ r.getNodeType = function(geometry, style) { return "div"; }; - geometry = { + var geometry = { id: 'foo', - CLASS_NAME: 'bar' + CLASS_NAME: 'bar', + getBounds: function() {return {bottom: 0}} }; var style = {'backgroundGraphic': 'foo'}; var featureId = 'dude'; @@ -191,6 +192,10 @@ setUp(); + var geometry = { + getBounds: function() {return {bottom: 0}} + } + var r = create_renderer(); var element = document.createElement("div"); @@ -210,9 +215,9 @@ properDraw = true; return {}; }; - geometry = {CLASS_NAME: 'OpenLayers.Geometry.Point'}; + var point = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.Point'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(point, style); t.ok(properDraw, "drawGeometry called drawPoint when passed a point"); // line string @@ -221,9 +226,9 @@ properDraw = true; return {}; }; - geometry = {id: "foo", CLASS_NAME: 'OpenLayers.Geometry.LineString'}; + var linestring = OpenLayers.Util.applyDefaults({id: "foo", CLASS_NAME: 'OpenLayers.Geometry.LineString'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(linestring, style); t.ok(properDraw, "drawGeometry called drawLineString when passed a line string"); // linear ring @@ -232,9 +237,9 @@ properDraw = true; return {}; }; - geometry = {CLASS_NAME: 'OpenLayers.Geometry.LinearRing'}; + var linearring = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.LinearRing'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(linearring, style); t.ok(properDraw, "drawGeometry called drawLinearRing when passed a linear ring"); // polygon @@ -243,9 +248,9 @@ properDraw = true; return {}; }; - geometry = {CLASS_NAME: 'OpenLayers.Geometry.Polygon'}; + var polygon = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.Polygon'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(polygon, style); t.ok(properDraw, "drawGeometry called drawPolygon when passed a polygon"); // surface @@ -254,9 +259,9 @@ properDraw = true; return {}; } - geometry = {CLASS_NAME: 'OpenLayers.Geometry.Surface'}; + var surface = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.Surface'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(surface, style); t.ok(properDraw, "drawGeometry called drawSurface when passed a surface"); // rectangle @@ -265,9 +270,9 @@ properDraw = true; return {}; }; - geometry = {CLASS_NAME: 'OpenLayers.Geometry.Rectangle'}; + var rectangle = OpenLayers.Util.applyDefaults({CLASS_NAME: 'OpenLayers.Geometry.Rectangle'}, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(rectangle, style); t.ok(properDraw, "drawGeometry called drawRectangle when passed a rectangle"); // multi-point @@ -276,12 +281,12 @@ properDraw = true; return {}; }; - geometry = { + var multipoint = OpenLayers.Util.applyDefaults({ CLASS_NAME: 'OpenLayers.Geometry.MultiPoint', - components: [{CLASS_NAME: 'OpenLayers.Geometry.Point'}] - }; + components: [point] + }, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(multipoint, style); t.ok(properDraw, "drawGeometry called drawPoint when passed a multi-point"); // multi-linestring @@ -290,12 +295,12 @@ properDraw = true; return {}; }; - geometry = { + var multilinestring = OpenLayers.Util.applyDefaults({ CLASS_NAME: 'OpenLayers.Geometry.MultiLineString', - components: [{CLASS_NAME: 'OpenLayers.Geometry.LineString'}] - }; + components: [linestring] + }, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(multilinestring, style); t.ok(properDraw, "drawGeometry called drawLineString when passed a multi-linestring"); // multi-polygon @@ -304,12 +309,12 @@ properDraw = true; return {}; }; - geometry = { + var multipolygon = OpenLayers.Util.applyDefaults({ CLASS_NAME: 'OpenLayers.Geometry.MultiPolygon', - components: [{CLASS_NAME: 'OpenLayers.Geometry.Polygon'}] - }; + components: [polygon] + }, geometry); style = true; - r.drawGeometry(geometry, style); + r.drawGeometry(multipolygon, style); t.ok(properDraw, "drawGeometry called drawPolygon when passed a multi-polygon"); tearDown(); @@ -489,7 +494,8 @@ var geometry = { id: 'foo', - CLASS_NAME: 'bar' + CLASS_NAME: 'bar', + getBounds: function() {return {bottom: 0}} }; var style = { graphicZIndex: 10