我正在使用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')传递给层构造函数..?
答案 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
};
}