miércoles, 18 de enero de 2017

Union espacial con GeoPandas (método 'sjoin')

Las uniones espaciales en GeoPandas son posibles mediante el método 'sjoin'. Sin embargo, esto requiere además el concurso del módulo Python 'Rtree' (instalado con easy_install) y la librería libspatialindex tomada de los repositorios de mi Debian.



El objetivo considerado en este post es usar el modificador op='within' en 'sjoin' para obtener un shapefile de puntos que refleje aquellos que están contenidos dentro de los rasgos de una capa tipo polígono. La situación se visualiza como:


El código siguiente permite obtener el referido shapefile:

1
2
3
4
5
6
7
from geopandas import gpd 

points = gpd.GeoDataFrame.from_file('/home/zeito/pyqgis_data/random_points.shp') # or geojson etc 
polys = gpd.GeoDataFrame.from_file('/home/zeito/pyqgis_data/polygon8.shp') 
pointInPoly = gpd.sjoin(points, polys, op='within') 

pointInPoly.to_file('/home/zeito/pyqgis_data/pointInPoly.shp')

En la imagen a continuación se observa el shapefile producido cargado en la Map View de QGIS. En su tabla atributiva se han creado automáticamente campos ('index_righ', 'FID') que refieren la inclusión de los puntos según el rasgo de la capa polígono considerado. A modo de ejemplo, se tiene que los puntos con ids (estos no se visualizan en la imagen) 8, 12 y 18, tres en total, se encuentran en el interior del rasgo con FID igual 1 (tal como se esperaba).


Si se desea, esta cuenta puede determinarse e incluirse en el shapefile tipo polígono.

No hay comentarios: