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: 1020
 
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: 1020
 
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: 1020
 
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) = 1Vous 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: 1020
 
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: 1020
 
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
 


