Folium - 基于当前日期的图标颜色 - eval()?
Folium - icon color based on current date - eval()?
我正在尝试设置我的地图,以便标记图标根据当前日期和目标日期改变颜色。
我可以通过使用正则表达式更新生成的 HTML 来实现此目的:
var icon_4089458f0c8541b482236fb9d52bb7f9 = L.AwesomeMarkers.icon(
{"date": "2021-10-21",
"extraClasses": "fa-rotate-0",
"icon": "info-sign",
"iconColor": "white",
"markerColor": eval('if (new Date("2021-09-01").setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0)) { "lightgray" }
else if (new Date("2021-09-01").setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { "red" }
else { "green" }'),
"prefix": "glyphicon"}
);
不过这很笨重。
我尝试将 eval 传递给 folium.Icon(color=
,但这只会创建命令的转义字符串并最终无法正常工作。
有没有办法使用 folium 传递这样的东西,以便它生成具有所需 eval 的地图?
不确定是否是最佳解决方案,但一直到 folium 的图标 class 并进行了一些改动。
color_js = r'''eval('if (new Date("''' + date_en + '''").setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0)) { "lightgray" } else if (new Date("''' + date_en + '''").setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { "red" } else { "''' + clr + '''" }')'''
my_ico = folium.Icon(icon="info-sign")
my_ico.options.pop("markerColor")
optns = re.sub("'", '"', re.sub("(?:\{|\})", "", str(my_ico.options)))
template = u"""
{% macro script(this, kwargs) %}
var {{ this.get_name() }} = L.AwesomeMarkers.icon(
{""" + optns + u""", "markerColor": """ + color_js + u""" },
);
{{ this._parent.get_name() }}.setIcon({{ this.get_name() }});
{% endmacro %}
"""
my_ico._template = Template(template)
folium.Marker([lat, lon], icon=my_ico).add_to(fmap)
我正在尝试设置我的地图,以便标记图标根据当前日期和目标日期改变颜色。
我可以通过使用正则表达式更新生成的 HTML 来实现此目的:
var icon_4089458f0c8541b482236fb9d52bb7f9 = L.AwesomeMarkers.icon(
{"date": "2021-10-21",
"extraClasses": "fa-rotate-0",
"icon": "info-sign",
"iconColor": "white",
"markerColor": eval('if (new Date("2021-09-01").setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0)) { "lightgray" }
else if (new Date("2021-09-01").setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { "red" }
else { "green" }'),
"prefix": "glyphicon"}
);
不过这很笨重。
我尝试将 eval 传递给 folium.Icon(color=
,但这只会创建命令的转义字符串并最终无法正常工作。
有没有办法使用 folium 传递这样的东西,以便它生成具有所需 eval 的地图?
不确定是否是最佳解决方案,但一直到 folium 的图标 class 并进行了一些改动。
color_js = r'''eval('if (new Date("''' + date_en + '''").setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0)) { "lightgray" } else if (new Date("''' + date_en + '''").setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { "red" } else { "''' + clr + '''" }')'''
my_ico = folium.Icon(icon="info-sign")
my_ico.options.pop("markerColor")
optns = re.sub("'", '"', re.sub("(?:\{|\})", "", str(my_ico.options)))
template = u"""
{% macro script(this, kwargs) %}
var {{ this.get_name() }} = L.AwesomeMarkers.icon(
{""" + optns + u""", "markerColor": """ + color_js + u""" },
);
{{ this._parent.get_name() }}.setIcon({{ this.get_name() }});
{% endmacro %}
"""
my_ico._template = Template(template)
folium.Marker([lat, lon], icon=my_ico).add_to(fmap)