我想根据地理数据框中的一列在 folium 标记内添加数字。
在这篇post中,他们使用 BeautifyIcon 实现了它。
我正在使用 GeoPandas 探索功能和 folium,所以我不知道如何像在另一篇文章中那样在没有循环的情况下放置数字。
这是我尝试过的,但没有运气。它只是抛出错误“对象类型系列不是 JSON 可序列化”。
import folium.plugins as plugins
gdfNORTE.explore(
m=m,
marker_type='marker',
#marker_kwds={'icon': folium.map.Icon(icon='map-marker', prefix='fa')},
marker_kwds={'icon': (plugins.BeautifyIcon(icon="map-marker", icon_shape="marker", number=gdfNORTE["Cantidad de veces visitado"]))},
tooltip=["CALLE","NUMERO","ACT ECON","DESCRIPCION","CANT_TRAB","TRAB", "Cantidad de veces visitado"],
tooltip_kwds=dict(labels=True),
name="Domicilios visitados",
prefer_canvas=True,
)
谢谢。
受到linked Q/A 的启发,你可以尝试这个:
我将使用文档中使用的 GeoDataFrame example 来为您提供一般逻辑。
City Country Latitude Longitude geometry
0 Buenos Aires Argentina -34.58 -58.66 POINT (-58.66000 -34.58000)
1 Brasilia Brazil -15.78 -47.91 POINT (-47.91000 -15.78000)
2 Santiago Chile -33.45 -70.66 POINT (-70.66000 -33.45000)
3 Bogota Colombia 4.60 -74.08 POINT (-74.08000 4.60000)
4 Caracas Venezuela 10.48 -66.86 POINT (-66.86000 10.48000)
import folium
from folium.plugins import BeautifyIcon
# to simulate a label column and potentially, a color too
hex_colors = ["#ff7f0e", "#2ca02c", "#7f7f7f", "#1f77b4", "#9467bd"]
gdf["Label"], gdf["Color"] = range(1, len(gdf)+1), hex_colors
m = folium.Map(location= gdf.loc[0, ["Latitude", "Longitude"]].tolist(), zoom_start=10)
cols = ["City", "Longitude", "Latitude", "Label", "Color"]
for city, lon, lat, label, color in gdf[cols].to_numpy():
# feel free to custom the html
html=f"""<h4>{city}</h4>"""
iframe = folium.IFrame(html=html, width=200, height=150)
folium.Marker(
location=[lat, lon], popup=folium.Popup(iframe, max_width=650),
icon=BeautifyIcon(
icon="arrow-down",
icon_shape="marker",
number=str(label),
border_color= "#000000",
background_color=color,
text_color="#FFFFFF"
)
).add_to(m)
m
输出: