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 Mon 10 July 2017 12:06

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

[POSTGIS] - ST_MakeLine entre deux couches

Bonjour à tous,

Je me met à l'utilisation un peu plus avancée de PG, mais je me confronte à certains soucis d'utilisation des fonctions.

J'ai deux tables différentes, toute deux en MultiPoints :

-pb1 : table des poubelles
-node : table des noeud

node permet de créer un point défini sur une tournée de récolte, sur laquelle se rattache différentes poubelles de la table pb1. Pour chaque poubelle, je souhaite créer une ligne (un segment) entre elle et son noeud. J'ai mis une référence externe dans la table pb1 pour la relation, et j'essaie d'utiliser ST_MakeLine :

Code:

SELECT ST_MakeLine(node.geom,pb1.geom) as my_line
from(
SELECT 
  node.obj_id,
  node.geom, 
  pb1.ref_key_node,
  pb1.geom
FROM 
  pb.node, 
  pb.pb1
WHERE 
  node.obj_id = pb1.ref_key_node)as sub_query;

Mais une erreur "entrée manquante de la clause FROM pour la table « node »" persiste...

Je ne parviens pas à comprendre où se situe le problème, mais là encore... je débute avec ce type de fonction.

Hors ligne

 

#2 Mon 10 July 2017 12:59

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: [POSTGIS] - ST_MakeLine entre deux couches

Bonjour,

hypothèse : Ton select fait appel à la table node et ta sous requête a pb.node du coup je pense que la requête ne trouve pas la table de ton premier select.


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Mon 10 July 2017 13:02

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

bonjour,

le pb fait référence au schéma, en mettant ceci partout, je conserve la meme erreur

Code:

SELECT ST_MakeLine(pb.node.geom,pb.pb1.geom) as my_line
from(
SELECT 
  pb.node.obj_id,
  pb.node.geom, 
  pb.pb1.ref_key_node,
  pb.pb1.geom
FROM 
  pb.node, 
  pb.pb1
WHERE 
  pb.node.obj_id = pb.pb1.ref_key_node)as sub_query;

ERREUR: entrée manquante de la clause FROM pour la table « node »
SQL state: 42P01
Character: 20

Dernière modification par Zakh (Mon 10 July 2017 13:02)

Hors ligne

 

#4 Mon 10 July 2017 13:48

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: [POSTGIS] - ST_MakeLine entre deux couches

Bonjour,
Une proposition : renommez vos geom dans la subquery et utilisez-les dans le st_makeline.

Code:

SELECT ST_MakeLine(geomnode,geompb1) as my_line
from(
SELECT 
  pb.node.obj_id,
  pb.node.geom as geomnode, 
  pb.pb1.ref_key_node,
  pb.pb1.geom as geompb1
FROM 
  pb.node, 
  pb.pb1
WHERE 
  pb.node.obj_id = pb.pb1.ref_key_node)as sub_query;

Bon courage,


Pascal PLUVINET

Hors ligne

 

#5 Mon 10 July 2017 13:57

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

Bonjour,

Merci pour la proposition. Malheureusement j'obtiens une autre erreur :

ERREUR:  Input geometries must be points or lines

********** Error **********

ERREUR: Input geometries must be points or lines
SQL state: XX000

Ceci est un poil plus embêtant. J'ai essayé

SELECT ST_MakeLine('MULTIPOINT(1 2, 17 6)', 'MULTIPOINT(4 5, 7 9, 18 -1)');

Pour vérifier simplement la syntaxe... et j'obtiens le même message d'erreur. Est-ce que ceci peut provenir d'une mauvaise configuration de ma base?

*EDIT : il semble que le Multipoint pose problème. En suivant à la lettre ce site : http://www.h2gis.org/docs/1.2/ST_MakeLine/ je parviens à des résultats pour les geom "Point" mais pas pour les Multipoints... Une idée?

Dernière modification par Zakh (Mon 10 July 2017 14:02)

Hors ligne

 

#6 Mon 10 July 2017 14:37

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: [POSTGIS] - ST_MakeLine entre deux couches

Salut, un petit ST_dump() ?


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#7 Mon 10 July 2017 15:27

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: [POSTGIS] - ST_MakeLine entre deux couches

Bonjour,

un extrait de la doc postgis pour la fonction Makeline()

Availability: 2.3.0 - Support for multipoint input elements was introduced

Availability: 2.0.0 - Support for linestring input elements was introduced

Availability: 1.4.0 - ST_MakeLine(geomarray) was introduced. ST_MakeLine aggregate functions was enhanced to handle more points faster.


Donc ...


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#8 Mon 10 July 2017 16:16

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

heretik25 a écrit:

Salut, un petit ST_dump() ?


