import geopandas as gpd
datos_barrios = gpd.read_file('datasets/barrios.gml')
datos_barrios.head(1)| gml_id | MSLINK | BARRIO | OBSERVACIO | geometry | |
|---|---|---|---|---|---|
| 0 | barrios.1 | 28 | VICTORIA WALSH | Mod Lím Or | POLYGON ((-60.68993 -32.96495, -60.68973 -32.9... |
UNIDAD 4 - Parte 3
El atributo que distingue a los datos georreferenciados de otros tipos de datos es que contienen información sobre ubicaciones exactas sobre la superficie de nuestro planeta.
Visualizar datos georreferenciados requiere herramientas específicas y, antes de usarlas, es necesario entender algunos conceptos fundamentales sobre cómo se describe la posición de un punto sobre nuestro planeta. Este es el dominio de la GEODESIA: la ciencia que estudia la forma y las dimensiones de la Tierra.
Una manera de modelar la superficie de la Tierra sería considerarla como una esfera. Esta simplificaación hace los cálculos manejables y es suficiente para mapas a pequeña escala.
Sin embargo, la Tierra no es una esfera perfecta.
La rotación terrestre hace que la velocidad en el Ecuador sea mayor que en los polos, y esto deforma a nuestro planeta, haciendo que sea más “alargado” en la zona ecuatorial y más “achatado” en las zonas polares (el radio de la Tierra no es constante a lo largo de su superficie).
El elipsoide o esferoide es un cuerpo geométrico que proporciona una mejor aproximación a la forma de la Tierra.
El elipsoide se genera a partir de la rotación de una elipse alrededor de su eje menor.
En el caso de la Tierra, el semieje mayor (\(a\)) es el radio desde el centro de la Tierra hasta el Ecuador, mientras que el semieje menor (\(b\)) es el radio desde el centro de la Tierra hasta el Polo.
El geoide es el modelo más fiel a la forma real de la Tierra desde un punto de vista físico, en tanto reproduce el hecho de que el interior de la Tierra no presenta una densidad uniforme, lo que lleva a que la fuerza gravitatoria no sea idéntica en todos los puntos en su superficie.
El geoide presenta una forma irregular, con protuberancias y depresiones.
Existen diversos elipsoides propuestos para modelar la superficie de la Tierra y se conocen como elipsoides de referencia. Acá se resumen algunos de ellos:
| Elipsoide | Semieje mayor (m) | Semieje menor (m) |
|---|---|---|
| Australian National | 6378160.000 | 6356774.719 |
| Clarke 1866 | 6378206.400 | 6356583.800 |
| Bessel 1841 | 6377397.155 | 6356078.963 |
| Fischer 1968 | 6378150.000 | 6356768.337 |
| International 1924 (Hayford) | 6378388.000 | 6356911.946 |
| GRS 1980 | 6378137.000 | 6356752.314 |
| WGS 84 | 6378137.000 | 6356752.314 |
El elipsoide define la forma del modelo de la Tierra, pero no basta por sí solo para describir posiciones. También necesitamos saber cómo está orientado y posicionado ese elipsoide respecto al planeta real.
Surge así el concepto de datum.
El datum es un sistema de referencia. Proporciona un modelo que permite a las personas medir ubicaciones en la superficie de la Tierra en relación con un elipsoide particular que se ajusta apropiadamente a la región en la que se realizan las mediciones, en un momento particular.
DATUM GLOBAL O GEOCÉNTRICO: especifica un elipsoide cuyo centro coincide con el centro de masa de la Tierra y cuyos ejes están alineados con los ejes terrestres. Está diseñado para funcionar con precisión aceptable en cualquier parte del mundo. Ejemplo: WGS 84.
DATUMS LOCALES: ajustan el elipsoide para que se adapte con máxima precisión a una región geográfica específica. Por ejemplo, en Argentina se utilizó históricamente el datum Campo Inchauspe para la cartografía nacional. Otros ejemplos: Chos Malal y Tapi Aike.
Dado que un datum local alinea tan estrechamente su esferoide a una área determinada de la superficie de la Tierra, no es adecuado para su uso fuera del área para la que se diseñó.
El sistema de coordenadas geográficas es un sistema de coordenadas esféricas mediante el cual un punto se localiza con dos valores angulares: la latitud (\(\phi\)) y la longitud (\(\lambda\)).
Si bien el sistema de coordenadas geográficas (basado en latitud y longitud) es poderoso y preciso, presenta limitaciones al trabajar sobre superficies planas (pantallas, papel, etc.), ya que utiliza unidades angulares.
Además, las distancias asociadas a estas unidades no son constantes: un grado de longitud equivale a distintas distancias según la latitud, disminuyendo desde el Ecuador hacia los Polos.
Proyección cartográfica: proceso matemático mediante el cual se “trasladan” posiciones desde la superficie curva de la Tierra a una superficie plana bidimensional.
Las proyecciones se clasifican según la superficie sobre la que se proyectan los puntos. Si bien existen otras superficies, las más habituales son:
CONO
CILINDRO
PLANO
La superficie desarrollable es un cono, el cual se sitúa generalmente tangente o secante en dos paralelos a la superficie del elipsoide.
En este último caso, la distorsión se minimiza en las áreas entre dichos paralelos, haciéndola útil para representar franjas que no abarquen una gran distancia en latitud, pero poco adecuada para representación de grandes áreas. Ejemplos: Proyección Cónica Equiárea de Albers y Proyección Conforme Cónica de Lambert.
Son aquellas que proporcionan la apariencia de un rectángulo, que puede ser visto como una superficie cilíndrica “desenrollada”.
Al proyectar, tanto los meridianos como los paralelos se convierten en líneas paralelas, aunque la distancia entre estos últimos no es constante. Ejemplos: Proyección Conforme de Mercator y Proyección Equivalente de Lambert.
Consisten en proyectar una parte de la Tierra sobre un plano tangente a la esfera en un punto seleccionado. El punto de contacto puede ser el Polo Norte, el Polo Sur, un punto en el Ecuador o cualquier punto intermedio.
En la práctica, toda la información sobre el datum y la proyección utilizada se condensa en un único dentificador llamado sistema de coordenadas de referencia (CRS). El registro más utilizado para identificar CRS de manera estandarizada es el sistema EPSG (European Petroleum Survey Group). Por ejemplo:
EPSG:4326 (WGS 84 geográfico). Coordenadas angulares en grados de latitud y longitud. Sistema del GPS y el más común en datos abiertos.
EPSG:3857 (Pseudo-Mercator). Sistema proyectado en metros que utilizan Google Maps, OpenStreetMap, entre otros servicios.
Es una librería de Python de código abierto que proporciona soporte para el trabajo con datos georreferenciados sobre la base de objetos Pandas.
GeoPandas utiliza geometrías espaciales para representar diferentes tipos de objetos geográficos.
GeoPandas utiliza geometrías espaciales para representar diferentes tipos de objetos geográficos. Estos son los más comunes:
POINT (Punto): representa una ubicación individual en el espacio, definida por un par de coordenadas. Ejemplos: ubicación de un sensor de monitoreo ambiental, una ciudad, un efector de salud, etc.
LINESTRING (Línea): es una secuencia de puntos conectados que forman una línea. Representa objetos lineales, como rutas, calles, ríos o límites geográficos.
POLYGON (Polígono): es un área cerrada definida por una secuencia de puntos. Representa una superficie o área geográfica, como una parcela de terreno, un lago, una provincia o un país.
MULTIPOLYGON (Polígono): es una geometría que agrupa múltiples POLYGON que están relacionados entre sí. Estas geometrías pueden estar separadas o ser contiguas. Por ejemplo: conjunto de islas en un archipiélago, múltiples departamentos que conforman una provincia, múltiples provincias/estados que conforman un país, etc.
GeoPandas facilita la lectura de archivos geoespaciales, como Shapefiles, GML o GeoJSON, que contienen datos geográficos. La información sobre las geometrías de los objetos (como puntos, líneas o polígonos) se suele almacenar en una columna especial llamada geometry.
Para leer cualquiera de estos archivos, podemos utilizar el método gpd.read_file().
Para ejemplificar, trabajaremos con los datasets barrios.gml y geo_salud.gml, que se encuentran dentro de los datos abiertos de la Municipalidad de Rosario y contienen información relacionada a los barrios de la ciudad y a los centros de salud, respectivamente.
Ambos archivos se encuentran en formato GML, acrónimo inglés de Geography Markup Language (Lenguaje de Marcado Geográfico), el cual se trata de un sublenguaje de XML utilizado para el modelado, transporte y almacenamiento de información geográfica.
Exploremos el primero de estos archivos:
| gml_id | MSLINK | BARRIO | OBSERVACIO | geometry | |
|---|---|---|---|---|---|
| 0 | barrios.1 | 28 | VICTORIA WALSH | Mod Lím Or | POLYGON ((-60.68993 -32.96495, -60.68973 -32.9... |
¿Qué tipo de elemento contiene la columna geometry?
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 51 entries, 0 to 50
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 gml_id 51 non-null object
1 MSLINK 51 non-null int64
2 BARRIO 51 non-null object
3 OBSERVACIO 51 non-null object
4 geometry 51 non-null geometry
dtypes: geometry(1), int64(1), object(3)
memory usage: 2.1+ KB
Observar que el objeto datos_barrios es un objeto de tipo GeoDataFrame y que éste contiene una columna de tipo geometry, en la que se encuentra la información geoespacial.
Podemos hacer un mapa utilizando el método plot sobre el objeto GeoDataFrame:
Podemos representar sólo las divisiones entre barrios con el método boundary.plot:
Importamos ahora el archivo geo_salud.gml y exploramos su contenido:
| fid | id | name | codigo_calle | calle | altura | bis | direccion | etiquetas | subtipo | ... | titular | estado | tipo_geometria | ultima_actualizacion | contactos | atencion | descripcion | piso | multimedia | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | F0 | 1220 | Hospital Provincial | 21950 | ALEM LEANDRO N | 1450 | 0 | ALEM LEANDRO N 1450 | Salud, Datos útiles | LUGAR | ... | Provincial | Publicado | Punto | 01/08/2017 09:35 | Teléfono: 4801402. | None | None | None | None | POINT (-60.63051 -32.95626) |
1 rows × 25 columns
¿Qué tipo de elemento contiene la columna geometry?
🤔 ¿Cómo podemos hacer para agregar, al gráfico anterior, información acerca del tipo de efector de salud (Municipal/Nacional/Privado/Provincial)?
Tener en cuenta que, en la base datos_centros_salud, esta información se encuentra en la columna titular.
# Crea el mapa base con los límites de los barrios
graf_base = datos_barrios.plot(edgecolor = 'black', color = 'lightgrey', linewidth = 1)
# Superpone los puntos de los centros de salud en el mapa base coloreándolos según categoría en 'titular'
datos_centros_salud.plot(ax = graf_base, markersize = 20, column = 'titular')Mejoremos un poquito el gráfico anterior:
Agreguemos la leyenda seteando el parámetro legend = True.
Configuremos la paleta cmap = 'viridis'.
Agreguemos un título a la leyenda y ajustemos manualmente su posición en el gráfico a través del parámetro legend_kwds = dict(title = 'Efector', bbox_to_anchor = (1.4, 1)).
Representemos sólo los límites de cada barrio, sin relleno, para que los puntos se visualicen mejor.
# Crea el mapa base con los límites de los barrios
graf_base = datos_barrios.boundary.plot(edgecolor = 'black', linewidth = 0.8)
# Superpone los puntos de los centros de salud en el mapa base coloreándolos según categoría en 'titular'
datos_centros_salud.plot(ax = graf_base, markersize = 20, column = 'titular', legend = True, cmap = 'viridis', legend_kwds = dict(title = 'Efector', bbox_to_anchor = (1.4, 1)))Un mapa choropleth es una representación gráfica de datos en un mapa donde las áreas geográficas están coloreadas o sombreadas en función de la intensidad o el valor de un atributo específico.
Este tipo de visualización es particularmente útil para mostrar variaciones en datos cuantitativos, como tasas de población, distribución de ingresos, niveles de educación o cualquier otra métrica que se pueda asociar a diferentes regiones.
Importaremos ahora el archivo cultivos_por_dpto_mapa.json, que contiene datos acerca de la superficie cultivada en cada uno de los departamentos de la provincia de Córdoba:
| id | nombre | sup_cultivada | sup_trigo | porc_trigo | sup_maiz | porc_maiz | sup_soja | porc_soja | sup_mani | porc_mani | sup_sorgo | porc_sorgo | sup_tr_mz | porc_tr_mz | sup_tr_sj | porc_tr_sj | sup_dpto | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | cultivos_por_dpto_mapa.1 | JUAREZ CELMAN | 542086 Has | 710 Has | 0.1 % | 139802 Has | 25.8 % | 241694 Has | 44.6 % | 58191 Has | 10.7 % | 1394 Has | 0.3 % | 25814 Has | 4.8 % | 74481 Has | 13.7 % | 792949 Has | MULTIPOLYGON (((4416979.546 6325867.470, 44168... |
El objetivo es construir un mapa para representar visualmente la cantidad de hectáreas sembradas por departamento (columna sup_cultivada). Para ello, primero debemos extraer el número, separándolo de la unidad “Has”:
datos_cultivos['sup_cultivada_has'] = datos_cultivos['sup_cultivada'].str.extract(r'(\d+)').astype('int')
datos_cultivos.head(1)| id | nombre | sup_cultivada | sup_trigo | porc_trigo | sup_maiz | porc_maiz | sup_soja | porc_soja | sup_mani | porc_mani | sup_sorgo | porc_sorgo | sup_tr_mz | porc_tr_mz | sup_tr_sj | porc_tr_sj | sup_dpto | geometry | sup_cultivada_has | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | cultivos_por_dpto_mapa.1 | JUAREZ CELMAN | 542086 Has | 710 Has | 0.1 % | 139802 Has | 25.8 % | 241694 Has | 44.6 % | 58191 Has | 10.7 % | 1394 Has | 0.3 % | 25814 Has | 4.8 % | 74481 Has | 13.7 % | 792949 Has | MULTIPOLYGON (((4416979.546 6325867.470, 44168... | 542086 |
Para emprolijar la escala en el mapa, conviene expresar los valores en millones de hectáreas en lugar de hectáreas brutas:
Representemos dicha información con el método plot:
Con el método crs accedemos al Sistema de Coordenadas de Referencia del GeoDataFrame:
<Projected CRS: EPSG:22174>
Name: POSGAR 98 / Argentina 4
Axis Info [cartesian]:
- X[north]: Northing (metre)
- Y[east]: Easting (metre)
Area of Use:
- name: Argentina - between 64°30'W and 61°30'W, onshore.
- bounds: (-64.5, -54.91, -61.5, -21.99)
Coordinate Operation:
- name: Argentina zone 4
- method: Transverse Mercator
Datum: Posiciones Geodesicas Argentinas 1998
- Ellipsoid: GRS 1980
- Prime Meridian: Greenwich
El CRS EPSG:22174 es proyectado, lo que significa que sus coordenadas están en metros (norte y este).
Para representar las coordenadas adecuadamente, debemos reproyectar los datos a un CRS geográfico, como EPSG:4326 o WGS 84, que usa latitud y longitud en grados.
Rehacemos el mapa:
Folium es una biblioteca de Python diseñada para facilitar la visualización de datos geoespaciales en mapas interactivos que se pueden visualizar en navegadores web.
Basada en la poderosa biblioteca Leaflet.js, Folium permite crear mapas de una manera sencilla y personalizarlos con una variedad de capas, marcadores y herramientas de análisis espacial.