Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SUPPORT - CD 94] Impossible d'ajouter à la carte des couches ayant plusieurs types d'objets #470

Closed
Mouzzi-C opened this issue Dec 13, 2023 · 14 comments
Assignees
Labels
enhancement Amélioration du fonctionnement existant
Milestone

Comments

@Mouzzi-C
Copy link

Impossible d'ajouter à la carte des couches ayant plusieurs types d'objets. La cliente a testé l'ajout depuis QGIS directement et ça fonctionne.

log_isogeo_plugin (1).zip

Je vais voir avec la cliente si elle peut nous envoyer la donnée

@Mouzzi-C Mouzzi-C added bug Problème par rapport au fonctionenment attendu support labels Dec 13, 2023
@SimonSAMPERE
Copy link
Collaborator

SimonSAMPERE commented Dec 15, 2023

Voici la fiche d'une des données concernées : https://app.isogeo.com/groups/3dc29ce36d9d4b969a08e8669301c751/resources/f86f46801d8d4d389b1b9eda919116e0/geography

La cliente a envoyé la données en Shapefile, j'ai pu l'ajouter sans problème. Il faudrait qu'on ait plus d'information sur le contenu de la donnée, quelles sont les différents types d'entités, éventuellement sa définition SQL.

@SimonSAMPERE
Copy link
Collaborator

@SimonSAMPERE
Copy link
Collaborator

SimonSAMPERE commented Dec 18, 2023

J'ai créé une donnée contenu plusieurs types de géométrie dans le schema sample de la base PostGIS interne, je l'ai appelé "multigeom_2154" (comme celle de la base Oracle).

J'ai fait le test et quand j'essaye de l'ajouter à la carte à partir du plugin ça génère effectivement une erreur. QGIS ne gère pas les couches avec des entités géométriques de plusieurs types différents. C'est pourquoi quand je passe directement pas la fonctionnalité d'ajout de couches de QGIS, ma table est splittée en plusieurs couches (une par type de géométrie) :
image

A priori il faudrait que je développe la même chose que pour Oracle, c'est à dire qu'on détecte si la table à des entités géo de différents types et si c'est le cas on ajoute une couche par type de géométrie.

Voici une requête SQL qui permet de récupérer les différents types de géométrie pour une table :

SELECT DISTINCT ST_GeometryType(<nom_colonne_geometry>)
  FROM <nom_schema>.<nom_table>

@SimonSAMPERE
Copy link
Collaborator

SimonSAMPERE commented Jan 12, 2024

@Mouzzi-C tu peux dire à Catherine que j'ai investigué sur le sujet, qu'actuellement ça n'est simplement pas gérer dans le plugin QGIS parce que c'est la première qu'on est confronté à cette situation pour une table PostGIS (on l'avait fait pour Oracle) et qu'il faut encore que je fasse les SPET et le chiffrage. Aussi, je suis carrément preneur pour le fichier de Geofit qu'elle évoque dans son mail mais que j'ai l'impression qu'elle a oublié de le mettre en PJ. Ça pourrait vraiment réduire le chiffrage.

@SimonSAMPERE
Copy link
Collaborator

SimonSAMPERE commented Jan 29, 2024

Après avoir étudié le fichier envoyé par le CD94 il apparaît que les interactions avec les bases de données sont gérées tellement différemment que ce code n'aidera pas.

Actuellement, pour les tables Oracle, la gestion des types de géométrie multiples se fait au moment de l'ajout de la couche, dans la méthode add_from_ora_database du module LayerAdder. Je vais donc ajouter cette gestion pour les tables PostGIS dans la méthode add_from_pg_database du même module.

Ça nécessite de modifier les méthodes suivantes :

  • establish_postgis_connection du DataBaseManager (fichier database.py) : ajouter le PostGisDBConnector dans le return
  • show_results du ResultsManager (fichier display.py) : ajouter connection["db_connector"] = conn[2]
  • add_from_pg_database du LayerAdder (fichier add_layer.py) : revoir tout l'algorithme pour conserver la gestion d'erreurs, des vues et des DTNG tout en ajoutant la gestion des types de géométrie multiples

SimonSAMPERE added a commit that referenced this issue Jan 30, 2024
@SimonSAMPERE SimonSAMPERE added enhancement Amélioration du fonctionnement existant and removed bug Problème par rapport au fonctionenment attendu support labels Jan 31, 2024
@SimonSAMPERE
Copy link
Collaborator

Recette

Ne fonctionne pas dans QGIS < 3.16 mais a priori le client utilise QGIS 3.28 donc pas de soucis