Je vois l'idée, je vais devoir extraire la partie géométrie des éléments du résultat de ST_Dump(). En l'état faire un ST_MakeLine(ST_Dump()) ne semble pas fonctionner (c'est peut-être une approche un peu trop bourine aussi...)

Merci pour la piste, je teste ça dès que possible!

Hors ligne

 

#9 Mon 10 July 2017 16:52

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: [POSTGIS] - ST_MakeLine entre deux couches

Bonjour,

Au cas où l'anglais pose un pb, c'est à partir de la 2.3.0 que multipoint est supporté.

Pour st_dump c'est (st_dump(mageom)).geom qu'il faut utiliser pour avoir la géométrie.

Je me met à l'utilisation un peu plus avancée de PG


Dans ce cas lire la documentation sur les fonctions c'est très utile.


.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#10 Tue 11 July 2017 09:14

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

ChristopheV a écrit:

Au cas où l'anglais pose un pb, c'est à partir de la 2.3.0 que multipoint est supporté.


Oui, bien entendu, j'ai vu ça, et l'anglais n'est absolument pas un problème pour moi. Étant en 2.3.1, ça devrait jouer... Mais quelque chose bloque... d'où ma question. (J'espère ne pas faire perdre du temps aux membres de ce forum pour une question triviale de version ou une bêtise du genre, même si en scripting, ça arrive plus souvent qu'on pense).

ChristopheV a écrit:

Pour st_dump c'est (st_dump(mageom)).geom qu'il faut utiliser pour avoir la géométrie.


Il semble que ça fonctionne comme ça. C'est la syntaxe du langage qui me pose problème en fait. Et la doc ne me convient pas énormément, venant de langage avec plus de helpfiles (matlab, python, etc.).

Code:

SELECT ST_MakeLine(geomnode,geompb1) as my_line
from(
SELECT 
  pb.node.obj_id,
  (ST_Dump(pb.node.geom)).geom as geomnode, 
  pb.pb1.ref_key_node,
  (ST_Dump(pb.pb1.geom)).geom as geompb1
FROM 
  pb.node, 
  pb.pb1
WHERE 
  pb.node.obj_id = pb.pb1.ref_key_node) AS sub_query;

Ceci implique que ST_Multipoint n'apprécie guère ce que je lui demandais. Le principe c'est que ça marche. Plus qu'à en faire une vue intéressante pour qgis.

Merci

Hors ligne

 

#11 Tue 11 July 2017 10:15

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: [POSTGIS] - ST_MakeLine entre deux couches

Salut,

deux solutions :

Soit une de vos tables contient autre chose que des (multi)points ou lignes,
soit vous avez vraisemblablement trouvé un bug.

Pour vérifier vos géométries :

Code:

SELECT DISTINCT st_geometrytype(geom) FROM pb.node
UNION
SELECT DISTINCT st_geometrytype(geom) FROM pb.pb1;

Hors ligne

 

#12 Tue 11 July 2017 10:20

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

Hello,

J'ai testé ça, et le résultat est bien :

st_geometrytype
text
-------------
ST_MultiPoint


Ce qui semble normal / bon...

Hors ligne

 

#13 Tue 11 July 2017 15:49

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: [POSTGIS] - ST_MakeLine entre deux couches

Oui c'est bon,

Il s'agit apparemment d'un bug, ou bien une limitation :
https://github.com/postgis/postgis/blob … ic.c#L1503

Par contre, Les versions agrégées ou tableau fonctionnent bien avec les multipoints.

Dernière modification par tumasgiu (Tue 11 July 2017 20:36)

Hors ligne

 

#14 Thu 03 August 2017 08:56

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

Rebonjour à tous

De retour de vacances, j'ai pu poursuivre, et ça marche nickel

A toute fin utile, voici comment je l'ai finalement fait :

Code:

-- View: pb.vw_node_pb

-- DROP VIEW pb.vw_node_pb;

CREATE OR REPLACE VIEW pb.vw_node_pb AS 
 SELECT row_number() OVER (ORDER BY sub_query.node_id) AS fid,
    sub_query.node_id,
    st_makeline(sub_query.geomnode, sub_query.geompb1) AS geom
   FROM ( SELECT node.obj_id AS node_id,
            (st_dump(node.geom)).geom AS geomnode,
            pb1.ref_key_node,
            (st_dump(pb1.geom)).geom AS geompb1
           FROM pb.node,
            pb.pb1
          WHERE node.obj_id = pb1.ref_key_node) sub_query;

ALTER TABLE pb.vw_node_pb
  OWNER TO sitadmin;
GRANT ALL ON TABLE pb.vw_node_pb TO sitadmin;
COMMENT ON VIEW pb.vw_node_pb
  IS 'Vues segment reliant les pts poubelles aux noeuds des tournées';

Hors ligne

 

#15 Thu 03 August 2017 13:05

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

Re: [POSTGIS] - ST_MakeLine entre deux couches

Salut et merci pour ton retour. Heureux que ça fonctionne !


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#16 Thu 03 August 2017 13:29

Zakh
Participant occasionnel
Date d'inscription: 23 Jul 2015
Messages: 38

Re: [POSTGIS] - ST_MakeLine entre deux couches

heretik25 a écrit:

Salut et merci pour ton retour. Heureux que ça fonctionne !


Avec plaisir.

Par contre, QGIS me dit qu'il n'y a pas d'entrée dans la table geometry_column lorsque j'utilise le Gestionnaire BD... Pourtant le couche vue se charge bien. Visiblement ce problème a déjà été rencontré à plusieurs reprises, mais je ne trouve pas de solution qui fonctionne ou qui explique pourquoi ceci se produit.

Hors ligne

 

Pied de page des forums

Powered by FluxBB