You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:11:06