Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB