banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB