#1 Sat 21 January 2023 14:30
- cedric17
- Juste Inscrit !
- Date d'inscription: 14 Dec 2017
- Messages: 5
QGIS: Recherche superficie cadastrale
Bonjour à tous,
Je sollicite votre aide pour rédiger l'expression qui me permettra de trouver deux parcelles cadastrales mitoyennes dans Qgis dont la somme des contenances égale une valeur donnée.
Je travaille avec la version 3.26.2 de QGis. et je suis nouveau.
Je vous remercie de votre aide, Cédric.
Hors ligne
#2 Sat 21 January 2023 19:21
- arnaudp
- Participant occasionnel
- Date d'inscription: 20 Sep 2020
- Messages: 33
Re: QGIS: Recherche superficie cadastrale
Bonjour,
J'essaie de me former en python pour QGIS, alors j'ai trouvé l'exercice intéressant.
J'ai fait le script suivant qui permet de sélectionner les paires de parcelles dont la surface est égale à la valeur surface±tolerance (ici 800±20m^2).
Nous pouvons probablement optimiser ce script. Je dois avouer que je ne suis pas encore familier des QgsSpatialIndex.
Je suis curieux de toute remarque sur ce script.
Code:
# Inspiration : : https://stackoverflow.com/questions/43608917/find-neighbouring-polygons-in-python-qgis print('Debut du script.') surface = 800.0 tolerance= 20.0 selection = [] layer = iface.activeLayer() features = layer.getFeatures() index = QgsSpatialIndex() index.addFeatures(layer.getFeatures()) feature_dict = {f.id(): f for f in layer.getFeatures()} for feature in features: surface1 = feature.geometry().area() #print('surface = ' + str(surface1)) parcellesProches = index.intersects(feature.geometry().boundingBox()) for parcelleProche in parcellesProches: surface2 = feature_dict[parcelleProche].geometry().area() #print('surface2 = ' + str(surface2)) if(surface1+surface2 <= surface + tolerance and surface1+surface2 >= surface-tolerance and not feature_dict[parcelleProche].geometry().disjoint(feature.geometry()) and parcelleProche != feature.id()): print('somme surface = '+str(surface1+surface2)) selection.append(feature.id()) selection.append(parcelleProche) print(feature.id()) print(parcelleProche) layer.select(selection) print('Fin du script')
Je vous remercie.
Meilleures salutations.
Hors ligne