diff --git a/modules/core/tree.js b/modules/core/tree.js index 8ee81e6a1..179cc7d1b 100644 --- a/modules/core/tree.js +++ b/modules/core/tree.js @@ -66,26 +66,35 @@ export function coreTree(head) { tree.intersects = function(extent, graph) { if (graph !== head) { var diff = coreDifference(head, graph); - var insertions = {}; + var changed = diff.didChange; - head = graph; + if (changed.addition || changed.deletion || changed.geometry) { + var insertions = {}; + head = graph; - diff.deleted().forEach(function(entity) { - rtree.remove(bboxes[entity.id]); - delete bboxes[entity.id]; - }); + if (changed.deletion) { + diff.deleted().forEach(function(entity) { + rtree.remove(bboxes[entity.id]); + delete bboxes[entity.id]; + }); + } - diff.modified().forEach(function(entity) { - rtree.remove(bboxes[entity.id]); - insertions[entity.id] = entity; - updateParents(entity, insertions, {}); - }); + if (changed.geometry) { + diff.modified().forEach(function(entity) { + rtree.remove(bboxes[entity.id]); + insertions[entity.id] = entity; + updateParents(entity, insertions, {}); + }); + } - diff.created().forEach(function(entity) { - insertions[entity.id] = entity; - }); + if (changed.addition) { + diff.created().forEach(function(entity) { + insertions[entity.id] = entity; + }); + } - rtree.load(Object.values(insertions).map(entityBBox)); + rtree.load(Object.values(insertions).map(entityBBox)); + } } return rtree.search(extent.bbox())