Python >> Tutoriel Python >  >> Python Tag >> Pandas

Geopandas équivalent à sélectionner par emplacement

Si poly est un GeoDataFrame avec une seule géométrie, extrayez ceci :

polygon = poly.geometry[0]

Ensuite, vous pouvez utiliser le within méthode pour vérifier lequel des points se trouve dans le polygone :

points.within(polygon)

cela renvoie des valeurs booléennes Vrai/Faux, qui peuvent être utilisées pour filtrer la trame de données d'origine :

subset = points[points.within(polygon)]

Dans le cas où la couche de polygones contient de nombreuses entités surfaciques, la solution peut être étendue, comme suit :

poly = gpd.read_file('C:/Users/srcha/Desktop/folder/poly.shp')
points = gpd.read_file('c:/Users/srcha/Desktop/folder/points.shp')

poly['dummy'] = 'dummy'  # add dummy column to dissolve all geometries into one
geom = poly.dissolve(by='dummy').geometry[0]  # take the single union geometry
subset = points[points.within(geom)]

Je n'aime pas le truc factice, mais je n'ai aucune autre idée de comment faire cela en utilisant des géopandas.