首页 > 解决方案 > Leaflet JS中条形图的控制层

问题描述

这是我的第一个网络地图。为了可视化我的一个数据,我正在使用小册子小图表。我成功地展示了条形图。现在我尝试为我的条形图制作一个控制层。但它说 Uncaught ReferenceError: barChartMarker is not defined。如何解决这个问题?这是我的代码:

forEach(bar => {
            var options = {
                data: [
                    bar.ASKES / 3,
                    bar.BPJS / 3,
                    bar.KIS / 3
                ],
                chartOptions: {
                    'dataPoint1': {
                        fillColor: '#FEE5D9',
                        minValue: 0,
                        maxValue: 30,
                        maxHeight: 30,
                        displayText: function (value) {
                            return value.toFixed(2);
                        }
                    },
                    'dataPoint2': {
                        fillColor: '#FCAE91',
                        minValue: 0,
                        maxValue: 30,
                        maxHeight: 30,
                        displayText: function (value) {
                            return value.toFixed(2);
                        }
                    },
                    'dataPoint3': {
                        fillColor: '#FB6A4A',
                        minValue: 0,
                        maxValue: 30,
                        maxHeight: 30,
                        displayText: function (value) {
                            return value.toFixed(2);
                        }
                    }
                    }
                },
             
              
                weight: 1,
                color: '#000000',
                }
                     
                var barChartMarker = L.minichart(bar.location, options);
                map.addLayer(barChartMarker);
            
                })

    var overlays = {
            "Barchart": barChartMarker
        };
    
        L.control.layers(overlays).addTo(map);

标签: javascriptleaflet

解决方案


您不能从外部访问在函数内部定义的变量。

改成:

var barChartGroup = L.featureGroup().addTo(map);
var overlays = {
   "BarChart" : barChartGroup
};

forEach(bar => {
    var options = {
        data: [
            bar.ASKES / 3,
            bar.BPJS / 3,
            bar.KIS / 3
        ],
        chartOptions: {
            'dataPoint1': {
                fillColor: '#FEE5D9',
                minValue: 0,
                maxValue: 30,
                maxHeight: 30,
            }
        }
        .....
        weight: 1,
        color: '#000000',
    }

    var barChartMarker = L.minichart(bar.location, options);
    barChartGroup.addLayer(barChartMarker);
})

L.control.layers(overlays).addTo(map);

推荐阅读