Pages: 1
- Sujet précédent - QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X - Sujet suivant
#1 Sun 23 April 2023 19:26
- cedric17
- Juste Inscrit !
- Date d'inscription: 14 Dec 2017
- Messages: 5
QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
Bonjour,
A tout hasard, est-ce que quelqu'un pourrait m'aiguiller sur comment trouver toutes les parcelles mitoyennes sur une commune
dont la somme est égale à une valeur donnée?
En vous remerciant de votre aide, Cédric.
Hors ligne
#2 Mon 24 April 2023 11:29
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
J'ai l'impression que ce n'est pas si simple que ça.
De mon côté, je tenterais d'adapter ce genre de script python à votre besoin :
https://www.qgistutorials.com/en/docs/f … ygons.html
(mais avec mon niveau en Python, ça me demanderait qqs heures pour parvenir au résultat )
Sylvain M.
Hors ligne
#3 Mon 24 April 2023 12:09
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
Pour le fun, j'ai cherché sur ma pause ce midi.
Voici un code Python qui marche, à adapter avec les noms des champs et la somme de surface recherchée :
Code:
from qgis.utils import iface from PyQt5.QtCore import QVariant _CHAMP_NOM = 'NOM' _CHAMP_SURFACE = 'SURFACE' _VALEUR_CHERCHEE = 22 layer = iface.activeLayer() # Create a dictionary of all features feature_dict = {f.id(): f for f in layer.getFeatures()} # Build a spatial index index = QgsSpatialIndex() for f in feature_dict.values(): index.insertFeature(f) # Loop through all features and find features that touch each feature for f in feature_dict.values(): geom = f.geometry() intersecting_ids = index.intersects(geom.boundingBox()) for intersecting_id in intersecting_ids: # Look up the feature from the dictionary intersecting_f = feature_dict[intersecting_id] if (f != intersecting_f and not intersecting_f.geometry().disjoint(geom)): if (float(intersecting_f[_CHAMP_SURFACE]) + float(f[_CHAMP_SURFACE])) == _VALEUR_CHERCHEE: print(intersecting_f[_CHAMP_NOM] + ' et ' + f[_CHAMP_NOM] + ' ont la somme de surface recherchée')
Sylvain M.
Hors ligne
#4 Mon 24 April 2023 15:33
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
(j'ai refait une pause sur cet exercice )
En version beaucoup plus simple, voici une formule que vous pouvez utiliser directement dans "Sélectionner les entités en utilisant une expression" (depuis la table attributaire de vos parcelles) :
Code:
array_find(array_foreach(overlay_touches( @layer, to_real("CHAMP_SURFACE")), to_real(@element) + to_real("CHAMP_SURFACE")), #VALEUR) = 1
Vous n'avez qu'à remplacer CHAMP_SURFACE par le nom du champ qui contient la surface des parcelles, et #VALEUR par la valeur de somme de surfaces recherchées.
Sylvain M.
Hors ligne
#5 Wed 26 April 2023 07:02
- cedric17
- Juste Inscrit !
- Date d'inscription: 14 Dec 2017
- Messages: 5
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
bonjour, merci beaucoup pour votre aide.
Hors ligne
#6 Thu 27 April 2023 07:11
- cedric17
- Juste Inscrit !
- Date d'inscription: 14 Dec 2017
- Messages: 5
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
bonjour Sylvain, je n'arrive pas à faire fonctionner cette expression. N'y aurait-il pas une erreur de synthaxe?
to_real("CHAMP_SURFACE")), to_real(@element) + to_real("CHAMP_SURFACE")), #VALEUR) = 1
Hors ligne
#7 Thu 27 April 2023 14:01
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
Il manque une grande partie de la formule dans la requête.
Par ailleurs, avez-vous bien adapté le noms du champs contenant la surface ? (ici j'ai mis "CHAMP_SURFACE", mais il faut mettre le nom de votre champ, ou la calculer)
Et remplacé la valeur de la surface recherchée ? (#VALEUR)
Sylvain M.
Hors ligne
#8 Thu 27 April 2023 19:24
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X
Le mieux serait d'essayer de comprendre chaque fonction de cette requête :
to-real (pas forcément nécessaire si votre champ surface est déjà au format "nombre réel")
overlay-touches
array-foreach
array-find
Sylvain M.
Hors ligne
Pages: 1
- Sujet précédent - QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X - Sujet suivant