【发布时间】:2018-11-17 07:24:14
【问题描述】:
我希望就如何在我拥有的 d3/传单地图上的同一数据集(但有两个不同的属性)上实现多个范围滑块过滤器获得一些建议。
我希望能够使用范围滑块按日期过滤地图上的点,并使用另一个范围滑块按“大小”过滤地图上的点。目前,我进行此设置的方式仅适用于按日期过滤。本质上,当时间滑块被实例化时,它从一个函数传入一个不透明度值,该函数可以动态地将点的不透明度设置为零,从而将它们过滤掉。这是基本代码:
//Build time-slider in HTML
<div id="sliderContainer">
<input id="timeslide-leaflet" type="range" min="0" max="25" value="0" step="1" /><br>
//Define years for time slider
var inputValue = null;
var years = ["1993","1994","","","" ];
//load in data
SFData.forEach(function(d) {
var coords = d.geometry.coordinates
console.log(coords)
d.latLong = new L.LatLng(coords[1],
coords[0]);
})
//draw map circles
var feature = mapG.selectAll("circle")
.data(SFData)
.enter().append("circle")
.attr("class", 'features')
//if time-slider moved, call update function
d3.select("#timeslide-leaflet").on("input", function() {
update(+this.value);
});
//Update function sets feature's opacity and can filter by making invisible
function update(value) {
document.getElementById("range-leaflet").innerHTML=years[value];
inputValue = years[value];
d3.selectAll(".features")
.attr("opacity", dateMatch)
}
function dateMatch(data, value) {
//do some internal calculations based on my data
if (yearInt <= inputValueInt && yearExpirationInt >= inputValueInt) {
return ".7";
} else {
return "0"; //return opacity 0 for data that should be filtered out
};
}
我希望能够以类似的方式过滤不同属性(大小)上的相同数据。我可以轻松地创建另一个时间滑块 - 但我将如何将另一个返回的不透明度值传递给地图特征 .attr("opacity")?本质上,我可以编写一个与 dateMatch() 类似的按大小过滤的函数,我不确定如何将返回的不透明度值传递回地图特征,因为 dateMatch() 已经传入了一个值。
谢谢!
【问题讨论】:
标签: javascript html d3.js leaflet