diff --git a/lib/map/labelslayer.js b/lib/map/labelslayer.js index 7bd2cb9..2912c10 100644 --- a/lib/map/labelslayer.js +++ b/lib/map/labelslayer.js @@ -48,21 +48,26 @@ define(["leaflet", "rbush"], -offset * Math.sin(loc[2] * 2 * Math.PI)] } - function labelRect(p, offset, anchor, label) { + function labelRect(p, offset, anchor, label, minZoom, maxZoom, z) { + var margin = 1 + 1.41 * (1 - (z - minZoom) / (maxZoom - minZoom)) + + var width = label.width * margin + var height = label.height * margin + var dx = { left: 0, - right: -label.width, - center: -label.width / 2 + right: -width, + center: -width / 2 } var dy = { top: 0, - ideographic: -label.height, - middle: -label.height / 2 + ideographic: -height, + middle: -height / 2 } var x = p.x + offset[0] + dx[anchor[0]] var y = p.y + offset[1] + dy[anchor[1]] - return [x, y, x + label.width, y + label.height] + return [x, y, x + width, y + height] } var c = L.TileLayer.Canvas.extend({ @@ -125,7 +130,7 @@ define(["leaflet", "rbush"], for (z = maxZoom; z >= d.minZoom; z--) { var p = map.project(d.position, z) - var rect = labelRect(p, offset, loc, d) + var rect = labelRect(p, offset, loc, d, minZoom, maxZoom, z) var candidates = trees[z].search(rect) if (candidates.length > 0) @@ -146,7 +151,7 @@ define(["leaflet", "rbush"], for (var z = maxZoom; z >= best.z; z--) { var p = map.project(d.position, z) - var rect = labelRect(p, d.offset, best.loc, d) + var rect = labelRect(p, d.offset, best.loc, d, minZoom, maxZoom, z) trees[z].insert(rect) }