Leaflet 如何在传单中重新渲染图形
我已经编写了一个转换程序(C#),该程序将来自GitHub上《纽约时报》的美国新冠病毒-19病例的州级数据和来自传单交互式Choropleth地图的us-States.js文件作为输入。该程序生成一个JSON文件,其中包含Leaflet 如何在传单中重新渲染图形,leaflet,Leaflet,我已经编写了一个转换程序(C#),该程序将来自GitHub上《纽约时报》的美国新冠病毒-19病例的州级数据和来自传单交互式Choropleth地图的us-States.js文件作为输入。该程序生成一个JSON文件,其中包含 { "type":"Feature", "id":"01", "properties":{ "name":"Alabama", "start":"01/21/2020", "cou
{
"type":"Feature",
"id":"01",
"properties":{
"name":"Alabama",
"start":"01/21/2020",
"count":81,
"cases":[0,0,0,...]
},
"geometry":{...}
},...
其中,原始数据中的状态密度被起始值和计数值以及案例数组替换。如果某一州的案件与华盛顿州(2020年1月21日)的起案日期不同,则缺失日期案件以零表示。这允许通过表示所有日期的特定日期的索引访问案例数组。现在有可能将新冠病毒-19病例绘制成在美国的传播图。对于映射,我决定使用相同的传单交互式Choropleth映射软件作为模板(我没有使用当前映射软件的经验,所以我几乎复制了传单代码)。最终目的是让setInterval计时器触发地图的修订。代码如下
<!DOCTYPE html>
<!-- from https://leafletjs.com/examples/choropleth/ -->
<html>
<head>
<title>By State COVID-19 Spread</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<link rel='stylesheet' href='Leaflet-1.6.0/dist/leaflet.css' />
<script src='Leaflet-1.6.0/dist/leaflet.js'></script>
</head>
<body>
<div id='map' style='width:700px;height:500px'></div>
<div style='display:table-cell;margin-top:100px;'>
<button type='button' onclick='update()'>Update</button>
<label for='day_number' style='height:12pt;margin-left:30px;'>Day Number:</label>
<span id='day_number' style='height:12pt; margin-left:5px;'></span>
</div>
<script src='cases-by-us-state.js'></script>
<script>
var case_index = 67;
document.getElementById('day_number').innerHTML = case_index;
var maximum_cases = statesData.features[0].properties.count;
var mapboxAccessToken = 'pk.eyJ1IjoiZ2dndXN0YWZzb24iLCJhIjoiY2s4a2RlOW42MDByYzNucGgxc2I0d2RqeCJ9.bB2UhdKKupjIXEV54N70pQ';
var map = L.map('map').setView([37.8, -96], 4);
function getColor ( d )
{
// colors from https://colorbrewer2.org
return d > 10000 ? '#99000d' :
d > 5000 ? '#cb181d' :
d > 2000 ? '#ef3b2c' :
d > 1000 ? '#fb6a4a' :
d > 500 ? '#fc9272' :
d > 200 ? '#fcbba1' :
d > 100 ? '#fee0d2' :
'#fff5f0';
}
function style ( feature )
{
return {
fillColor: getColor ( feature.properties.cases[case_index] ),
weight: 2,
opacity: 1,
color: 'black',
fillOpacity: 0.7
};
}
L.tileLayer (
'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=' + mapboxAccessToken,
{
id: 'us_states_cases',
attribution: '<a https://github.com/nytimes/covid-19-dataMap>NY Times</a>',
tileSize: 512,
zoomOffset: -1
} ).addTo ( map );
L.geoJson ( statesData, { style: style } ).addTo ( map );
function update ( )
{
if ( case_index < ( maximum_cases - 1 ) )
{
case_index++;
}
else
{
case_index = 0;
}
document.getElementById('day_number').innerHTML = case_index;
map.invalidateSize()
}
</script>
</body>
</html>
按州划分的新冠病毒-19传播
使现代化
日数:
var案例指数=67;
document.getElementById('day_number')。innerHTML=case_索引;
var maximum_cases=statesData.features[0].properties.count;
var mapboxAccessToken='pk.eyj1ijoiz2dndxn0ywzzb24ilcjhijoi2s4a2rlow42mdbyyznucgxc20d2rqecj9.bB2UhdKKupjIXEV54N70pQ';
var map=L.map('map').setView([37.8,-96],4);
函数getColor(d)
{
//颜色来自https://colorbrewer2.org
返回d>10000?“#99000d”:
d>5000?“#cb181d”:
d>2000?“#ef3b2c”:
d>1000?“#fb6a4a”:
d>500?“#fc9272”:
d>200?“#fcbba1”:
d>100?“#fee0d2”:
"fff5f0",;
}
功能样式(特征)
{
返回{
fillColor:getColor(feature.properties.cases[case_index]),
体重:2,
不透明度:1,
颜色:'黑色',
填充不透明度:0.7
};
}
L.tileLayer(
'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token='+mapboxAccessToken,
{
id:“美国案件”,
署名:《纽约时报》,
tileSize:512,
Zoomofset:-1
})。地址(地图);
L.geoson(statesData,{style:style}).addTo(map);
函数更新()
{
如果(案例索引<(最大案例-1))
{
case_index++;
}
其他的
{
病例指数=0;
}
document.getElementById('day_number')。innerHTML=case_索引;
map.invalidateSize()
}
我的问题发生在更新函数中。它不会更新图形!每当单击“更新”按钮时,天数都会增加,但该天数的数据图形不会绘制。想法
保持安全。您必须重新运行geojson:
L.tileLayer (
'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=' + mapboxAccessToken,
{
id: 'us_states_cases',
attribution: '<a https://github.com/nytimes/covid-19-dataMap>NY Times</a>',
tileSize: 512,
zoomOffset: -1
} ).addTo ( map );
var data = L.geoJson ( statesData, { style: style } ).addTo ( map );
function update ( ){
if ( case_index < ( maximum_cases - 1 ) )
{
case_index++;
}
else
{
case_index = 0;
}
document.getElementById('day_number').innerHTML = case_index;
data.removeFrom(map) // To remove the layers
data = L.geoJson ( statesData, { style: style } ).addTo ( map );
}
L.tillelayer(
'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token='+mapboxAccessToken,
{
id:“美国案件”,
署名:《纽约时报》,
tileSize:512,
Zoomofset:-1
})。地址(地图);
var data=L.geoJson(statesData,{style:style}).addTo(map);
函数更新(){
如果(案例索引<(最大案例-1))
{
case_index++;
}
其他的
{
病例指数=0;
}
document.getElementById('day_number')。innerHTML=case_索引;
data.removeFrom(map)//删除图层
data=L.geoJson(statesData,{style:style}).addTo(map);
}
谢谢。很好用。