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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 jeu. 17 mai 2018 11:28

thierry974
Membre
Lieu: SAFER Reunion
Date d'inscription: 16 juin 2010
Messages: 23

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 jeu. 17 mai 2018 14:23

SANTANNA
Membre
Lieu: Angers
Date d'inscription: 18 janv. 2008
Messages: 2060

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 jeu. 17 mai 2018 15:51

thierry974
Membre
Lieu: SAFER Reunion
Date d'inscription: 16 juin 2010
Messages: 23

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 jeu. 17 mai 2018 16:22

SANTANNA
Membre
Lieu: Angers
Date d'inscription: 18 janv. 2008
Messages: 2060

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 ven. 18 mai 2018 09:12

trovez
Membre
Lieu: Nantes
Date d'inscription: 17 sept. 2007
Messages: 15

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 ven. 18 mai 2018 10:39

thierry974
Membre
Lieu: SAFER Reunion
Date d'inscription: 16 juin 2010
Messages: 23

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 ven. 18 mai 2018 11:08

trovez
Membre
Lieu: Nantes
Date d'inscription: 17 sept. 2007
Messages: 15

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 ven. 18 mai 2018 11:12

thierry974
Membre
Lieu: SAFER Reunion
Date d'inscription: 16 juin 2010
Messages: 23

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 ven. 18 mai 2018 11:20

SANTANNA
Membre
Lieu: Angers
Date d'inscription: 18 janv. 2008
Messages: 2060

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 ven. 18 mai 2018 12:06

Ben22
Membre
Date d'inscription: 11 mai 2016
Messages: 18

Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche

thierry974 a écrit:

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 mar. 28 août 2018 09:05

dhaulagiri
Membre
Lieu: Hérault
Date d'inscription: 1 déc. 2006
Messages: 25

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 (mar. 28 août 2018 09:22)


Salutations, Nicolas.

Hors ligne

 

#12 mer. 29 août 2018 08:34

gglafouine
Membre
Lieu: Montpellier
Date d'inscription: 28 févr. 2006
Messages: 114

Re: QGIS 3.02/DB Manager: requete postgis/Impossible de charger la couche

dhaulagiri a écrit:

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 jeu. 13 septembre 2018 12:56

dhaulagiri
Membre
Lieu: Hérault
Date d'inscription: 1 déc. 2006
Messages: 25

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

 

Pied de page des forums

Powered by FluxBB

Partagez  |