Pages: 1
- Sujet précédent - QGIS: Recuperer entites touchees par une autre de couche differente - Sujet suivant
#1 Mon 30 October 2023 09:19
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
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: 347
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: 347
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: 1670
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: 126
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: 347
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: 126
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: 3944
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: 347
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: 347
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
Pages: 1
- Sujet précédent - QGIS: Recuperer entites touchees par une autre de couche differente - Sujet suivant