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

如何在Folium地图中创建可搜索任意地点的搜索栏?

实现基于Folium+Nominatim的地图搜索栏

步骤1:安装依赖

确保已安装folium,未安装则执行:

pip install folium

步骤2:完整实现代码(Jupyter Notebook可用)

folium本身未集成Leaflet Search插件,但可以通过注入自定义CSS/JS资源和控件代码,直接对接Nominatim服务。以下是可直接运行的示例:

import folium

# 创建基础地图(初始定位伦敦,可自行修改)
m = folium.Map(location=[51.5074, -0.1278], zoom_start=10)

# 注入Leaflet Search插件的样式和脚本资源
folium.Element("""
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet-search/3.0.9/leaflet-search.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-search/3.0.9/leaflet-search.min.js"></script>
""").add_to(m)

# 添加搜索控件并关联Nominatim服务
folium.Element("""
<script>
    const searchControl = new L.Control.Search({
        url: 'https://nominatim.openstreetmap.org/search?format=json&q={s}',
        jsonpParam: 'json_callback',
        propertyName: 'display_name',
        propertyLoc: ['lat', 'lon'],
        marker: L.circleMarker([0,0], {radius: 10, color: '#ff4444'}),
        moveToLocation: function(latlng, title, map) {
            map.setView(latlng, 13); // 搜索结果定位后自动缩放至13级
        },
        placeholder: '搜索地点...'
    });
    map.addControl(searchControl);
</script>
""").add_to(m)

# 渲染显示地图
m

关键配置说明

  • url:指向Nominatim的公开搜索接口,{s}会自动替换为输入的搜索关键词
  • propertyName:指定搜索结果中显示的名称字段(Nominatim返回的display_name包含完整地址)
  • propertyLoc:从返回结果中提取经纬度的字段名
  • marker:自定义搜索结果标记的样式,可根据需求修改颜色、大小等
  • moveToLocation:定义搜索到结果后地图的缩放行为

注意事项

  • Nominatim有请求频率限制,请勿短时间内发起大量请求
  • 若地图加载缓慢,检查网络是否能正常访问CDN资源
  • 可通过调整L.Control.Search的配置项,自定义搜索栏的样式、提示文字等

内容的提问来源于stack exchange,提问作者Zack Hawkes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:20:27