#1 Wed 13 April 2016 16:58
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
[POSTGIS] : creation de table avec requete spatiale
Bonjour,
Je débute sous PostGIS.
Je souhaite créer une table de triangle (jusque là ça va) et que chaque triangle soit indépendant (ça aussi, ça marche). Dans cette table, je souhaite créer des colonnes (Id...) et c'est là que j'ai besoin d'aide, toutes mes tentatives restent vaines.
Voici ma requête de création
create table TRIANGLE_DISTINCT17
as
SELECT distinct (ST_Dump(geomDELAU)).geom As geometryEXPLOSE
FROM
( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geomDELAU
FROM "a7235__SOUNDG_PointZ" ) as Construction_DELAUNAY ;
Mon ajout devrait se réaliser comme suit (en gras dans la requête:
create table TRIANGLE_DISTINCT17
as
SELECT distinct (ST_Dump(geomDELAU)).geom As geometryEXPLOSE, ID as identifiant
FROM
( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geomDELAU
FROM "a7235__SOUNDG_PointZ" ) as Construction_DELAUNAY ;
Quelqu'un a-t-il une idée?
D'avance merci
Hors ligne
#2 Wed 13 April 2016 17:40
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : creation de table avec requete spatiale
bonjour,
Deux solutions:
ajouter l'id apres la requete dans votre table:
Code:
alter matable add column id serial primary key;
Oui générer une valeur unique dans la requete:
Code:
select .... row_number() over () as id, .... from ...
Nicolas
Hors ligne
#3 Wed 13 April 2016 17:51
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : creation de table avec requete spatiale
Merci Nicolas.
Dans le second cas, comment fait-on pour une incrémentation de +1
Cordialement
Hors ligne
#4 Wed 13 April 2016 18:03
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : creation de table avec requete spatiale
L'incrémentation est automatique: la fonction row_number() va générer un numéro pour chaque ligne de la requete, commençant à 1.
Nicolas
Hors ligne
#5 Thu 14 April 2016 08:01
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : creation de table avec requete spatiale
Bonjour Nicolas,
Je viens de tester! Le rown_number () ne doit pas fonctionner correctement, car dans mon cas tous les id restent à "1".
J'attaque POstgis via QGIS et l'interface de requêtes, peut-être que le problème vient de là?
Cordialement
Hors ligne
#6 Thu 14 April 2016 09:47
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : creation de table avec requete spatiale
Bonjour,
Pouvez-vous poster la requete ?
Le row_number doit etre mis dans le select extérieur, pas dans la sous-requete:
Code:
create table TRIANGLE_DISTINCT17 as SELECT distinct row_number() over () as id, (ST_Dump(geomDELAU)).geom As geometryEXPLOSE FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geomDELAU FROM "a7235__SOUNDG_PointZ" ) as Construction_DELAUNAY ;
Nicolas
Hors ligne
#7 Thu 14 April 2016 10:11
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : creation de table avec requete spatiale
Nicolas,
ma requête est exactement celle que vous avez mis en exemple, j'ai bien mes 5599 lignes, mais le "ID" est à "1" pour toutes les lignes.
merci de votre aide
Hors ligne
#8 Thu 14 April 2016 10:40
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : creation de table avec requete spatiale
Oui pardon:
le dump() (tablefunction) et le row_number() (window function) dans la meme ligne, ca ne marche pas:
Une sous requête de plus:
Code:
SELECT row_number() OVER () AS id, geometryExplose FROM ( SELECT (ST_Dump(geomDELAU)).geom AS geometryEXPLOSE FROM (SELECT ST_DelaunayTriangles(ST_Collect(geom)) AS geomDELAU FROM "a7235__SOUNDG_PointZ") AS Construction_DELAUNAY) AS t;
Nicolas
Hors ligne
#9 Thu 14 April 2016 11:03
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : creation de table avec requete spatiale
Un grand merci
Doit-on clôturer le post en précisant dans l'intitulé quelque-chose?
Hors ligne
#10 Sat 24 October 2020 10:53
- Jkerebel04
- Participant occasionnel
- Lieu: Oraison
- Date d'inscription: 21 Apr 2020
- Messages: 26
Re: [POSTGIS] : creation de table avec requete spatiale
Bonjour
Je souhaite faire pus ou moins la même chose. Néanmoins une erreur subsiste.
Le message d'erreur retourné est :
ERREUR : ERREUR: référence invalide d'une entrée de la clause FROM pour la table « ab »
LINE 29: ... tab_par AS b ON st_intersects(ST_PointOnSurface(ab.geom),b...
^
HINT: Il existe une entrée pour la table « ab » mais elle ne peut pas être
référencée de cette partie de la requête.
Pourriez-vous m'indiquer où je fait fausse route ?
Ci-dessous les ligne de ma fonction
CREATE TABLE tab_union AS
SELECT
-- Crée un indentifiant unique pour la nouvelle géométrie créer par l'union de géomètrie
DISTINCT ROW_NUMBER() OVER() AS id_geom,
singlegeom,
-- avec comme reference d'union l'id de la parcelle
b.id AS id_parc,
-- type 1 sont les batiment massif et type 2 batiments légés
MIN(type) AS tab_bat_type,-- La surface de la parcelle ainsi créer, avec la tranformation du SCR (dégré à m)
st_area(ST_Transform((st_dump(st_union(ab.geom))).geom,2154)) as surf_bat
FROM
tab_bat AS ab,
(SELECT
-- Créé la géomètrie unique à partie des différents polygone
(st_dump(st_union(c.geom))).geom AS singlegeom
FROM tab_bat AS c
) AS t
LEFT JOIN tab_par AS b ON st_intersects(ST_PointOnSurface(ab.geom),b.geom)
GROUP BY b.id;
« Patience et longueur de temps font plus que force et ni que rage » - Jean de La Fontaine, Le Lion et le Rat.
Hors ligne