From 5ee391dd52183d99e901539c8b92eacb953cacb0 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Fri, 30 May 2014 15:20:36 -0400 Subject: [PATCH] Better layer sorting to fix z-depth issues.. --- js/id/core/way.js | 20 +++++++++++++++ js/id/svg/lines.js | 63 +++++++++++++++++++++++----------------------- 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/js/id/core/way.js b/js/id/core/way.js index 3a6e6d6ec..9e2d6f0eb 100644 --- a/js/id/core/way.js +++ b/js/id/core/way.js @@ -42,6 +42,26 @@ _.extend(iD.Way.prototype, { if (this.nodes[this.nodes.length - 1] === node) return 'suffix'; }, + layer: function() { + // explicit layer tag.. + if (this.tags.layer !== undefined) return +(this.tags.layer); + + // implied layer tag.. + if (this.tags.location === 'overground') return 1; + if (this.tags.location === 'underground') return -1; + if (this.tags.location === 'underwater') return -10; + + if (this.tags.power === 'line') return 20; + if (this.tags.power === 'minor_line') return 15; + if (this.tags.aerialway) return 10; + if (this.tags.bridge) return 1; + if (this.tags.cutting) return -1; + if (this.tags.tunnel) return -1; + if (this.tags.waterway) return -1; + if (this.tags.manmade === 'pipeline') return -10; + return 0; + }, + isOneWay: function() { // explicit oneway tag.. if (['yes', '1', '-1'].indexOf(this.tags.oneway) !== -1) { return true; } diff --git a/js/id/svg/lines.js b/js/id/svg/lines.js index 61b0efbd5..8ea4418a7 100644 --- a/js/id/svg/lines.js +++ b/js/id/svg/lines.js @@ -1,36 +1,36 @@ iD.svg.Lines = function(projection) { - var highway_stack = { - motorway: 0, - motorway_link: 1, - trunk: 2, - trunk_link: 3, - primary: 4, - primary_link: 5, - secondary: 6, - tertiary: 7, - unclassified: 8, - residential: 9, - service: 10, - footway: 11 - }; + // var highway_stack = { + // motorway: 0, + // motorway_link: 1, + // trunk: 2, + // trunk_link: 3, + // primary: 4, + // primary_link: 5, + // secondary: 6, + // tertiary: 7, + // unclassified: 8, + // residential: 9, + // service: 10, + // footway: 11 + // }; - function waystack(a, b) { - if (!a || !b || !a.tags || !b.tags) return 0; - if (a.tags.layer !== undefined && b.tags.layer !== undefined) { - return a.tags.layer - b.tags.layer; - } - if (a.tags.bridge) return 1; - if (b.tags.bridge) return -1; - if (a.tags.tunnel) return -1; - if (b.tags.tunnel) return 1; - var as = 0, bs = 0; - if (a.tags.highway && b.tags.highway) { - as -= highway_stack[a.tags.highway]; - bs -= highway_stack[b.tags.highway]; - } - return as - bs; - } + // function waystack(a, b) { + // if (!a || !b || !a.tags || !b.tags) return 0; + // if (a.tags.layer !== undefined && b.tags.layer !== undefined) { + // return a.tags.layer - b.tags.layer; + // } + // if (a.tags.bridge) return 1; + // if (b.tags.bridge) return -1; + // if (a.tags.tunnel) return -1; + // if (b.tags.tunnel) return 1; + // var as = 0, bs = 0; + // if (a.tags.highway && b.tags.highway) { + // as -= highway_stack[a.tags.highway]; + // bs -= highway_stack[b.tags.highway]; + // } + // return as - bs; + // } return function drawLines(surface, graph, entities, filter) { var lines = [], @@ -47,7 +47,8 @@ iD.svg.Lines = function(projection) { } lines = lines.filter(path); - lines.sort(waystack); + // lines.sort(waystack); + lines.sort(function(a, b) { return a.layer() - b.layer(); }); function drawPaths(klass) { var paths = surface.select('.layer-' + klass)