Pages: 1
- Sujet précédent - QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche - Sujet suivant
#1 Thu 17 May 2018 11:28
- thierry974
- Participant occasionnel
- Lieu: SAFER Reunion
- Date d'inscription: 16 Jun 2010
- Messages: 24
QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Bonjour,
J’effectue une requête spatiale complexe (intersection puis agrégation de polygone suivant la valeur d’un attribut) sous via le Db manager. (cf requête ci-dessous) + contrôle sur la géométrie.
La requête fonctionne (4053 objets) .
Mais je n’arrive pas à la charger systématiquement sous QGIS. J’ai l’impression que cela dépend du nombre d’objets créés.
En effet si :
Je change la valeur de parcelle.code_com, (=> nombre d’objets moindre) j’arrive à charger la couche
Je rajoute en fin de requête : limit 500, j’arrive à charger la couche.
Quelqu’un a-t-il une solution ?
Je précise, je suis sur Qgis 3.0.2, Windows 7 64bits avec 16 Go de mémoire vive.
-------------------------------------------------------------------------------------------------------------------------------
With parcelle_union as (
SELECT ST_Intersection(obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2".geom, "2016novcadastre".parcelle.geom) as geom_intersect,
"2016novcadastre".parcelle.code_com as code_com,
'97' || substring("2016novcadastre".parcelle.idu from 1 for 3) || substring("2016novcadastre".parcelle.idu from 7 for 11) as num_parcelle,
st_area(ST_Intersection(obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2".geom, "2016novcadastre".parcelle.geom)) as sau,
"2016novcadastre".parcelle.supf as supparc,
round ((st_area(ST_Intersection(obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2".geom, "2016novcadastre".parcelle.geom)) /"2016novcadastre".parcelle.supf)*100) as pc_sau
from "2016novcadastre".parcelle, obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2"
WHERE
ST_Intersects(obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2".geom, "2016novcadastre".parcelle.geom)=TRUE
AND st_area(ST_Intersection(obs_friche."saup_cultivable_moins_parcelle_bati_de_1000m2_v2".geom, "2016novcadastre".parcelle.geom)) > 500
AND "2016novcadastre".parcelle.supf >0
AND "2016novcadastre".parcelle.code_com ='410')
SELECT
row_number() OVER(ORDER BY num_parcelle DESC) as oid,
num_parcelle,
st_union (geom_intersect) as geom_intersect,
ST_IsValidReason(st_union (geom_intersect)) as code_erreur,
sum(sau) as sau,
sum(pc_sau) as pc_sau,
min (supparc) as suppar
from parcelle_union
Where ST_IsValid(geom_intersect)= true
group by num_parcelle
Thierry KAUFMANT
Chef du service Études et Aménagement
SAFER Réunion
Hors ligne
#2 Thu 17 May 2018 14:23
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Bonjour,
Je vois des intersections dans la requête, et aussi des vérifications de validité de géométrie mais les géométries renvoyées sont-elles toutes du même type?
Hors ligne
#3 Thu 17 May 2018 15:51
- thierry974
- Participant occasionnel
- Lieu: SAFER Reunion
- Date d'inscription: 16 Jun 2010
- Messages: 24
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
deux type de géométrie sont renvoyés (polygone et multi polygone)
requête complète que je n'arrive pas à chargé dans qgis ou celle que je limite à 500
le problème ne vient donc pas de là.
Merci quand même
Thierry KAUFMANT
Chef du service Études et Aménagement
SAFER Réunion
Hors ligne
#4 Thu 17 May 2018 16:22
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Quid lorsque la requête est faite sous PGAdmin et génère soit une nouvelle table soit une vue? QGIS lit-il le résultat?
Hors ligne
#5 Fri 18 May 2018 09:12
- trovez
- Participant occasionnel
- Lieu: Nantes
- Date d'inscription: 17 Sep 2007
- Messages: 24
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Bonjour,
La requête comporte
st_union (geom_intersect) as geom_intersect,
qui peut produire des géométrie invalides.
Avez-vous inspecté les valeurs du champ ST_IsValidReason(st_union (geom_intersect)) as code_erreur ?
Cdlt
Hors ligne
#6 Fri 18 May 2018 10:39
- thierry974
- Participant occasionnel
- Lieu: SAFER Reunion
- Date d'inscription: 16 Jun 2010
- Messages: 24
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Bonjour,
Toutes les géométries sont valides
ST_IsValidReason(st_union (geom_intersect))
j'ai rajouté une condition pour en être sûr : Where ST_IsValid(geom_intersect)= true
Thierry KAUFMANT
Chef du service Études et Aménagement
SAFER Réunion
Hors ligne
#7 Fri 18 May 2018 11:08
- trovez
- Participant occasionnel
- Lieu: Nantes
- Date d'inscription: 17 Sep 2007
- Messages: 24
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Le where porte sur St_Intersection, mais pas sur St_union, St_Union pouvant aussi générer des erreurs.
Hors ligne
#8 Fri 18 May 2018 11:12
- thierry974
- Participant occasionnel
- Lieu: SAFER Reunion
- Date d'inscription: 16 Jun 2010
- Messages: 24
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
SANTANNA
Si je crée une vue via pgadmin et que je l’affiche sous qgis : ça fonctionne
merci.
je ne sais toujours pas quel est le problème. j'aurais souhaité ne pas créer de vue. une vue par commune, c'est beaucoup.
Thierry KAUFMANT
Chef du service Études et Aménagement
SAFER Réunion
Hors ligne
#9 Fri 18 May 2018 11:20
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
j'aurais souhaité ne pas créer de vue. une vue par commune, c'est beaucoup.
Je ne comprends pas. N'est-ce pas la même requête que dans DB Manager (ou celle-là portait déjà sur une commune)? Il est aussi possible de faire une vue agrégée dans PGAdmin (à voir si la structure de la BD permet de faire cela facilement) et après soit la filtrer dans QGIS directement ou dans DB Manager avant ajout dans le projet. De ce fait, la BD PostGIS ne contiendrait qu'une seule vue.
Hors ligne
#10 Fri 18 May 2018 12:06
- Ben22
- Participant actif
- Lieu: 33
- Date d'inscription: 11 May 2016
- Messages: 96
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
deux type de géométrie sont renvoyés (polygone et multi polygone)
requête complète que je n'arrive pas à chargé dans qgis ou celle que je limite à 500
le problème ne vient donc pas de là.
Merci quand même
Essayez de tout passer en multipolygone en forçant avec st_multi, il me semble que le DBManager n'aime pas ajouter une couche avec deux types de géométries différentes.
Hors ligne
#11 Tue 28 August 2018 09:05
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Bonjour,
Je parcours ce post en diagonale et il me semble rencontrer un problème similaire pour lequel je n'ai pas trouvé de solution:
J'effectue une requête simple pour découper les objets d'une table par ceux d'une autre table, du type:
SELECT table1.champ, st_multi(st_intersection(table2.the_geom, table1.the_geom)) AS the_geom
FROM table1 JOIN table2 ON st_intersects(table1.the_geom, table2.the_geom)
Dans PgAdmin ou dans le DBManager (QGIS 3.0.2), elle fonctionne bien. Si j'ajoute un CREATE TABLE, elle fonctionne toujours bien. Par contre, et c'est malheureusement mon objectif, elle ne fonctionne plus si je veux créer une vue avec un CREATE OR REPLACE VIEW. Concrètement, la vue est créée mais je ne peux pas l'afficher dans QGIS: elle est dédoublée dans la liste des couches (deux géométries?) mais aucune des deux couches ne peut être affichée.
J'ai aussi pensé à la géométrie mais je constate qu'un SELECT distinct ST_GeometryType(the_geom) renvoie parfois deux types différents pour certaines tables sans que cela m'empêche de les afficher dans QGIS. Manifestement, la création d'une table initialise la géométrie des objets d'une manière différente de la vue mais j'en suis réduit à cette hypothèse. Auriez-vous une idée de solution?
Je vous remercie,
Nicolas
Dernière modification par dhaulagiri (Tue 28 August 2018 09:22)
Salutations, Nicolas.
Hors ligne
#12 Wed 29 August 2018 08:34
- gglafouine
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 28 Feb 2006
- Messages: 118
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Auriez-vous une idée de solution?
Bonjour,
la pemière choseà faire c'est de vérifier les messages. Si il y a une erreur elle sera visible lors de l'exécution dans le panneau "Journal des messages"
Il est possible que le client postgresql + pgadmin utilisé dans la compilation de QGIS diffère de la version de votre base de données et de sa cartouche spatiale
Donc 4 choses à vérifier:
- messages du journal
- version des bases et cartouches utilisé dans QGIS
- version des bases et des cartouches du serveur SGBD
- version de GDAL OGR car il sert à lire et écrire les données dans la base car cela peut résulté d'un problème aussi à ce niveau.
Après si tu veux forcer une géométrie en particulier tu peux aussi filtrer sur des types et dire que le résultat attendu sera de type polygon
Jérôme
Hors ligne
#13 Thu 13 September 2018 12:56
- dhaulagiri
- Participant occasionnel
- Lieu: Nîmes, Gard
- Date d'inscription: 1 Dec 2006
- Messages: 46
- Site web
Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche
Merci pour ton retour,
Les messages n'étaient pas très explicites mais bon.
Le problème était double:
- la table source avait deux entrées distinctes dans la table geometry_columns du schéma. J'en ai supprimé un
- j'ai généré un champ gid lors de la création de la vue: CAST OVER () AS VARCHAR) AS gid
Salutations, Nicolas.
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche - Sujet suivant