Speed up intersects

This commit is contained in:
Tom MacWright
2012-11-15 15:06:20 -05:00
parent 3192ceed5f
commit f9c9369d06
+24 -6
View File
@@ -1,6 +1,23 @@
iD.Graph = function(entities, annotation) {
if (!(this instanceof iD.Graph)) return new iD.Graph(entities, annotation);
this.entities = entities || {};
for (var id in this.entities) {
if (this.entities[id].type === 'way') {
// top left, bottom right
var extent = [
[-Infinity, Infinity],
[Infinity, -Infinity]];
var w = this.fetch(id);
for (var j = 0, l = w.nodes.length; j < l; j++) {
if (w.nodes[j].lon > extent[0][0]) extent[0][0] = w.nodes[j].lon;
if (w.nodes[j].lon < extent[1][0]) extent[1][0] = w.nodes[j].lon;
if (w.nodes[j].lat < extent[0][1]) extent[0][1] = w.nodes[j].lat;
if (w.nodes[j].lat > extent[1][1]) extent[1][1] = w.nodes[j].lat;
}
this.entities[id]._extent = extent;
}
}
this.annotation = annotation;
};
@@ -36,18 +53,19 @@ iD.Graph.prototype = {
entity.lat < extent[0][1] &&
entity.lat > extent[1][1];
}
function wayIntersect(entity) {
return entity._extent[0][0] > extent[0][0] &&
entity._extent[1][0] < extent[1][0] &&
entity._extent[0][1] < extent[0][1] &&
entity._extent[1][1] > extent[1][1];
}
for (var i in this.entities) {
var entity = this.entities[i];
if (entity.type === 'node' && nodeIntersect(entity)) {
items.push(entity);
} else if (entity.type === 'way') {
var w = this.fetch(entity.id);
for (var j = 0; j < w.nodes.length; j++) {
if (nodeIntersect(w.nodes[j])) {
items.push(w);
break;
}
}
if (wayIntersect(w)) items.push(w);
}
}
return items;