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é ?

#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: 993

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 wink )


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: 993

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: 993

Re: QGIS Cadastre: trouver 2 parcelles mitoyennes dont le total = X

(j'ai refait une pause sur cet exercice wink )

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: 993

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: 993

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

 

Pied de page des forums

Powered by FluxBB