使用 Folium 在地图上创建标记会导致空白 HTML 页面
Creating marker on map using Folium results in blank HTML page
我尝试使用 python3 中的 folium 库创建地图。在我向地图添加标记之前,它工作正常。添加标记后,输出结果只是一个空白 HTML 页面。
import folium
map = folium.Map(location=[20.59,78.96], tiles = "Mapbox Bright")
folium.Marker([26.80,80.76],popup="Hey, It's Moradabad").add_to(map)
map.save("mapOutput.html")
根据我的经验,folium 对单引号非常敏感 ('
)。
原因是,folium 生成 javascript,并将您的字符串转换为 javascript 字符串,并用单引号括起来。但是,它确实不会转义字符串中包含的任何单引号(甚至不确定这在 js 中是否可行),因此在字符串中使用单引号与在 python.[ 中不关闭字符串具有相同的效果。 =15=]
解决方案:将字符串中的所有单引号替换为反引号 (`) 或(更好)使用@Bob Haffner 的回答。
编辑:纯属巧合,我刚才偶然发现了另一个解决方案。显然 folium.Popup
有一个参数 parse_html
。像这样使用它:
folium.Marker([x,y], popup=folium.Popup("Foo'Bar",parse_html=True)).add_to(map)
但是,如果 运行 出现 unicodeescape 错误,我将无法正常工作。尽管如此,它仍然存在,据说是为了这个目的,并且可能对你有用。
编辑 2:正如我在 github 上得知的那样,此问题将在下一版本中修复。参考:folium#962
@MCO 完全正确。
我喜欢利用html.escape()来处理像这样的问题字符
import folium
import html
map = folium.Map(location=[20.59,78.96], tiles = "Mapbox Bright")
folium.Marker([26.80,80.76],popup=html.escape("Hey, It's Moradabad")).add_to(map)
map.save("mapOutput.html")
我尝试使用 python3 中的 folium 库创建地图。在我向地图添加标记之前,它工作正常。添加标记后,输出结果只是一个空白 HTML 页面。
import folium
map = folium.Map(location=[20.59,78.96], tiles = "Mapbox Bright")
folium.Marker([26.80,80.76],popup="Hey, It's Moradabad").add_to(map)
map.save("mapOutput.html")
根据我的经验,folium 对单引号非常敏感 ('
)。
原因是,folium 生成 javascript,并将您的字符串转换为 javascript 字符串,并用单引号括起来。但是,它确实不会转义字符串中包含的任何单引号(甚至不确定这在 js 中是否可行),因此在字符串中使用单引号与在 python.[ 中不关闭字符串具有相同的效果。 =15=]
解决方案:将字符串中的所有单引号替换为反引号 (`) 或(更好)使用@Bob Haffner 的回答。
编辑:纯属巧合,我刚才偶然发现了另一个解决方案。显然 folium.Popup
有一个参数 parse_html
。像这样使用它:
folium.Marker([x,y], popup=folium.Popup("Foo'Bar",parse_html=True)).add_to(map)
但是,如果 运行 出现 unicodeescape 错误,我将无法正常工作。尽管如此,它仍然存在,据说是为了这个目的,并且可能对你有用。
编辑 2:正如我在 github 上得知的那样,此问题将在下一版本中修复。参考:folium#962
@MCO 完全正确。
我喜欢利用html.escape()来处理像这样的问题字符
import folium
import html
map = folium.Map(location=[20.59,78.96], tiles = "Mapbox Bright")
folium.Marker([26.80,80.76],popup=html.escape("Hey, It's Moradabad")).add_to(map)
map.save("mapOutput.html")