Better layer sorting to fix z-depth issues..

This commit is contained in:
Bryan Housel
2014-05-30 15:20:36 -04:00
parent cb2121b7c4
commit 5ee391dd52
2 changed files with 52 additions and 31 deletions
+20
View File
@@ -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; }
+32 -31
View File
@@ -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)