我正在尝试使用 folium 中的 TimestampedGeoJson 在设定的时间段内绘制一条路径,除了当我运行代码并进入 html 地图时,我看到第一个数据点,然后是所有数据点之外,我几乎已经掌握了所有内容其他点闪现。似乎 1600 左右的其他经度/纬度对仅归因于另一个时间值 - 即使所有这些值的数量相同。 现在看起来像这样: 在绘制出下一个点后,它会跳转到:
本质上,第一点似乎没问题 - 它在第一个时间值绘制第一个经度/纬度对,但随后它只需要所有剩余的长/纬度对并在最后一个时间值的某个时刻绘制它们原因。
这是我正在使用的代码块,用于创建 geojson 结构,然后将该数据添加到我的地图中。
data = json.load(open("test2.json"))
my_map = folium.Map(starting_coords, zoom_start = 13)
TimestampedGeoJson({
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [d["lon"], d["lat"]],
},
"properties": {
"style": {"color" : ''},
"icon": "circle",
"iconstyle":{
"fillOpacity": 0.8,
"stroke": "true",
"radius": 2
},
"times": [d["aoe"]]
}
} for d in data
]
}).add_to(my_map)
my_map.save("test.html")
webbrowser.open("test.html")
test2.json 看起来像这样(仅作为示例,实际文件有 1600 左右条目):
[
{
"lat": 37.79185,
"lon": -122.4159,
"aoe": 1695149258521.0
},
{
"lat": 37.79185,
"lon": -122.4159,
"aoe": 1695149293569.0
},
{
"lat": 37.7911,
"lon": -122.41661,
"aoe": 1695149375911.0
},
{
"lat": 37.79064,
"lon": -122.42045,
"aoe": 1695149446910.0
}
]
我尝试根据我遇到的错误更改引号和双引号,上面的代码至少不会在 VSC 中给我任何错误。但显然它仍然同时闪烁我想要单独出现的所有值。
那么是否存在一些我没有看到的错误或需要做一些不同的事情,以便不是一次性显示所有内容,而是根据适当的时间戳一次显示一个点?
事实证明,所有值一次显示的原因是 TimestampedGeoJson 函数的默认步长大小。默认情况下,它设置为 1 天的步骤,因此如果您的数据处理的是在同一天记录的时间戳,那么一旦您启动程序,所有内容都会立即显示。要解决此问题,您只需在函数底部定义步长,如下所示:
data = json.load(open("test2.json"))
my_map = folium.Map(starting_coords, zoom_start = 13)
TimestampedGeoJson({
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [d["lon"], d["lat"]],
},
"properties": {
"style": {"color" : ''},
"icon": "circle",
"iconstyle":{
"fillOpacity": 0.8,
"stroke": "true",
"radius": 5
},
"times": [d["times"]]
}
} for d in data
]
},
loop = False, period = 'PT10S').add_to(my_map)
my_map.save("test.html")
webbrowser.open("test.html")
在这里,您可以在底部看到 period = 'PT10S' 行,它告诉函数您希望步长大小为 10 秒 - 这意味着每次滑块前进时,它都会前进 10 秒,而不是默认的 1天。您也可以进行 PT1H 或 PT1M 数小时或几分钟。