Folium 搜索插件 FeatureGroup 没有结果

Sha*_*aun 5 python search plugins folium

我正在尝试将搜索功能添加到我使用 Folium 在 Python 中生成的地图中。我看到有一个方便的搜索插件可用,并且能够成功实施并将其添加到地图中。不幸的是,使用 FeatureGroup 作为层我的 FeatureGroup 填充了标记似乎无法让搜索带回结果。

我的假设是搜索功能将查询标记的工具提示和/或弹出属性以返回纬度/经度作为搜索值。我已经尝试将值 'tooltip' 手动提供给 Search 函数的 search_label 选项,但没有成功。

import pandas as pd
import folium
from folium.plugins import Search

def mapGenerator(data):
    map = folium.Map()
    fg = folium.FeatureGroup()

    for index, row in data.iterrows():
        marker = folium.Marker(location=[row['lat'], row['lon']],
                               popup=row['name'])
        marker.add_to(fg)

    fg.add_to(map)
    Search(fg).add_to(map)

    map.save('map.html')

data = pd.DataFrame({'name': ['first', 'second', 'third'], 'lat': [28.27724, 48.52228, 22.43949],
                    'lon':[-9.72904, 34.77667, 102.49105]})

mapGenerator(data)
Run Code Online (Sandbox Code Playgroud)

此代码生成一个地图,该地图绘制一些随机点,然后添加一个搜索框。我的预期和期望的结果是,如果我搜索“first”,或者即使我搜索“fir”(或某些变体),搜索栏将放大名称为“first”的坐标,但目前,没有结果不管怎样都找到了。

示例输出

小智 0

import pandas as pd
import folium
from folium.plugins import Search
import geopandas as gpd


def mapGenerator(data):
    # Create geometry from the coordinates
    data['geometry'] = data.apply(lambda x: Point(x.lon,x.lat),axis=1)

    # Convert to geopandas dataframe
    gdf = gpd.GeoDataFrame(data, crs="EPSG:4326")
    
    m = folium.Map()
    
    # Create an individual FeatureGroup specific for the search. Set show=False to hide the points.
    fg_search = folium.FeatureGroup(name='search', show=False)
    m.add_child(fg_search)

    search_input = fg_search.add_child(folium.GeoJson(
                gdf))

    searchbar = Search(
        layer=search_input,
        geom_type="Point",
        placeholder="Search name",
        collapsed=False,
        search_label="name",
        weight=1,
    ).add_to(m)
    
    
    # Create all other FeatureGroups you would like to
    fg = folium.FeatureGroup(name='FeatureGroup')

    for index, row in data.iterrows():
        marker = folium.Marker(location=[row['lat'], row['lon']],
                               popup=row['name'])
        marker.add_to(fg)

    fg.add_to(m)
    
    # Add layer control
    m.add_child(folium.LayerControl())

    m.save('map.html')

data = pd.DataFrame({'name': ['first', 'second', 'third'], 'lat': [28.27724, 48.52228, 22.43949],
                    'lon':[-9.72904, 34.77667, 102.49105]})

mapGenerator(data)
Run Code Online (Sandbox Code Playgroud)