我正在使用Mapbox js制作气泡图。
问题是:如果点数低于某个值,我试图阻止点出现。目前显示值为0.
设置点的功能如下所示。我已经注释掉了一个不成功的if语句。
function layer(selecta){
geoJson = L.geoJson(geoJsonData, {
pointToLayer: function(feature, latlng) {
return L.circleMarker(latlng, {
color: '#c10000',
// if (parseInt(feature.properties[selecta]) < 50000){
radius: (Math.sqrt(feature.properties[selecta] / 3.141592) / 50)
// }
}).bindPopup('<h3>' + feature.properties.country + '</h3><p>' + 'Refugees, asylum seekers and IDPs in ' + currentYear + ': ' + numeral(feature.properties['yr' + currentYear]).format('0,0') + '</p>',{
closeButton: true,
minWidth: 320
});
}
}).addTo(map);
};
layer('yr2013');
数据是从geoJSON文件加载的,geoJSON文件是一个对象数组。 每个对象都有每年的属性。 例如
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
64.585262,
41.377491
]
},
"properties":{
"country":"Uzbekistan",
"yr2000":"39598",
"yr2001":"40923",
"yr2002":"46014",
"yr2003":"45653",
"yr2004":"44932",
"yr2005":"44537",
"yr2006":"1422",
"yr2007":"1060",
"yr2008":"821",
"yr2009":"555",
"yr2010":"311",
"yr2011":"214",
//"yr2012":"176",
//"yr2013":"138"
}
},
如果我摆脱了值低于200的值,就像上面的例子一样,这会在控制台中返回一个错误。分数仍然显示,但这是一个大规模的黑客攻击。
有人可以告诉我一个更干净的方法吗?
X EDIT X 我从来没有找到解决方案,但我最终找到了解决办法。
Leaflet具有CircleMarker选项opacity和fillOpacity。
这是docs
所以我创建了一个函数,如果值太小则返回零,这样标记就不会出现。
但技术上仍然存在。
答案 0 :(得分:1)
您是否尝试过使用Mapbox.js&#39; .setFilter()
?它应该删除您不想要的功能,而不仅仅是让它们透明。
https://www.mapbox.com/mapbox.js/example/v1.0.0/markers-with-multiple-filters/
答案 1 :(得分:0)
这个怎么样:
function layer(selecta){
geoJson = L.geoJson(geoJsonData, {
pointToLayer: function(feature, latlng) {
//I suppose this is an integer
var number_refugees = numeral(feature.properties['yr' + currentYear]);
if(number_refugees > 0){
var popup_content = '<h3>' + feature.properties.country + '</h3>'
+ '<p>' + 'Refugees, asylum seekers and IDPs in ' + currentYear + ': '
+ number_refugees.format('0,0') + '</p>';
return L.circleMarker(latlng, {
color: '#c10000',
radius: (Math.sqrt(feature.properties[selecta] / 3.141592) / 50)
}).bindPopup(popup_content),{
closeButton: true,
minWidth: 320
});
}
}
}).addTo(map);
};
layer('yr2013');