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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 28 June 2017 18:55

Bozo70
Juste Inscrit !
Date d'inscription: 28 Jun 2017
Messages: 3

QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour, Hello,

Je bute sur une opération plus technique que d'habitude, avant de me lancer je cherche un avis / de l'aide / des idées...

J'ai 2 couche shp de type polygone: d'un côté des sièges d'exploitation agricole (attribué chacun à un agriculteur)
de l'autre des parcelles également attribuées à un exploitant.

Je veux d'une part:
- Sélectionner les parcelles, dans un rayon de 500m autour des sièges d'exploitation, si elles sont attribuées au même agriculteur.

Et ensuite:
- Refaire plus ou moins la même opération en rajoutant d'autres critères: sélectionner les parcelles dans un rayon de 300m toujours attribué au même agriculteur, si ce sont des prairies. ( certaines parceles sont par exemple en céréales)

Je cherche  un moyen simple et réplicable pour faire cette opération.

Pour l'instant j'avais pensé procéder comme ceci:
1) faire un tampon de 500m autour des sièges d'exploitation
2) intersecter ce tampon avec ma couche parcelles
3) Enregistrer cette selection comme " ensemble des parcelles à moins de 500 m" d'un siège d'exploitation
4) faire une jointure spatiale portant sur le nom de l'agriculteur du siège d'exploitation dans la couche parcelle
5) ne sélectionner que les parcelles dont le nom de l'agriculteur est identique pour la parcelle et le siege

D'une part je ne sais pas réaliser l'étape 5
D'autre part j'imagine que je pourrais procéder plus simplement ...

Avez vous des idées ?

Hors ligne

 

#2 Wed 28 June 2017 23:16

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonsoir,

Si ces procédés doivent être répétés et mis à jour régulièrement (ex: mise à jour des exploitations) ça vaut vraiment le coup de passer par du SQL (d'abandonner le format shape). Je vois deux possibilités: installer un serveur PostgreSQL ou passer par une base Spatialite (je n'ai jamais fais).

L'idée serait de passer par des "vues". À chaque appel de la vue, la requête est exécutée et fournit un résultat actualisé de ladite requête.
En cas de lenteur (gros lot de données), il faudra se tourner vers les "vues matérialisées", mais c'est un autre sujet.
Voici en substance ce que donnerait ce que vous cherchez à faire sous postGIS/postgreSQL:

Bozo70 a écrit:

Pour l'instant j'avais pensé procéder comme ceci:
1) faire un tampon de 500m autour des sièges d'exploitation
2) intersecter ce tampon avec ma couche parcelles
3) Enregistrer cette selection comme " ensemble des parcelles à moins de 500 m" d'un siège d'exploitation
4) faire une jointure spatiale portant sur le nom de l'agriculteur du siège d'exploitation dans la couche parcelle
5) ne sélectionner que les parcelles dont le nom de l'agriculteur est identique pour la parcelle et le siege


1) Créer un tampon de 500 m dans PostgreSQL: ST_Buffer(geom,500).
2) Tester l'intersection entre parcelle et le tampon: ST_Intersects(parcelle.geom, tampon.geom)
3) Étape qu'il est possible de s'économiser en passant par PostgreSQL.
4) ajouter le nom de l'agriculteur à la couche parcelle si la parcelle est dans le buffer de 500m autour du siège de l'exploitation.
5) ne sélectionner que que les terres de "Mr Machin" via une clause where: SELECT * FROM ma_vue WHERE nom = 'Mr Machin' ;

J'aurais tendance à simplifier la démarche en:
1) crééant une vue qui joint le nom de l'exploitant, le siège et la culture concernée aux polygones parcelles
2) interroger cette vue, selon les critères recherchés.

Exemple de requête pour la vue:

Code:

SELECT p.geom, e.nom, e.siege, e.culture
FROM parcelle p
JOIN exploitation e ON ST_Intersects(ST_Buffer(e.geom,500),p.geom)

Exemple de requête pour sélection des prairies de monsieur X

Code:

SELECT *
FROM la_vue_du_dessus
WHERE nom = 'Monsieur X' AND culture ILIKE '%prairie%'

À adapter en fonction des données en présence, bien évidemment.

Bozo70 a écrit:

Je veux d'une part:
- Sélectionner les parcelles, dans un rayon de 500m autour des sièges d'exploitation, si elles sont attribuées au même agriculteur.

Et ensuite:
- Refaire plus ou moins la même opération en rajoutant d'autres critères: sélectionner les parcelles dans un rayon de 300m toujours attribué au même agriculteur, si ce sont des prairies. ( certaines parceles sont par exemple en céréales)


Autre exemple en un coup, pour répondre à la seconde problématique:

Code:

SELET *
FROM exploitation e
JOIN parcelle p ON ST_Intersects(ST_Buffer(e.geom,300),p.geom) 
WHERE e.nom_exploitant = 'M.Bidule' AND culture = 'céréales'

Bref le monde merveilleux du SQL s'offre à vous! wink
Bonne continuation.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#3 Thu 29 June 2017 10:09

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

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour,

Si ces procédés doivent être répétés et mis à jour régulièrement (ex: mise à jour des exploitations) ça vaut vraiment le coup de passer par du SQL (d'abandonner le format shape). Je vois deux possibilités: installer un serveur PostgreSQL ou passer par une base Spatialite (je n'ai jamais fais)


