From 14272ef20042b9eca30f15b87fda18b6e582b074 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Tue, 22 Jan 2013 13:03:53 -0500 Subject: [PATCH] Add label_stack --- js/id/svg/labels.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/js/id/svg/labels.js b/js/id/svg/labels.js index f7a5d2bd4..8e6cd2baa 100644 --- a/js/id/svg/labels.js +++ b/js/id/svg/labels.js @@ -1,5 +1,13 @@ iD.svg.Labels = function(projection) { + // Replace with dict and iterate over entities tags instead? + var label_stack = [ + ['line', 'highway', ''], + ['area', 'building', 'yes'], + ['area', 'leisure', 'park'], + ['area', 'natural', ''] + ]; + var pointOffsets = [ [25, 3, 'start'], // right [-15, 3, 'end'], // left @@ -108,22 +116,21 @@ iD.svg.Labels = function(projection) { var rtree = new RTree(); - var points = [], - roads = [], - buildings = []; + var labelable = []; + for (var i = 0; i < label_stack.length; i++) labelable.push([]); for (var i = 0; i < entities.length; i++) { var entity = entities[i]; - if (entity.geometry() === 'line' && entity.tags.highway && entity.tags.name) { - roads.push(entity); - } else if (entity.geometry() === 'point' && entity.tags.name) { - points.push(entity); - } else if (entity.geometry() === 'area' && entity.tags.building && entity.tags.name) { - buildings.push(entity); + if (!entity.tags.name) continue; + for (var k = 0; k < label_stack.length; k ++) { + if (entity.geometry() === label_stack[k][0] && + entity.tags[label_stack[k][1]] && !entity.tags[label_stack[k][2]]) { + labelable[k].push(entity); + break; + } } } - var entities = roads.concat(buildings).concat(points); var positions = { point: [], @@ -137,9 +144,10 @@ iD.svg.Labels = function(projection) { area: [] }; + labelable = _.flatten(labelable); - for (var i = 0; i < entities.length; i ++) { - var entity = entities[i], + for (var i = 0; i < labelable.length; i ++) { + var entity = labelable[i], p; if (entity.geometry() === 'point') { p = getPointLabel(entity);