瀏覽代碼

map/labels: show less labels on lower zoom levels

Nils Schneider 8 年之前
父節點
當前提交
93ca06ab75
共有 1 個文件被更改,包括 13 次插入8 次删除
  1. 13 8
      lib/map/labelslayer.js

+ 13 - 8
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)
             }