sábado, 21 de enero de 2017

Cómo crear un geodataframe con GeoPandas empleando rasgos aislados

Una de las principales facetas del módulo python 'GeoPandas' es la facilidad con la que se pueden realizar ciertas tareas. Sin embargo, en el manual a veces no aparecen las cosas que se nos ocurren y toca averiguarlas en otra parte. Por ejemplo, con PyQGIS, si queremos visualizar las capas producto de nuestros geoprocesos se puede recurrir a una memory layer. No obstante, esto puede considerarse como un procedimiento algo laborioso que amerita conocer varios métodos de diferentes clases. Con GeoPandas prácticamente se realiza en una sola línea.



Para una situación similar a la del post anterior, en la imagen siguiente (capas producidas mediante PyQGIS) se considera el hecho de obtener ahora dos pentágonos centrados en dos puntos diferentes. Con GeoPandas se van a almacenar las geometrías en una lista con el formato de shapely y, en una sola línea, se convierten directamente en GeoDataFrame a través de sus respectivas GeoSeries.


El código a continuación elimina toda utilización de las clases de PyQGIS y produce la GeoDataFrame signada como 'fd'.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
from shapely.geometry import Polygon
import geopandas as gpd
 
diameter = 3
polygonSides = 5
 
points = [ (-3.055975, 47.601177), (4.20553227898, 45.1967387293) ]

polygons = []
 
for i, point in enumerate(points):
    polygon = [ (point[0] + np.sin(angle)*diameter, point[1] + np.cos(angle)*diameter)
                for angle in np.linspace(0, 2*np.pi, polygonSides, endpoint = False) ]

    polygons.append(Polygon(polygon))

df = gpd.GeoDataFrame(gpd.GeoSeries(poly for poly in polygons), columns=['geometry'])

print df

Empleando matplotlib a través de la siguiente secuencia de comandos en la Python Console de QGIS:

1
2
3
4
>>>from matplotlib import pyplot as plt
>>>plt.ion()
>>>df.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x8bedf8ec>

se obtiene, tal como se esperaba, la siguiente visualización:


Si se desea, el GeoDataFrame 'df' se puede grabar como archivo vectorial con el método 'to_file' de GeoPandas.

No hay comentarios: