0

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??

Ailurophile
  • 2,552
  • 7
  • 21
  • 46

0 Answers0