From 4a1e5691c2101195a0d15491733db0df9b7489f5 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Sun, 28 Oct 2012 11:58:41 -0400 Subject: [PATCH] Optimize marker lookup --- js/iD/renderer/markers.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/js/iD/renderer/markers.js b/js/iD/renderer/markers.js index 5828965f4..bcb4a18c4 100644 --- a/js/iD/renderer/markers.js +++ b/js/iD/renderer/markers.js @@ -1,4 +1,4 @@ -iD.markers = [ +iD._markers = [ // http://svn.openstreetmap.org/applications/rendering/mapnik/inc/layer-amenity-symbols.xml.inc { tags: { aeroway: 'helipad' }, @@ -548,19 +548,27 @@ iD.markers = [ } ]; +iD._markertable = (function(markers) { + var table = {}; + for (var i = 0; i < markers.length; i++) { + var marker = markers[i]; + // single-tag matches, the easy case + if (Object.keys(marker.tags).length === 1) { + for (var k in marker.tags) { + var key = k + '=' + marker.tags[k]; + table[key] = marker.icon; + } + } + } + return table; +})(iD._markers); iD.markerimage = function(d) { // TODO: optimize - for (var i = 0; i < iD.markers.length; i++) { - var tl = Object.keys(iD.markers[i].tags).length; - var tf = 0; - for (var k in iD.markers[i].tags) { - if (d.tags[k] && d.tags[k] == iD.markers[i].tags[k]) { - tf++; - } - } - if (tf == tl) { - return 'icons/' + iD.markers[i].icon + '.png'; + for (var k in d.tags) { + var key = k + '=' + d.tags[k]; + if (iD._markertable[key]) { + return 'icons/' + iD._markertable[key] + '.png'; } } };