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

Printemps des cartes 2024

#1 Mon 30 October 2023 09:19

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour,

Version QGIS 2.28 sous Windows

Je dispose d'une couche de parcelles et d'une couche de dossiers d'urbanisme (Permis de construire).

Je voudrais récupérer toutes les parcelles qui sont touchées par un seul permis  et cela via du code python

Je pensais récupérer les parcelles qui sont dans le rectangle englobant le permis de construire et ensuite pour chacune d'elles, tester leur inclusion dans le permis de construire, mais je n'arrive pas à trouver le code qui va bien.

A moins que vous n'ayez une autre idée ;-)

Merci de votre réponse et bonne journée

PYJ

Dernière modification par pyjoubert (Mon 30 October 2023 12:37)

Hors ligne

 

#2 Tue 31 October 2023 11:19

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour,
Personne n'a une idée ?
PYJ

Hors ligne

 

#3 Tue 31 October 2023 13:15

antho0023
Participant occasionnel
Lieu: Corse
Date d'inscription: 28 Apr 2023
Messages: 38

Re: QGIS: Recuperer entites touchees par une autre de couche differente

la version 2.8 est très ancienne. Ne faudrait il pas envisager dans un premier temps une mise à jour vers une version plus récente ?
Concernant la demande peut être envisager une requete de jointure si il y a des champs communs : par exemple un numéro de parcelles avec sa section.

Bien cordialement

Hors ligne

 

#4 Tue 26 December 2023 15:37

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour
Mea Culpa, nous sommes en 3.28

En fait, je recherche à faire une recherche spatiale uniquement.
Un objet de référence de la couche A et je dois récupérer toutes les entités de la couche B qui touche l'entité de référence.

Je ne sais pas trop comment m'y prendre, donc si vous avez un exemple, je suis preneur

Merci


PYJ

Hors ligne

 

#5 Wed 27 December 2023 20:24

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1631

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour comment est la couche des dossiers d'urbanisme ? Est-elle aussi une couche de parcelles?

Hors ligne

 

#6 Wed 27 December 2023 20:59

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 104

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Il faut selectionner l objet de la couche A
Faire une selection par localisation entre d un cote la selection de la couche A et de l autre cote, la couche B, en utilisant l operateur "touche"

Hors ligne

 

#7 Thu 28 December 2023 07:07

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour, et merci de votre aide

@ conejo : les dossiers d'urbanisme et les parcelles sont des couches différentes

@ Tixi : Désolé, je suis novice en QGIS, je m'y mets ardemment depuis quelques temps, mais pour ce cas, je ne sais pas du tout comment m'y prendre..
Auriez-vous un exemple PYTHON qui fasse ce job ?

Bonne journée à vous deux

PYJ

Hors ligne

 

#8 Fri 29 December 2023 10:55

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 104

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour,

Je n ai pas d exemple Python.

Manuellement, vous pouvez faire ainsi :
Selectionnez la couche A, puis l'entite qui vous interesse.
Dans Vecteur > Outils de recherche, cliquez sur Selection par localisation.
     Dans la fenetre qui apparait, il faut choisir les parametres :
          Selectionnez les entites a partir de la couche B
          cliquez sur la case "qui touche"
          En comparant au entites de la couche A
          cliquez sur la case "entites selectionnees seulement"
          Enfin, Executez le processus.

J espere que ca vous ira.

Cordialement

Hors ligne

 

#9 Fri 29 December 2023 14:38

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3811

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour,
@pyjoubert, qu'avez-vous vous-même déjà commencé à rédiger? Et à quel endroit êtes-vous bloqué?
Et si d'aventure vous n'aviez rien commencé à écrire, avez-vous déjà regardé la doc QGIS sur ce qu'elle donne comme syntaxe python pour les algorithmes? Avez-vous fait une recherche sur le web pour voir si vous étiez le premier à être dans ce type de besoin? petite confidence, une recherche sur "selectbylocation pyqgis" renvoie un paquet de discussions stackExchange, et je doute que votre bonheur ne s'y trouve pas déjà.
Cordialement

Hors ligne

 

#10 Tue 02 January 2024 14:09

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Bonjour à vous deux et meilleurs vœux.

J'ai trouvé de la doc sur processsing.run et je suis entrain justement de faire des tests.
J'hésite entre utiliser l'algo Extractbylocation et seSelectbylocation.

Ca avance et je vous en remercie.

PYJ

Hors ligne

 

#11 Tue 02 January 2024 14:22

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 330

Re: QGIS: Recuperer entites touchees par une autre de couche differente

Re,
Voici la fonction que j'ai faite et reste à améliorer

Code:

# Retourne une liste d'id d'objets touchés
# Arg1 : Nom du layer à parcourir
# Arg2 : Nom du layer où il y a l'objet de référence
# Arg3 : Liste des PREDICATS
# Arg 4 : destination (y compris couche mémoire)
# Res  : Liste des objets trouvés
def WBO_BD_ParcourirSurface (a_chercher,reference,list_predict,destination):
   liste_res = []
   layers = QgsProject.instance().mapLayersByName(reference)
   layerref = layers[0]
   fichierref = GL_FICHIERS.WBO_FICHIER_SelectionDansShape(layerref,"c:/temp",(reference + "_Select"))
   GL_LAYER.WBO_LAYER_CoucheAjouter(fichierref,(reference + "_Select"))
   reflayers = QgsProject.instance().mapLayersByName((reference + "_Select"))[0]
   layers = QgsProject.instance().mapLayersByName(a_chercher)
   layer2 = layers[0]
   params = {"INPUT":reflayers,"INTERSECT":layer2,"PREDICATE":list_predict,"OUTPUT":destination}
   res = processing.run('native:extractbylocation', params)["OUTPUT"]
   GL_LAYER.WBO_LAYER_CoucheEnlever((reference + "_Select"))
   QgsProject.instance().addMapLayer(res)
   for feature in res.getFeatures():
      print(feature)
      liste_res.append(feature)
   return(liste_res)

Pour info,
- WBO_FICHIER_SelectionDansShape prend le sélection et la met dans un fichier shape
- WBO_LAYER_CoucheAjouter charge ce fichier shape
- WBO_LAYER_CoucheEnlever enlève la couche

Hors ligne

 

Pied de page des forums

Powered by FluxBB