Herramientas Python para datos geográficos
GeoPandas es un proyecto para agregar soporte para datos geográficos a objetos pandas. Actualmente implementa los tipos GeoSeries
y GeoDataFrame
, que son subclases de pandas.Series
y pandas.DataFrame
respectivamente. Los objetos GeoPandas pueden actuar sobre objetos geométricos con formas y realizar operaciones geométricas.
Las operaciones de geometría de GeoPandas son cartesianas. El sistema de referencia de coordenadas (crs) se puede almacenar como un atributo en un objeto y se configura automáticamente cuando se carga desde un archivo. Los objetos se pueden transformar a nuevos sistemas de coordenadas con el método to_crs()
. Actualmente no se aplican coordenadas similares para las operaciones, pero eso puede cambiar en el futuro.
La documentación está disponible en geopandas.org (versión actual) y Read the Docs (versiones de lanzamiento y desarrollo).
El proyecto GeoPandas utiliza un modelo de gobernanza abierta y está patrocinado fiscalmente por NumFOCUS. Considere hacer una donación deducible de impuestos para ayudar al proyecto a pagar el tiempo del desarrollador, los servicios profesionales, los viajes, los talleres y una variedad de otras necesidades.
Consulte los documentos de instalación para obtener todos los detalles. GeoPandas depende de los siguientes paquetes:
pandas
shapely
pyogrio
pyproj
packaging
Además, matplotlib
es una dependencia opcional, necesaria para trazar. Esos paquetes dependen de varias bibliotecas de bajo nivel para análisis geoespaciales, cuya instalación puede ser un desafío. Por lo tanto, recomendamos instalar GeoPandas usando el administrador de paquetes conda. Consulte los documentos de instalación para obtener más detalles.
>>> import geopandas
>>> from shapely.geometry import Polygon
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = geopandas.GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0 0, 1 0, 1 1, 0 0))
1 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))
2 POLYGON ((2 0, 3 0, 3 1, 2 1, 2 0))
dtype: geometry
Algunas operaciones geográficas devuelven objetos pandas normales. La propiedad de area
de GeoSeries
devolverá pandas.Series
que contiene el área de cada elemento de GeoSeries
:
>>> print(g.area)
0 0.5
1 1.0
2 1.0
dtype: float64
Otras operaciones devuelven objetos GeoPandas:
>>> g.buffer(0.5)
0 POLYGON ((-0.3535533905932737 0.35355339059327...
1 POLYGON ((-0.5 0, -0.5 1, -0.4975923633360985 ...
2 POLYGON ((1.5 0, 1.5 1, 1.502407636663901 1.04...
dtype: geometry
Los objetos GeoPandas también saben cómo trazarse a sí mismos. GeoPandas usa matplotlib para trazar. Para generar un gráfico de GeoSeries
, utilice:
>>> g.plot()
GeoPandas también implementa constructores alternativos que pueden leer cualquier formato de datos reconocido por Pyogrio. Para leer un archivo zip que contiene un archivo de forma ESRI con los límites de los distritos de la ciudad de Nueva York (el ejemplo se puede obtener usando el paquete geodatasets
):
>>> import geodatasets
>>> nybb_path = geodatasets.get_path('nybb')
>>> boros = geopandas.read_file(nybb_path)
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort_index(inplace=True)
>>> boros
BoroName Shape_Leng Shape_Area
BoroCode
1 Manhattan 359299.096471 6.364715e+08
2 Bronx 464392.991824 1.186925e+09
3 Brooklyn 741080.523166 1.937479e+09
4 Queens 896344.047763 3.045213e+09
5 Staten Island 330470.010332 1.623820e+09
geometry
BoroCode
1 MULTIPOLYGON (((981219.0557861328 188655.31579...
2 MULTIPOLYGON (((1012821.805786133 229228.26458...
3 MULTIPOLYGON (((1021176.479003906 151374.79699...
4 MULTIPOLYGON (((1029606.076599121 156073.81420...
5 MULTIPOLYGON (((970217.0223999023 145643.33221...
>>> boros['geometry'].convex_hull
BoroCode
1 POLYGON ((977855.4451904297 188082.3223876953,...
2 POLYGON ((1017949.977600098 225426.8845825195,...
3 POLYGON ((988872.8212280273 146772.0317993164,...
4 POLYGON ((1000721.531799316 136681.776184082, ...
5 POLYGON ((915517.6877458114 120121.8812543372,...
dtype: geometry