En plus de s'assurer que l'ajout d'une table PostGIS comportant plusieurs types de géométrie entraîne bien l'ajout d'une couche par type de géométrie (comportement similaire au Table Oracle Spatial comportant plusieurs type de géométrie), il faudra s'assurer que l'ajout des données PostGIS suivantes fonctionne toujours :

  • tables avec géométrie
  • DTNG
  • vues
  • vues dynamiques

@SimonSAMPERE SimonSAMPERE assigned jgrosmaire and unassigned Mouzzi-C Mar 13, 2024
@jgrosmaire
Copy link
Contributor

jgrosmaire commented Mar 13, 2024

Recette

  • Table avec différents types de géométrie (Polygone, Line, Point) : ok, même comportement que QGIS natif
  • DTNG : ok, même comportement que QGIS
  • Vues avec différent type de géométries : ?

Je ne sais pas si le problème vient de ma création de vue. Le comportement est étrange

Création de vue :

CREATE VIEW startsWithP AS
    SELECT *
    FROM multig
    WHERE name='P'
    WITH LOCAL CHECK OPTION

Vue selon le plugin qgis (deux couches avec le même point superposé, à chaque fois une entité dans le tableau)

image

Vue selon ggis (deux couches dont une couche non exploitable) :

image

Trois entités en base :

image

image

Je sais pas ce que j'ai mal fait, j'ai ce warning par défaut même si par défaut "name" est selectionné.

image

@jgrosmaire
Copy link
Contributor

jgrosmaire commented Mar 15, 2024

J'ai refait un test ce matin avec une nouvelle vue. Je pense qu'il y avait un problème avec celle utilisée mercredi mais je ne sais pas pourquoi :

Cette nouvelle vue s'affiche correctement dans QGIS directement :

image

Mais deux fois la même couche (seulement couche ponctuelle) en passant par le plugin :

image

Même comportement observé avec les vues dynamiques

@SimonSAMPERE
Copy link
Collaborator

Merci @jgrosmaire effectivement je me rend compte grâce à ton retour que je n'avais pas du tout pensé à tester les vues comportant des entités aux types de géométrie variés. My bad 🙏🏼

Je vais investiguer, corriger et je te dirai quand tu pourras reprendre la recette.

@SimonSAMPERE
Copy link
Collaborator

Ça concerne les vues et les vues matérialisées. Le plugin ajoute une couche par type de géométrie mais toujours une couche ponctuelle

@SimonSAMPERE
Copy link
Collaborator

@jgrosmaire j'ai fini de traiter tes retours et remis en QA le plugin QGIS. Pas besoin de recetter pour Oracle mais tu peux reprendre la recette pour Postgres. Idéalement il faudrait tester des tables, des vues et des vues matérialisées dans les configurations suivantes :

  • seulement des points
  • seulement des lignes
  • seulement des polygones
  • 2 ou 3 types "simples" différents (points et lignes ou points et polygones ou points lignes et polygones...)
  • le type "simple" et son type "multi" (points et multipoints, lignes et multilignes, polygones et multipolygones) --> le comportement attendu est que toutes les entités soient rassemblées dans une même couche car QGIS parvient à le gérer
  • 3 ou 4 types "simples" et "multiples" différents (points et multipoints et lignes ou points et polygones et multipolygones ou points, lignes, multilignes et polygones...) --> comme susmentionné, le comportement attendu est d'avoir une même couche pour les points et multipoints, pour les lignes et multilignes, pour les polygones et multipolygones

Dis-moi si tu as besoin de plus d'infos

@jgrosmaire
Copy link
Contributor

Combinaisons testées (P = Point, Poly = Polygone, L = Ligne) :

Combinaisons testées P L Poly P + Poly L+ Poly P+ L + Poly P + MultiP Poly + MultiPoly L + MultiL P + MultiP + MultiPoly + L P + MultiPoly + MultiL + MultiP P + MultiP + L + MultiL + Poly + MultiPoly
Nom {type}_recette_{?} t1 t2 t3 t4_pp t4_ lp t4_ppl t5_p1 t5_p2 t5_l t6_1 t6_2 t6_3
Table Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok
Vue Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok
Vue matérialisée Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok Ok

Comme QGIS, les GeometryCollection ne sont pas gérées.

@SimonSAMPERE
Copy link
Collaborator

Nickel @jgrosmaire , merci beaucoup !

@SimonSAMPERE
Copy link
Collaborator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Amélioration du fonctionnement existant
Projects
None yet
Development

No branches or pull requests

3 participants