J'ai un cadre de données géopandas dans EPSG: 4326 et je ferais un nouveau cadre de données composé de toutes les lignes qui se trouvent dans une certaine boîte englobante.
D'abord, j'obtiens le cadre de délimitation qui m'importe (qui est en fait le cadre de délimitation d'une autre trame de données):
print df_sussex.total_bounds
[ -1.57239292 50.57467674 0.14528384 51.27465152]
Ensuite, je crée une trame de données composée uniquement de cette boîte englobante:
pts = gpd.GeoDataFrame(df_sussex.total_bounds)
Et enfin, j'essaie d'obtenir toutes les fonctionnalités qui se croisent avec cette boîte englobante:
sac_sussex = gpd.overlay(pts, df_sac, how='intersection')
Mais cela me donne AttributeError: No geometry data set yet (expected in column 'geometry'
.
Qu'est-ce que je fais mal?
Réponses:
Le problème est dû au fait que vous utilisez la méthode 'total_bounds'. Il ne produit qu'un tuple avec des points max et min de boîte englobante. La méthode à utiliser est «enveloppe»; précédent pour construire son «GeoDataFrame» respectif. Par exemple, lire mes fichiers de formes en tant que GeoDataFrame :
Construire la boîte englobante de pol1 et créer son GeoDataFrame respectif :
Intersection des deux GeoDataFrame :
Tracer les résultats:
Cela a fonctionné comme prévu.
Note d'édition:
En utilisant la méthode 'total_bounds' (car la méthode 'enveloppe' renvoie le cadre de délimitation pour chaque entité de polygones), il peut être utilisé cette approche:
et le résultat est identique.
la source
Vous pouvez utiliser la
cx
méthode sur un cadre de données géographiques pour sélectionner des lignes dans un cadre de sélection. Pour vos exemples de cadres:De http://geopandas.org/indexing.html :
la source
.cx
fait quelque chose de légèrement différent de lagpd.overlay
solution: il sélectionne les lignes qui coupent la boîte englobante mais laisse les géométries intactes, tandis que lagpd.overlay
solution ne renverra que les parties des géométries dans la boîte englobante. Selon la situation, vous voudrez peut-être l'un ou l'autre.