#1 Fri 05 July 2013 10:56
- Yaëlle F
- Participant actif
- Date d'inscription: 27 Sep 2012
- Messages: 87
Changer de type de géometrie dans SPATIALITE
Bonjour à tous,
Je suis dans l'impasse depuis quelques jours et j'espère vraiment que quelqu'un puisse m'éclairer.
Je travaille dans spatialite sur une couche de type ligne à laquelle je veux appliquer un buffer. J'ai donc écrit les lignes suivantes :
--Je crée la couche qui recevra le tampon et je lui donne des champs déjà existants dans une table précédente, cette nouvelle table est donc de type ligne :
CREATE TABLE ROUTES_ZE_04_TAMPON25 AS SELECT a.geometry, a.id, a.nature, a.pos_sol FROM ROUTES_ZE_04 AS a;
--Création d'un buffer de 25m autour de chaque polygone
INSERT INTO ROUTES_ZE_04_TAMPON25 (geometry) SELECT ST_Buffer(geometry, 25.0) FROM ROUTES_ZE_04;
Cette seconde ligne de requête me donne un résultat bisarre. Ma table de tampon possède le double de ligne qu'initialement car il y a eu duplication des objets dont la moitié sont en ligne et l'autre moitié en polygone.
J'ai essayé avec un [...]CastToPolygon( ST_Buffer...)) mais rien à faire.
Comment dois-je m'y prendre ? J'ai besoin au final d'obtenir une table uniquement polygonale.
Merci d'avance,
Yaëlle
Hors ligne
#2 Fri 05 July 2013 11:24
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3944
Re: Changer de type de géometrie dans SPATIALITE
Bonjour,
Code:
CREATE TABLE ROUTES_ZE_04_TAMPON25 AS SELECT a.geometry, a.id, a.nature, a.pos_sol FROM ROUTES_ZE_04 AS a;
vous crée une table ROUTES_ZE_04_TAMPON25 mais la remplit aussi de facto avec les données de ROUTES_ZE_04. Du coup, il est normal qu'à la fin vous obteniez les deux types de géométries, étant donné qu'avant le buffer, vous avez déjà des lignes.
Je ne sais pas si ce sont là toutes les colonnes de la table d'origine (et ne connaît pas la syntaxe pour sélectionner juste celles qui vous intéressent) mais en attendant que quelqu'un apporte la syntaxe efficace, essayez peut-etre
CREATE TABLE ROUTES_ZE_04_TAMPON25 (like ROUTES_ZE_04);
quitte à supprimer les colonnes supplémentaires. Puis recréez votre buffer.
EDIT:
Il semble que
Code:
CREATE TABLE ROUTES_ZE_04_TAMPON25 AS SELECT a.geometry, a.id, a.nature, a.pos_sol FROM ROUTES_ZE_04 AS a where 1=2;
pourrait marcher: la condition étant fausse, aucun enregistrement ne pourrait être récupérée mais la structure de la table l'aura déjà été.
Dernière modification par SANTANNA (Fri 05 July 2013 11:34)
Hors ligne
#3 Fri 05 July 2013 11:45
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3944
Re: Changer de type de géometrie dans SPATIALITE
En regardant plus en détail votre deuxième requête, vous ne récupérez que la géométrie des buffers? Quid des autres attributs?
Code:
CREATE TABLE ROUTES_ZE_04_TAMPON25 AS SELECT st_buffer(geometry, 25) as geometry, id, nature, pos_sol FROM ROUTES_ZE_04;
devrait faire tout en un, me semble-t-il.
Et étant donné que vous ne faites appel qu'à une table, vous n'êtes pas forcé de lui filer un alias.
Hors ligne
#4 Fri 05 July 2013 11:48
- Yaëlle F
- Participant actif
- Date d'inscription: 27 Sep 2012
- Messages: 87
Re: Changer de type de géometrie dans SPATIALITE
Au poil !
Ça fonctionne parfaitement ! Merci !
Hors ligne