Untitled
unknown
plain_text
a year ago
3.3 kB
13
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