Je rajouterais une troisième option: la possibilité d'utiliser les couches virtuelles avec la particularité que vous pouvez rester sur du shape (même si les autres formats évoqués par Matmat sont à mon humble avis meilleurs). Les commandes restent les mêmes que celles proposées avec la petite particularité que la couche créée, parce que virtuelle, n'est disponible que dans le présent projet (sauf à utiliser des projets intégrés ou l'enregistrer en dur - mais ça c'est une autre histoire) mais la commande de création peut être enregistrée et rejouée autant que nécessaire.

Hors ligne

 

#4 Mon 03 July 2017 13:55

Bozo70
Juste Inscrit !
Date d'inscription: 28 Jun 2017
Messages: 3

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour,

Excusez la réponse tardive de ma part, je suis nouvelle ici et je m'attendais à ce que les réponses me soit signalées par mail...


A priori, cela fait moins peur de se lancer sur les couches virtuelles mais une petite info supplémentaire:

la mise à jour n'est pas effectuée régulièrement. C'est plutôt que la même manipulation devrait être répétée sur différentes zones au grès de nos commandes/projets.
Lors de ce projet, on mène d'abord un travail de terrain pour mettre à jour nos 2 couches avant d'effectuer cette manipulation. Puis on effectue l'opération que je vous ai expliqué.

Peut être que ca ne change rien à la solution technique mais peut être qu'avec ces informations une des 3 solutions peut vous apparaitre plus adéquates ?
- Couche virtuelle
- Serveur PostgreSQL
- base Spatialite

Merci à vous deux

Hors ligne

 

#5 Mon 03 July 2017 13:59

Bozo70
Juste Inscrit !
Date d'inscription: 28 Jun 2017
Messages: 3

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

autre question,

si je travaille sur fichier tab., faut il les convertir avant ?

Hors ligne

 

#6 Tue 04 July 2017 11:11

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour,

Je ne sais pas s'il est nécessaire de convertir les .tab pour les utiliser en tant que couches virtuelles.

Pour les utiliser dans PostgreSQL, il est possible de les convertir puis de les intégrer comme "couches PostGIS" ou alors d'utiliser ce que l'on nomme "foreign data wrapper" qui permet d'utiliser des fichiers (comme du csv, des fichiers tab, des flux, etc) directement depuis la base de données.
Quelques infos sur les foreign data wrapper disponibles:
https://wiki.postgresql.org/wiki/Foreign_data_wrappers
Le FDW qui vous conviendrait:
https://github.com/robe2/pgsql-ogr-fdw

Pour la base Spatialite, il faudra convertir (à ma connaissance).

Concernant le format à préférer l'avantage de PostgreSQL est que les données sont dans une base accessible par plusieurs utilisateurs en même temps. Par contre c'est probablement la solution la + complexe à mettre en place.
Pour Spatialite, la base est "contenue" dans un fichier unique accessible par un seul utilisateur à la fois, mais les informations sont dans la base.
Pour les couches virtuelles, les informations sont dans le projet (1 seul utilisateur à la fois).

Personnellement je penche PostgreSQL car c'est le système que je connais, il faudrait voir les avis des autres membres.

Bonne journée


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#7 Thu 11 October 2018 14:56

chanteclair
Participant assidu
Lieu: Pau
Date d'inscription: 3 Jan 2007
Messages: 726

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour,
Je remonte ce post datant un peu.
@Mathieu Denat : arrivez-vous à voir le nouveau schéma PGSQL créé via le FDW ainsi que les foreign tables associées dans Qgis (2.18.21 pour ma part sous W7, PGSQL 9.6) ?
Merci.
Bonne journée.

Hors ligne

 

#8 Fri 19 October 2018 10:09

chanteclair
Participant assidu
Lieu: Pau
Date d'inscription: 3 Jan 2007
Messages: 726

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Bonjour à tous,
Petit up.
Quelqu'un utilise-t-il Qgis avec des Foreign Data Wrapper dans PostgreSQL/Postgis ?
Merci.

Hors ligne

 

#9 Fri 19 October 2018 13:24

haubourg
Participant assidu
Lieu: Grenoble
Date d'inscription: 7 Sep 2005
Messages: 257
Site web

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Oui!
..
..
..

Quelle est la question en fait?

Régis

Hors ligne

 

#10 Fri 19 October 2018 14:21

chanteclair
Participant assidu
Lieu: Pau
Date d'inscription: 3 Jan 2007
Messages: 726

Re: QGIS: Sélection entre 2 tables / Critère spatiale et attributaire

Merci de ce retour !
J'ai tenté d'en mettre un en place (PGSQL 9.6/ Postgis 2.3.3) mais Qgis (2.18.21 sous Windows 7) ne voit ni le schéma créé, ni les foreign tables.
Est-ce normal ?

Ci-dessous les commandes utilisées :

Code:

CREATE EXTENSION IF NOT EXISTS postgres_fdw;

CREATE SERVER instance_a
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', port '54xx', dbname 'base_xxxx');

CREATE USER MAPPING FOR USER
SERVER instance_a
OPTIONS (user 'base_xxxx', password 'xxxxxxx');

DROP SCHEMA IF EXISTS ext_base_xxxx;
CREATE SCHEMA ext_base_xxxx;
IMPORT FOREIGN SCHEMA public
FROM SERVER instance_a
INTO ext_base_xxxx;

GRANT ALL ON SCHEMA ext_base_xxxx TO xxxx;
GRANT USAGE ON SCHEMA ext_base_xxxx TO xxxx;
GRANT ALL ON SCHEMA ext_base_xxxx TO xxxx;

Merci de votre aide.

Dernière modification par chanteclair (Fri 19 October 2018 14:26)

Hors ligne

 

Pied de page des forums

Powered by FluxBB