Untitled
unknown
plain_text
a year ago
3.3 kB
8
Indexable
import folium import pandas as pd import geopandas as gpd from shapely.geometry import Point import matplotlib.pyplot as plt # Cargar los puntos georreferenciados desde el archivo GeoJSON puntos = gpd.read_file('hundredpoints.geojson') # Cargar la base de datos de parques y jardines con la codificación UTF-8 parques = pd.read_csv('centroides_zonas_verdes.csv', encoding='utf-8') parques_gdf = gpd.GeoDataFrame(parques, geometry=gpd.points_from_xy(parques['longitud'], parques['latitud']), crs="EPSG:4326") # Crear un mapa centrado en la primera ubicación del GeoJSON mapa = folium.Map(location=[puntos.geometry.y.mean(), puntos.geometry.x.mean()], zoom_start=13) # Función para contar las zonas verdes en un radio de 750 m def contar_zonas_verdes(punto, parques, radio=750): # Convertir el radio a grados (aproximadamente) buffer = punto.buffer(radio / 111320) # 1 grado ~ 111.32 km en el ecuador zonas_verdes = parques[parques.intersects(buffer)] return len(zonas_verdes) # Encontrar el número máximo de zonas verdes alrededor de los puntos para normalizar los colores y la puntuación max_zonas_verdes = puntos.geometry.apply(lambda geom: contar_zonas_verdes(geom, parques_gdf)).max() # Crear una paleta de colores colormap = folium.LinearColormap(colors=['red', 'yellow', 'green'], vmin=0, vmax=max_zonas_verdes) # Preparar una lista para los resultados resultados = [] # Añadir los puntos georreferenciados al mapa con colores basados en el número de zonas verdes for idx, row in puntos.iterrows(): num_zonas_verdes = contar_zonas_verdes(row.geometry, parques_gdf) color = colormap(num_zonas_verdes) # Calcular la puntuación normalizada de 0 a 10 puntuacion = (num_zonas_verdes / max_zonas_verdes) * 10 # Añadir los resultados a la lista resultados.append({'longitud': row.geometry.x, 'latitud': row.geometry.y, 'puntuacion': round(puntuacion, 2), 'Numero de Zonas Verdes': num_zonas_verdes}) # Añadir un círculo alrededor del punto folium.Circle( location=[row.geometry.y, row.geometry.x], radius=750, # Radio de 750 m color=None, fill=True, fill_color=color, fill_opacity=0.2, popup=f'Zonas Verdes: {num_zonas_verdes}\nPuntuación: {round(puntuacion, 2)}', opacity=0 ).add_to(mapa) # Añadir el marcador del punto folium.CircleMarker( location=[row.geometry.y, row.geometry.x], radius=4, color='black', fill=True, fill_color='black', fill_opacity=1, popup=f'Zonas Verdes: {num_zonas_verdes}\nPuntuación: {round(puntuacion, 2)}' ).add_to(mapa) # Añadir la escala de colores al mapa colormap.add_to(mapa) # Guardar el mapa en un archivo HTML mapa.save('mapa_con_ZonasVerdes.html') # Crear un DataFrame con los resultados y guardarlo como un archivo CSV resultados_df = pd.DataFrame(resultados) resultados_df.to_csv('Puntuacion_Zonas_Verdes.csv', index=False, encoding='utf-8') print("Mapa guardado en 'mapa_con_ZonasVerdes.html'") print("Resultados guardados en 'Puntuacion_Zonas_Verdes.csv'")
Editor is loading...
Leave a Comment