为何我的Web应用使用Stamen Terrain瓦片时出现报错?
解决folium使用Stamen Terrain瓦片的错误及添加标注点方法
错误原因
新版本folium不再默认内置Stamen系列瓦片的版权信息,直接传入tiles="Stamen Terrain"会被识别为自定义瓦片,而自定义瓦片必须指定attr(版权归属)参数,因此抛出ValueError: Custom tiles must have an attribution.。
修复代码(两种方式)
方式一:直接在Map初始化时指定瓦片URL和版权
import folium # 初始化地图,配置Stamen Terrain瓦片 map = folium.Map( location=[38.58, -99.09], zoom_start=6, tiles="https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png", attr="Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL." ) # 添加标注点示例 folium.Marker( location=[38.58, -99.09], popup="自定义标注点", icon=folium.Icon(color="blue") ).add_to(map) map.save("Map1.html")
方式二:使用TileLayer单独添加瓦片层(推荐,支持图层切换)
import folium # 初始化空地图 map = folium.Map(location=[38.58, -99.09], zoom_start=6) # 添加Stamen Terrain瓦片层 folium.TileLayer( tiles="https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png", attr="Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL.", name="Stamen Terrain" ).add_to(map) # 添加多个标注点示例 folium.Marker( location=[39.7392, -104.9903], # 丹佛坐标 popup="丹佛市", icon=folium.Icon(color="green") ).add_to(map) folium.Marker( location=[37.7749, -122.4194], # 旧金山坐标 popup="旧金山", icon=folium.Icon(color="red") ).add_to(map) # 添加图层控制器,可切换瓦片层 folium.LayerControl().add_to(map) map.save("Map1.html")
关键说明
- Stamen Terrain瓦片的URL和版权信息需严格按上述代码填写,避免版权问题和加载失败。
- 添加标注点时,创建
folium.Marker实例并指定坐标、弹窗内容、图标样式,再调用add_to(map)即可绑定到地图。
内容的提问来源于stack exchange,提问作者ChristineLwanga
相关产品推荐
相关产品推荐

