jueves, 19 de enero de 2017

Cómo seleccionar polígonos que contienen al menos un punto con 'sjoin' de GeoPandas

Si se tiene instalado el módulo GeoPandas de Python es muy sencillo realizar este proceso mediante el método 'sjoin' y su parámetro (opción) 'intersects'. Con el ejemplo de la imagen siguiente:




se tiene que el código a continuación produce un shapefile con el resultado esperado.

1
2
3
4
5
6
7
from geopandas import gpd 

points = gpd.GeoDataFrame.from_file('/home/zeito/pyqgis_data/random_points.shp')  
polys = gpd.GeoDataFrame.from_file('/home/zeito/pyqgis_data/polygon8.shp') 
polyWithPoints = gpd.sjoin(polys, points, op='intersects') 

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

Esto puede ser visualizado en la imagen siguiente cuando se carga el shapefile (en azul) en el Map Canvas de QGIS.


Sin embargo, a pesar de ser un procedimiento muy expedito produce un shapefile con registros repetidos (tantos como puntos existan dentro de los rasgos del polígono):



Para que sea más útil habría que eliminar los registros repetidos antes de grabar como shapefile (disponer de sólo 4 registros en lugar de los 6 mostrados).

No hay comentarios: