From 6407fa464c60f04927745e8968866867c081bf3b Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Wed, 16 Jan 2013 14:06:11 -0500 Subject: [PATCH] Run intersection on difference changes, do not use compact. Fixes #334 --- js/id/graph/way.js | 3 ++- js/id/renderer/map.js | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/js/id/graph/way.js b/js/id/graph/way.js index 77858d29a..5c3e1210b 100644 --- a/js/id/graph/way.js +++ b/js/id/graph/way.js @@ -6,7 +6,8 @@ iD.Way = iD.Entity.extend({ return resolver.transient(this, 'extent', function() { var extent = [[-Infinity, Infinity], [Infinity, -Infinity]]; for (var i = 0, l = this.nodes.length; i < l; i++) { - var node = resolver.entity(this.nodes[i]); + var node = this.nodes[i]; + if (node.loc === undefined) node = resolver.entity(node); if (node.loc[0] > extent[0][0]) extent[0][0] = node.loc[0]; if (node.loc[0] < extent[1][0]) extent[1][0] = node.loc[0]; if (node.loc[1] < extent[0][1]) extent[0][1] = node.loc[1]; diff --git a/js/id/renderer/map.js b/js/id/renderer/map.js index 764fa83ae..9d80676f4 100644 --- a/js/id/renderer/map.js +++ b/js/id/renderer/map.js @@ -65,18 +65,21 @@ iD.Map = function() { var only = {}; for (var j = 0; j < difference.length; j++) { var id = difference[j]; - only[id] = graph.fetch(id); - if (only[id] && only[id].type === 'node') { - var parents = graph.parentWays(only[id]); - for (var k = 0; k < parents.length; k++) { - // Don't re-fetch parents - if (only[parents[k].id] === undefined) { - only[parents[k].id] = graph.fetch(parents[k].id); + var entity = graph.fetch(id); + if (entity && entity.intersects(extent, graph)) { + only[id] = entity; + if (only[id].type === 'node') { + var parents = graph.parentWays(only[id]); + for (var k = 0; k < parents.length; k++) { + // Don't re-fetch parents + if (only[parents[k].id] === undefined) { + only[parents[k].id] = graph.fetch(parents[k].id); + } } } } } - all = _.compact(_.values(only)); + all = _.values(only); filter = function(d) { return d.midpoint ? d.way in only : d.id in only; }; }