传单:向L.geoJson选项传递额外的参数

时间:2013-02-08 16:50:58

标签: javascript oop web-applications gis leaflet

我正在使用Leaflet框架处理等值区域地图。我想在几年内有几个单独的层,所以我编写了这段代码(请注意,只应传递'style2002'和'style2010'的名称,不带任何参数):

        population2002 = L.geoJson(regionData, {
        style: style2002
    });

    population2010 = L.geoJson(regionData, {
        style: style2010
    });

,根据属性(名称前缀为'Pop_'加上年份)着色我的矢量多边形的“样式”函数是:

        function style2002(feature)
    {
        return {
            fillColor: getColor(feature.properties.Pop_2002),
            weight: 2,
            opacity: 1,
            color: 'white',
            dashArray: '',
            fillOpacity: 0.7
        };
    }

    function style2010(feature)
    {
        return {
            fillColor: getColor(feature.properties.Pop_2010),
            weight: 2,
            opacity: 1,
            color: 'white',
            dashArray: '',
            fillOpacity: 0.7
        };
    };

你可以猜到,我想每年使用一个“风格”功能而不是单独的功能。类似的东西:

        function styleByYear(feature, year)
    {   
        var property = 'feature.properties.Pop_';
        property += year;
        return {
            fillColor: getColor(property),
            weight: 2,
            opacity: 1,
            color: 'white',
            dashArray: '',
            fillOpacity: 0.7
        };
    }

但是如何将第二个参数传递给样式函数?在L.geoJson构造函数中,我只写了函数的名称,没有任何参数,正如你从第一段代码中看到的那样! 我该怎么办? 还有一个问题:如何将第一个参数('feature')传递给层构造函数..?

2 个答案:

答案 0 :(得分:1)

如果您创建全局变量怎么办:

var property = 'Pop_' + year

并将您的函数编辑为以下(您应该使用括号而不是点表示法):

    function styleByYear(feature)
{   

    return {
        fillColor: getColor(feature['properties'][property]),
        weight: 2,
        opacity: 1,
        color: 'white',
        dashArray: '',
        fillOpacity: 0.7
    };
}

我做了类似于你所要求的基于像你这样的等值教程的东西。我有多个按钮可以更改不同日期的地图样式。

答案 1 :(得分:0)

您可以尝试Leaflet tutorial on GeoJSON中的内容。在“选项”部分中查找第二个代码部分。您只需先添加正常样式(即两年内相同的内容)。从该网站添加特定代码的示例:

geojsonlayer = L.geoJson(regionData, {
  style: function(feature) {
    var finalStyleObject = normalStyling(feature); //return the normal style object
    switch (feature.properties) { //switch through the various years
        case 'Pop_2002': {finalStyleObject.fillColor: "#ff0000"};
        case 'Pop_2010': {finalStyleObject.fillColor: "#0000ff"};
    }
    return finalStyleObject;
  }
});

function normalStyling(feature){
  return {
        weight: 2,
        opacity: 1,
        color: 'white',
        dashArray: '',
        fillOpacity: 0.7
    };
}