Folium TimestampedGeoJson 一次性刷新所有值,而不是超过给定的时间段

问题描述 投票:0回答:1

我正在尝试使用 folium 中的 TimestampedGeoJson 在设定的时间段内绘制一条路径,除了当我运行代码并进入 html 地图时,我看到第一个数据点,然后是所有数据点之外,我几乎已经掌握了所有内容其他点闪现。似乎 1600 左右的其他经度/纬度对仅归因于另一个时间值 - 即使所有这些值的数量相同。 现在看起来像这样: Single small black dot in starting location at starting time 在绘制出下一个点后,它会跳转到: All points plotted in very next time stamp

本质上,第一点似乎没问题 - 它在第一个时间值绘制第一个经度/纬度对,但随后它只需要所有剩余的长/纬度对并在最后一个时间值的某个时刻绘制它们原因。

这是我正在使用的代码块,用于创建 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 中给我任何错误。但显然它仍然同时闪烁我想要单独出现的所有值。

那么是否存在一些我没有看到的错误或需要做一些不同的事情,以便不是一次性显示所有内容,而是根据适当的时间戳一次显示一个点?

html dictionary geojson folium
1个回答
0
投票

事实证明,所有值一次显示的原因是 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 数小时或几分钟。

© www.soinside.com 2019 - 2024. All rights reserved.