javascript - 在传单中创建具有不同圆圈大小的图例

标签 javascript leaflet legend geojson

下午好

我正在与依赖于圆半径的传单图例作斗争。因为我将拥有颜色相同但大小不同的值。我想创造适合他们的传奇。

我试过这个例子:

http://jsfiddle.net/nathansnider/o563bg44/5/

实现到我的 map 中。

为此,我使用了以下代码:

   function getRadius(r) {
//r = Math.sqrt(y / Math.PI)
//return r;
return r > 100 ? 15 :
       r > 50 ? 10 :
       r > 20 ? 6 :
       r > 10 ? 3 :
       0;
 }


 var legend = L.control({position: 'bottomright'});
legend.onAdd = function (map) {

var div = L.DomUtil.create('div', 'info legend');
grades = [0, 10, 20, 50, 100],
labels = ['<strong>Amount of units</strong>'],
categories = ['> 100','50-100','1-50','N/A'];

for (var i = 0; i < grades.length; i++) {
    labels.push(
        '<i class="circlepadding" style="width: '+Math.max(0,(19-1.8*getRadius))+'px;"></i> <i 
 style="background: #8080A0; width: '+getRadius*2+'px; height: '+getRadius*2+'px; border-radius: 
 50%; margin-top: '+Math.max(0,(9-getRadius))+'px;"></i> ');
}
div.innerHTML = labels.join('<br>');
return div;
 };
  legend.addTo(map);

但最后我得到了如下图所示的糟糕结果:

enter image description here

有人可以帮我解决这个问题吗?

最佳答案

将您的 for 循环更改为:

for (var i = 0; i < grades.length; i++) {
            var grade = grades[i]*5;
      labels.push(
          '<i class="circlepadding" style="width: 5px;"></i> <i  style="background: #8080A0; width: '+getRadius(grade)*2+'px; height: '+getRadius(grade)*2+'px; border-radius:  50%; margin-top: '+Math.max(0,(9-getRadius(grade)))+'px;"></i> '+categories[i]);
  }

而且您必须再添加一个类别:

categories = ['> 100','50-100','1-50','N/A','XX'];

关于javascript - 在传单中创建具有不同圆圈大小的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917855/

相关文章:

javascript - 传单导入GeoJson

javascript - 使用plotly.js 对单个数据进行多个Y 轴图例

javascript - Bluebird 无极绑定(bind)链

javascript - 在 Javascript 中重新创建 Processing map 函数

传单:平移、居中、缩放 map 到标记位置

javascript - 如何使传单 map 根据动态面板点击动态缩放到位置?

javascript - 在构造函数中更改 `window.location` 仍将在重定向之前首先呈现组件

javascript - 为什么这个 UrlFetch 函数不能正常工作?

r - ggplot散点图中的图例问题

Python 情节图例 : markers appear twice