#1 Mon 18 January 2021 12:19
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Spatialite : table / champ geometry issu d'une selection
Bonjour à tous,
Je dispose, dans un BDD Spatialite, de 2 tables, dont l'une avec un champ geom (MULTIPOLYGON).
Si je créé une nouvelle table, issue de la jointure des 2 (CREATE TABLE matable AS SELECT * FROM A JOIN B on A.id = B.id), le champ geom de la table créée n'est plus reconnu comme geometry, mais comme NUM, avec du contenu hexadecimal (je crois que c'est le format BLOB de SQLite).
Pourriez-vous m'indiquer la meilleure solution pour qu'une table issue de sélection soit reconnue comme table spatiale ?
PS. : je fais mes requêtes depuis le gestionnaire de BD de QGis
Dernière modification par Sylvain M. (Mon 18 January 2021 12:20)
Sylvain M.
Hors ligne
#2 Mon 18 January 2021 12:26
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Spatialite : table / champ geometry issu d'une selection
Je viens finalement d'y parvenir comme ça :
Code:
SELECT AddGeometryColumn('matable', 'geometry', 2154, 'MULTIPOLYGON', 'XY'); UPDATE matable SET geometry = geom
C'est le plus simple ?
Sylvain M.
Hors ligne
#3 Mon 18 January 2021 14:00
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Spatialite : table / champ geometry issu d'une selection
Il y avait encore plus simple :
Code:
SELECT RecoverGeometryColumn('matable', 'geom', 2154, 'MULTIPOLYGON', 'XY');
Du coup, pas besoin de créer un nouveau champ !
Sylvain M.
Hors ligne
#4 Mon 18 January 2021 15:17
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Spatialite : table / champ geometry issu d'une selection
J'ai quand même une petite question bonus (oui oui, je suis en monologue depuis le début, mais peut-être une âme charitable viendra-t-elle me sortir de cette solitude).
Suite à la requête, j'ai créé un index spatial avec
Code:
SELECT CreateSpatialIndex('matable', 'geom');
Mais l'emprise de la couche reste inconnu. Il y a bien le bouton "calculer" dans QGis (cf. capture ci-jointe), mais j'imagine qu'il y a une fonction SQL équivalente ?
Pourriez-vous m'indiquer laquelle ?
Sylvain M.
Hors ligne
#5 Mon 18 January 2021 16:08
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Spatialite : table / champ geometry issu d'une selection
Bonjour,
Extent(geom) (http://www.gaia-gis.it/gaia-sins/spatia … 5.0.0.html)
Nicolas
Hors ligne
#6 Tue 19 January 2021 09:50
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Spatialite : table / champ geometry issu d'une selection
Super : MERCI Nicolas !!
Sylvain M.
Hors ligne
#7 Tue 19 January 2021 10:36
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Spatialite : table / champ geometry issu d'une selection
Bon, en fait ça n'a pas résolu mon "problème" (mais qui n'en est peut-être pas un).
Je voulais mettre à jour l'information stockée par QGis pour la table. Mais ce n'est peut-être pas vraiment nécessaire.
J'ai exécuté les requêtes ci-dessous, elle fonctionnent et retournent bien l'emprise de la table, mais QGis affiche encore "Emprise inconnue (calculer)" sur les infos de la table.
Code:
SELECT Extent(geom) FROM matable; SELECT GetLayerExtent('matable', 'geom'); SELECT UpdateLayerStatistics('matable', 'geom'); SELECT UpdateLayerStatistics('matable');
Je ne sais pas comment mettre à jour les infos lues/stockées par QGis quand on fait "calculer l'emprise".
Après, ça ne change peut-être pas grand chose au niveau performances, puisque l'index spatial, lui, est bien calculé/stocké.
Dernière modification par Sylvain M. (Tue 19 January 2021 10:39)
Sylvain M.
Hors ligne