我正在努力使用 Javascript 和 Leaflet tryind 来实现仪表板。我正在尝试按照本教程实现等值线图。我需要根据两个选择菜单动态更改地图上的数据显示。
选择:
<select class="c-select" id="methodSelected" name="methodSelected" required>
</select>
<select class="c-select" id="yearSelected" name="yearSelected" required>
</select>
我正在更改选择
$("#methodSelected").change()
$("#yearSelected").change()
两者都在 a 中声明
$(document).ready(function() {}
在这个块中,我还声明了所需的变量和函数
var choroplethMap;
var q = d3_queue.queue();
q.defer(d3.json, "final2.geojson");
function ready(GeoJSON) {
...
makePlaceHolderChoroplethMap();
}
makePlaceHolderChoroplethMap
是这样的
function makePlaceHolderChoroplethMap() {
choroplethMap = L.map('choroplethContainer').setView([51.505, -0.09], 2);
L.tileLayer("url",
{
id: id,
attribution: attribution,
accessToken: accessToken
}
).addTo(choroplethMap);
现在,当我要使用两个选择菜单更改值时,我想要更新地图,所以我$("#yearSelected").change()
调用了makeChoroplethMap()
.
function makeChoroplethMap() {}
在这个函数中,我将代码放在前面链接的教程之后。
问题是,当我使用该代码更改值时,我将在之前添加的其他图层上重新添加新图层(如您所见,Geojson、图例和控件)
所以我试着只留下与数据的绑定makeChoroplethMap()
,
geojson = L.geoJson(data,
{
style: style,
onEachFeature: onEachFeature
}
).addTo(choroplethMap);
info.addTo(choroplethMap);
但我在as中收到一个错误t is undefined
。我认为是因为choroplethMap
没有初始化。映射和选择工作,但不显示控件是错误的原因。现在(我想我打破了一些东西,因为昨天工作)如果我用 select 更改值,geojson 层也会在国家/地区过期(之前的推杆不会消失,我也会更改值)。
所以我的问题是:如何在不重新添加图例和其他控件的情况下重新绑定数据?