#1 Tue 11 October 2022 16:02
- vxTedxv
- Participant occasionnel
- Date d'inscription: 26 Jan 2011
- Messages: 26
QGIS: 1 couche, 2 SCR
Bonjour,
Après recherche, je n'ai pas trouvé de solution à mon problème, qui me parait pourtant "simple".
J'ai un .CSV que je veux afficher dans QGis. Ce .CSV est mis à jour régulièrement, issu d'un export de données.
Finalité : pas de modifs des données, juste de l'affichage/requêtage.
Subtilité : ma table est composée de données avec deux possibilités de X/Y avec un système de coordonnées différent (heureusement dans des champs distincts)
Objectif recherché : pouvoir afficher avec la bonne projection, tous les points de la table et personnaliser ensuite l'affichage d'une couche unique.
Ce que j'ai déjà essayé : charger dans QGis deux fois le même .csv en ciblant pour chacun les X/Y différents. J'obtiens bien les points correctement projetés, mais scindés logiquement en 2 couches. Je me suis tourné vers une couche virtuelle pour tenter de fusionner ces deux couches en une seule :
Code:
SELECT * couche_1 WHERE x_projection_1 IS NOT NULL UNION SELECT * couche_2 WHERE x_projection_2 IS NOT NULL
Hélas, le résultat me donne bien la fusion des deux couches en une mais avec une mauvaise projection pour l'une des deux.
Merci d'avance pour vos suggestions
Hors ligne
#2 Tue 11 October 2022 17:51
- Joseph Jacquet
- Participant actif
- Date d'inscription: 19 Feb 2020
- Messages: 92
Re: QGIS: 1 couche, 2 SCR
Bonjour,
Vous avez la fonction "Fusionner des couches vecteurs" qui permet d'attribuer un SCR à la couche de sortie :
"On peut choisir un Système de Coordonnées de Référence (SCR) spécifique pour la nouvelle couche. Si aucun choix n'est fait, le SCR appliqué sera celui de la première couche entrée. Toutes les couches seront alors reprojetées dans le SCR de cette couche."
JJ
Hors ligne
#3 Wed 12 October 2022 11:01
- vxTedxv
- Participant occasionnel
- Date d'inscription: 26 Jan 2011
- Messages: 26
Re: QGIS: 1 couche, 2 SCR
Bonjour et merci pour votre réponse.
Hélas, elle ne répond pas exactement à ce que je recherche car cela nécessite à chaque mise à jour du fichier .csv de procéder à l'opération de fusion et de réappliquer les mises en forme. L'idée est bien d'automatiser l'exploitation du fichier d'origine pour qu'à chaque mise à jour du fichier .csv, les données affichées soient mises à jour toutes seules dans QGis.
Hors ligne
#4 Wed 12 October 2022 16:36
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 994
Re: QGIS: 1 couche, 2 SCR
J'ai écris une requete SQL qui marche sur une table avec votre configuration.
Code:
SELECT *, CASE WHEN XL93 IS NULL THEN makepoint(XWGS84,YWGS84,4326) ELSE transform(makepoint(XL93,YL93,2154),4326) END as geometry FROM datas
Avec comme paramètres (à adapter à votre contexte) :
- une table de données nommées "datas"
- des champs X/Y dans 2 projections, Lambert 93 (EPSG=2154) et WGS84 (EPSG=4326) et donc des champs XL93/YL93 et XWGS84/YWGS84
La couche virtuelle ainsi créée a bien la géométrie dans un seul SCR (ici WGS84, mais j'aurais pu choisir le Lambert 93).
A+
Dernière modification par Sylvain M. (Wed 12 October 2022 16:40)
Sylvain M.
Hors ligne
#5 Thu 13 October 2022 11:48
- vxTedxv
- Participant occasionnel
- Date d'inscription: 26 Jan 2011
- Messages: 26
Re: QGIS: 1 couche, 2 SCR
Bonjour et merci pour votre contribution.
Dans la théorie c'est EXACTEMENT ce que je cherche à faire mais hélas, mes points ne s'affichent pas Pourtant, QGis ne détecte pas d'erreur dans la syntaxe du code. Même en forçant la projection dans la boite de dialogue de création de la couche virtuelle.
- Quand je charge mon .csv paramétré sans données de géométries comme préconisé ici, ça n'affiche aucun point (mais données bien présentes dans la table attributaire). La couche apparait avec une icône "point-ligne-polygone" sans possibilité de cocher/zoomer/définir une échelle de visibilité de la couche ;
- Quand je charge le .csv avec les points projetés dans un CRS, seuls ces points sont restitués dans la couche virtuelle ensuite. La couche apparait avec une icône de symbologie classique de point avec les mêmes possibilités que n'importe quelle autre couche.
Voici le code entré :
Code:
SELECT *, CASE WHEN x_lii IS NULL THEN makepoint(x_l93,y_l93,2154) ELSE transform(makepoint(x_lii,y_lii,27572),'EPSG:2154') END as geometry FROM couche_issue_du_fichier_CSV
Couche : couche_issue_du_fichier_CSV
Champs x_lii et x_lii pour la projection en Lambert II étendu (EPSG:27572)
Champs x_l93 et y_l93 pour la projection en Lambert 93 (EPSG:2154)
Projection finale souhaitée : Lambert 93
version QGis : 3.26.0
Dernière modification par vxTedxv (Fri 14 October 2022 09:17)
Hors ligne
#6 Fri 14 October 2022 10:25
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 994
Re: QGIS: 1 couche, 2 SCR
Je viens de tester à nouveau, ça marche pour moi.
D'abord, un conseil : n'hésite pas à mettre des retours à la ligne dans ton SQL, c'est beaucoup plus lisible
J'ai chargé un CSV (datas.csv) dans QGIS (bouton "ajouter une couche de texte délimité"), et j'ai précisé "pas de géométrie (juste la table)"
Puis je suis passé sur le gestionnaire de base de données, et j'ai executé la requête suivante dans "couches virtuelles" :
Code:
SELECT *, CASE WHEN x_lii IS NULL THEN makepoint(x_l93,y_l93,2154) ELSE transform(makepoint(x_lii,y_lii,27572),2154) END as geometry FROM datas
Après exécution (qui affiche la table, mais sans la colonne geometry), j'ai cliqué sur "Charger", et la couche de point s'est bien chargée dans la table des matières.
Tu avais écris "transform(makepoint(x_lii,y_lii,27572),'EPSG:2154')", j'ai corrigé en "transform(makepoint(x_lii,y_lii,27572),2154')"
Sylvain M.
Hors ligne
#7 Mon 31 October 2022 16:57
- vxTedxv
- Participant occasionnel
- Date d'inscription: 26 Jan 2011
- Messages: 26
Re: QGIS: 1 couche, 2 SCR
Bonjour, merci pour la réponse et désolé pour la latence !
J'ai réessayé et effectivement ça fonctionne ! MERCI !
(J'avais dû faire une boulette la première fois car je n'avais pas mis 'EPSG', ça n'avait pas fonctionné et j'avais essayé d'adapter ça à l'exemple suivant, en vain : https://docs.qgis.org/3.22/en/docs/user … #transform)
EDIT : le même fichier .csv chargé avec ou sans la reconnaissance automatique de types de champs a une influence sur le résultat : ça n'a fonctionné que quand je l'ai activé, ce qui signifie que la couche virtuelle a probablement besoin de reconnaitre les champs de coordonnées comme nombres et non comme chaîne de texte...
Dernière modification par vxTedxv (Mon 31 October 2022 17:05)
Hors ligne