How to add Search plugin in folium for multiple fields?

344 Views Asked by At

I'm trying to add a search bar in folium map using folium plugins.

Data:

import geopandas


states = geopandas.read_file(
    "https://raw.githubusercontent.com/PublicaMundi/MappingAPI/master/data/geojson/us-states.json",
    driver="GeoJSON",
)


states_sorted = states.sort_values(by="density", ascending=False)

states_sorted.head(5).append(states_sorted.tail(5))[["name", "density"]]

def rd2(x):
    return round(x, 2)


minimum, maximum = states["density"].quantile([0.05, 0.95]).apply(rd2)

mean = round(states["density"].mean(), 2)


import branca


colormap = branca.colormap.LinearColormap(
    colors=["#f2f0f7", "#cbc9e2", "#9e9ac8", "#756bb1", "#54278f"],
    index=states["density"].quantile([0.2, 0.4, 0.6, 0.8]),
    vmin=minimum,
    vmax=maximum,
)

colormap.caption = "Population Density in the United States"
    id  name    density geometry
0   01  Alabama 94.650  POLYGON ((-87.35930 35.00118, -85.60667 34.984...
1   02  Alaska  1.264   MULTIPOLYGON (((-131.60202 55.11798, -131.5691...
2   04  Arizona 57.050  POLYGON ((-109.04250 37.00026, -109.04798 31.3...
3   05  Arkansas    56.430  POLYGON ((-94.47384 36.50186, -90.15254 36.496...
4   06  California  241.700 POLYGON ((-123.23326 42.00619, -122.37885 42.0...

Folium Map:

import folium
from folium.plugins import Search


m = folium.Map(location=[38, -97], zoom_start=4)


def style_function(x):
    return {
        "fillColor": colormap(x["properties"]["density"]),
        "color": "black",
        "weight": 2,
        "fillOpacity": 0.5,
    }


stategeo = folium.GeoJson(
    states,
    name="US States",
    style_function=style_function,
    tooltip=folium.GeoJsonTooltip(
        fields=["name", "density"], aliases=["State", "Density"], localize=True
    ),
).add_to(m)

statesearch = Search(
    layer=stategeo,
    geom_type="Polygon",
    placeholder="Search for a US State",
    collapsed=False,
    search_label="name",
    weight=3,
).add_to(m)

folium.LayerControl().add_to(m)
colormap.add_to(m)

m

enter image description here

In the above map user can search only by US state name, is it possible to include multiple fields for search, like searching based on density/ id / Name??

1

There are 1 best solutions below

0
Wander A. Martins On

I'm not sure if that's the best way to do it. But one idea is to create an extra search bar. One for the American states and one for density, for example.

See this link: https://python-visualization.github.io/folium/latest/user_guide/plugins/search.html#Map-with-Search-plugin