es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar un control de capas en Leaflet iterando a través de un df?

Tengo una columna específica en mi df con 4 valores únicos. Me gustaría agregar un control de capa de grupo de características para filtrar marcadores en base a esos cuatro valores. Mi código es:

m = folium.Map(location=it_coords, zoom_start=6, tiles='openstreetmap', control_scale=True, prefer_canvas=True)

mc = MarkerCluster().add_to(m)
feature_group = FeatureGroup(name="Monumenti")
for grp_name, df_grp in df.groupby('Tipologia personaggio'):
    print(grp_name)

for i in range(0,len(df)):
    html="""Nome: """+df.iloc[i]['Nome']+"
"+"""Città: """+df.iloc[i]['Citta'] iframe = folium.IFrame(html=html, width=200, height=200) popup = folium.Popup(iframe, max_width=2650) folium.Marker( location=[df.iloc[i]['Latitude'], df.iloc[i]['Longitude']], popup=popup, icon=folium.Icon(color=color, icon='info-sign') ).add_to(mc)

Pero no funciona.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un control de capa de grupo de características para filtrar marcadores basados en los valores de una columna específica en su DataFrame, primero debe crear un grupo de características para cada valor único en esa columna. Luego, puede agregar todos los marcadores que pertenecen a cada grupo a sus respectivos grupos de características. Aquí hay un fragmento de código actualizado que debería funcionar:

    from folium.plugins import MarkerCluster, FeatureGroupSubGroup
    
    m = folium.Map(location=it_coords, zoom_start=6, tiles='openstreetmap', control_scale=True, prefer_canvas=True)
    
    mc = MarkerCluster().add_to(m)
    
    # Crea grupos de funciones para cada valor único en la columna 'Tipologia personaggio'
    for grp_name, df_grp in df.groupby('Tipologia personaggio'):
        feature_group = FeatureGroupSubGroup(mc, grp_name)
    
        for i in range(len(df_grp)):
            html = f"""<b>{df_grp.iloc[i]['Nome']}</b><br>
                       {df_grp.iloc[i]['Indirizzo']}"""
    
            iframe = folium.IFrame(html=html, width=200, height=100)
    
            popup = folium.Popup(iframe, max_width=2650)
    
            folium.Marker(
                location=[df_grp.iloc[i]['Latitude'], df_grp.iloc[i]['Longitude']],
                popup=popup,
                icon=folium.Icon(color='blue', icon='info-sign')
            ).add_to(feature_group)
    
        feature_group.add_to(m)
    
    # Agrega control de capa para filtrar marcadores por grupo de características
    folium.LayerControl().add_to(m)
    

    En este código actualizado, primero creamos un objeto MarkerCluster mc para agrupar todos los marcadores juntos. Luego, para cada valor único en la columna ‘Tipologia personaggio’, creamos un objeto FeatureGroupSubGroup feature_group que pertenece a mc. Luego recorremos todas las filas en el subconjunto del DataFrame que corresponde a ese valor único y creamos un popup y una marca para cada fila. El popup contiene el nombre y la dirección del monumento, y la marca se agrega a feature_group.

    Finalmente, agregamos feature_group al mapa m y al final agregamos un objeto LayerControl para permitir al usuario filtrar los marcadores por grupo de características.

    Asegúrese de que los datos en su DataFrame sean correctos y estén formateados correctamente, y de que haya importado todas las bibliotecas necesarias (incluida folium.plugins para MarkerCluster y FeatureGroupSubGroup). Si todavía hay problemas, asegúrese de verificar la consola del navegador en busca de mensajes de error que puedan indicar el problema.

Comments are closed.