TimestamedGeoJson持续时间参数会导致面消失
问题描述
我在修改Plugins example notebook中第二个TimestamedGeoJson示例的代码片段时遇到问题。
持续时间参数被描述为"要素经过其时间后将在地图上显示的时间段。如果没有,则将显示所有以前的时间。"
以下面的案例为例,使用两个多边形
import folium
from folium.plugins import TimestampedGeoJson
m = folium.Map(location=[52.467697, -2.548828], zoom_start=6)
polygon_1 = {
'type': 'Feature',
'geometry': {
'type': 'MultiPolygon',
'coordinates': [((
(-2.548828, 51.467697),
(-0.087891, 51.536086),
(-1.516113, 53.800651),
(-6.240234, 53.383328),
),)],
},
'properties': {
'style': {
'color': 'blue',
},
'times': ['2015-07-22T00:00:00', '2015-08-22T00:00:00',
'2015-09-22T00:00:00', '2015-10-22T00:00:00',
'2015-11-22T00:00:00', '2015-12-22T00:00:00']
}
}
polygon_2 = {
'type': 'Feature',
'geometry': {
'type': 'MultiPolygon',
'coordinates': [((
(-3.548828, 50.467697),
(-1.087891, 50.536086),
(-2.516113, 52.800651),
(-7.240234, 52.383328),
),)],
},
'properties': {
'style': {
'color': 'yellow',
},
'times': ['2015-07-22T00:00:00', '2015-08-22T00:00:00']
}
}
TimestampedGeoJson(
{'type': 'FeatureCollection', 'features': [polygon_1, polygon_2]},
period='P1M',
duration='P1M',
auto_play=False,
loop=False,
loop_button=True,
date_options='YYYY/MM/DD',
).add_to(m)
m
第一个多边形从7月到12月是活动的,因此我预计它将在所有时间段内绘制;第二个多边形仅在7月和8月活动,因此它应该绘制到最后一个月之后的一个月:即7月、8月和9月。
相反,我看到的是两个多边形都是在第一个阶段绘制的,在第二个阶段消失,然后第二个多边形在9月份绘制,并在10月份再次消失。需要说明的是:预期
+-----------+----------+----------+
| Month | Polygon1 | Polygon2 |
+-----------+----------+----------+
| July | X | X |
| August | X | X |
| September | X | X |
| October | X | |
| November | X | |
| December | X | |
+-----------+----------+----------+
观察
+-----------+----------+----------+
| Month | Polygon1 | Polygon2 |
+-----------+----------+----------+
| July | X | X |
| August | | |
| September | X | |
| October | | |
| November | | |
| December | | |
+-----------+----------+----------+
这是持续时间参数中的错误,还是我遗漏了什么?
我使用的是Folium0.6.0版,没有广告拦截程序。这在jupyter和html导出中都会发生。#894中引入了持续时间参数。
解决方案
由于GitHub和was also answered there都问了同样的问题,下面我将复制粘贴giHub用户andy23512的答案,以帮助那些在giHub上意外找不到答案的人。
下面引述的答案如下:
"根据leaflet.js的相应文件,( https://github.com/socib/Leaflet.TimeDimension/tree/520cb80f645112e242c5160cb44b7d5f2cae380d#ltimedimensionlayergeojson )
CoordTimes、Times或Line Strong Timestamps:可以是 与几何图形(日期字符串或毫秒)相关联。在此情况下, 字符串,则它必须具有与 线条。 这意味着如果要在这6个时间戳显示面, 几何坐标列表的长度应为6,以便指定 要在相应时间戳处显示的多边形。 在本例中,您希望在这6个位置显示相同的面(Polygon1 时间戳。您可以在坐标列表后添加*6以进行复制。因此符合您预期的代码应该是:
import folium from folium.plugins import TimestampedGeoJson m = folium.Map(location=[52.467697, -2.548828], zoom_start=6) polygon_1 = { 'type': 'Feature', 'geometry': { 'type': 'MultiPolygon', 'coordinates': [(( (-2.548828, 51.467697), (-0.087891, 51.536086), (-1.516113, 53.800651), (-6.240234, 53.383328), ),)] * 6, # duplicatation for matching 6 timestamps }, 'properties': { 'style': { 'color': 'blue', }, 'times': ['2015-07-22T00:00:00', '2015-08-22T00:00:00', '2015-09-22T00:00:00', '2015-10-22T00:00:00', '2015-11-22T00:00:00', '2015-12-22T00:00:00'] } } polygon_2 = { 'type': 'Feature', 'geometry': { 'type': 'MultiPolygon', 'coordinates': [(( (-3.548828, 50.467697), (-1.087891, 50.536086), (-2.516113, 52.800651), (-7.240234, 52.383328), ),)] * 2, # duplicatation for matching 2 timestamps }, 'properties': { 'style': { 'color': 'yellow', }, 'times': ['2015-07-22T00:00:00', '2015-08-22T00:00:00'] } } TimestampedGeoJson( {'type': 'FeatureCollection', 'features': [polygon_1, polygon_2]}, period='P1M', duration='P1M', auto_play=False, loop=False, loop_button=True, date_options='YYYY/MM/DD', ).add_to(m) m
希望这会有帮助。"
相关文章