PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Général » Postgis : couloir de plus grande concentration de trajectoires » 07/03/2019 15:27:40

lea
Réponses : 1

Bonjour à tous,

je suis plutôt coincée ... voici ma problèmatique :

j'ai un grand nombre de trajets individuels (polylignes) qui suivent tous plus ou moins la même tendance/ la même trajectoire ... mais au sein de cette même tendance/trajectoire, j'aimerais trouver le trajet/la tendance/ la courbe qui passe par la plus grande concentration de ces trajets ...la courbe/tendance/trajet type la plus privilégiée ...

Je ne sais pas si c'est possible sur postgis ...
Auriez-vous des pistes? décomposer en point?  et trouver par zone l'endroit où il y a plus de concentration de points?

Merci d'avance pour votre aide, j'espère que ma description est assez claire ...

Léa

#2 Re : Général » Update d'une table par une autre et résultat dans vue » 03/06/2016 09:29:02

lea

Vraiment désolée, j'étais partie sur quelque chose plus tordu et ça n'avait pas percuté dans ma tête ta première réponse ... oui, en effet je peux faire comme cela ...
Merci

#3 Re : Général » Update d'une table par une autre et résultat dans vue » 02/06/2016 18:31:50

lea

J'ai 2 tables :
table1 :
la table d'origine avec un bon nombre d'enregistrements et de champs
id        name     titre           info
-------------------------------------------
1         test        t_test         pas ok
2         essai      t_essai       ok
5         trial        t_trial        ok
10       probe      t_probe     concluant     

Je reçois des mises à jour via une autre table (table2). Cette table (table2) ne concerne pas tous les champs et pas tous les enregistrements de la table d'origine :
table2
id        name           titre       
------------------------------
2         re-essai       essai_fr   
10        test-probe   essai_de   


Les 2 tables ont un identifiant commun (id), c'est grâce à celui-ci que je pourrais faire la mise à jour des nouvelles données dans la table d'origine.


Mais je ne peux pas toucher à la table d'origine (table1)... je voudrais faire une vue qui reprenne toutes les données de la table d'origine avec les enregistrements qui ont été mis à jour :

id        name               titre             info
-------------------------------------------
1         test                 t_test           pas ok
2        re-essai        essai_fr       ok
5         trial                 t_trial           ok
10       test-probe     essai_de     concluant

(-->en gras, les valeurs qui ont été mises à jour)
C'est plus clair?

#4 Re : Général » Update d'une table par une autre et résultat dans vue » 02/06/2016 11:39:10

lea

un left join ou un coalesce ne conviennent pas car je ne veux pas joindre les tables juste faire l'update dans la table1 de certaines valeurs provenant de la table2
En fait je cherche à faire cela :
UPDATE table1
SET table1.name = table2.name, table1.titre = table2.titre
FROM table2
WHERE table1.id = table2.id
Ceci fonctionne très bien ...
mon soucis est que je ne veux pas modifier ma table d'origine mais que la table d'origine updatée soit dans une vue ... je ne sais pas si je suis plus claire

*table 1

id        name     titre           info
-------------------------------------------
1         test        t_test         pas ok
2         essai      t_essai       ok
5         trial        t_trial        ok
10       probe      t_probe     concluant     

*table 2

id        name           titre       
------------------------------
2         re-essai       essai_fr   
10        test-probe   essai_de     

*creation Vue (Result) comme suit :

id        name               titre             info
-------------------------------------------
1         test                 t_test           pas ok
2         re-essai        essai_fr       ok
5         trial                 t_trial           ok
10       test-probe     essai_de     concluant

#5 Général » Update d'une table par une autre et résultat dans vue » 02/06/2016 11:04:52

lea
Réponses : 6

Bonjour à tous,

je suis un peu bloquée sur la mise à jour de certaines valeurs d'une table avec des valeurs d'une autre table mais je voudrais que tout cela soit mise dans une vue ... je ne sais pas trop si je suis claire

*table 1

id        name     titre           info
-------------------------------------------
1         test        t_test         pas ok
2         essai      t_essai       ok
5         trial        t_trial        ok
10       probe      t_probe     concluant     

*table 2

id        name           titre       
------------------------------
2         re-essai       essai_fr   
10        test-probe   essai_de     

*creation Vue (Result) comme suit :

id        name               titre             info
-------------------------------------------
1         test                 t_test           pas ok
2         re-essai        essai_fr       ok
5         trial                 t_trial           ok
10       test-probe     essai_de     concluant 

Je n'ai aucun soucis à faire l'update de la table d'origine :
UPDATE table1
SET table1.name = table2.name
FROM table2
WHERE table1.id = table2.id
Ceci fonctionne très bien ... mon soucis est que je ne veux pas modifier ma table d'origine mais que la table d'origine updatée soit dans une vue ...

J'ai essayé plusieurs trucs mais sans atteindre mon résultat, il me manque une étape à chaque fois et la solution ne me vient pas.
Voyez-vous une piste?

Merci d'avance pour votre aide

Léa

#6 Re : Général » Boucle dans postgresql » 23/12/2014 15:19:49

lea

Bon il semblerait que j'avance avec:


WITH RECURSIVE t(n) AS (
    VALUES (21001)
  UNION ALL
    SELECT n+1 FROM t WHERE n < 21019
)

select * from (select *, pop+round((select zz1.pop from (select * from table1 where code_district='ZZ' AND code_com='21001')zz1 )*pop_portion) as repart from   
        (select *,pop/(select s1.sum from (select code_com, sum(pop) from table1 where code_district <> 'ZZ' AND code_com='21001' group by code_com order by code_com)s1) as pop_portion from
            (select* from table1 where code_com='21001')com21001 where code_district<>'ZZ' order by code_com, pop) foo) repart1

Mais le message suivant :
ERROR:  more than one row returned by a subquery used as an expression
********** Error **********

ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000


Alors que ma requête seule fonctionne ...


Une idée?


Merci d'avance ...

#7 Général » Boucle dans postgresql » 23/12/2014 14:48:19

lea
Réponses : 2

Bonjour,

je cherche à faire une boucle dans postgresql mais je ne connais pas l'équivalent 'for' en postgresql...
Je cherche à faire ce genre de requête en gros :

table1
------------
code_com      pop          code_district
---------------------------------------------------------
21001        25                yu
21001        5                re
21001        2                tr   
21001        15                ZZ   
21002        68                ee
21002        6                rt
21002        30                ZZ
21003        108                ii   
21003        26                io
21003        88                ZZ
21004        52                fe
21004        98                cf
21004        8                ZZ   
21005        89                az
21005        78                ws   
21005        7                ZZ

--pour code_com = 21001
select * from (select *, pop+round((select zz1.pop from (select * from table1 where code_district='ZZ' AND code_com='21001')zz1 )*pop_portion) as repart from    
        (select *,pop/(select s1.sum from (select code_com, sum(pop) from table1 where code_district <> 'ZZ' AND code_com='21001' group by code_com order by code_com)s1) as pop_portion from
            (select* from table1 where code_com='21001')com21001 where code_district<>'ZZ' order by code_com, pop) foo) repart1

c'est une table fictive, j'ai beaucoup plus d'enregistrements que ça et la requête est juste un aperçu d'une requête plus longue ...

Je dois faire cette requête pour chaque code_com et faire une union de toutes les requêtes ce que j'aimerais éviter de faire, c'est :
requête pour code_com 21001 union requête pour code_com 21001 union requête pour code_com 21001 union requête pour code_com 21001

Et plutôt utiliser une boucle à partir de mes code_com  : de 21001 à 21005  avec un pas de 1,

mais je n'ai aucune idée comment faire cela sous postgresql, j'ai bien vu with recursive mais je ne sais pas si cela peut fonctionner dans ce cas et comment cela se met en place ...

Je ne sais pas pas si je suis claire ? ;D

Quelqu'un aurait une idée?

Lea

#8 Général » Creation de buffer à partir d'un centroid suivant forme du polygone » 18/12/2013 09:56:22

lea
Réponses : 1

Bonjour à tous,

je ne sais pas si certains d'entre vous travaillent avec postgis également mais au cas où, je vous expose mon problème.

Je cherche à calculer une distance maximum x de parcours autour d'un point. Pour cela, un simple buffer suffit. Mais je dois prendre en compte que dans ce buffer il y a une rivière et un pont. Donc la distance de parcours doit prendre en compte ce pont et l'emprunter. Donc ma distance de parcours du côté du point de départ reste le buffer mais de l'autre coté de la rivière le buffer ne convient plus.

Je ne sais pas si je suis claire ...

Je pensais faire un buffer de cette distance de parcours puis lui enlever l'emprise de la rivière tout en gardant l'emprise du pont puis faire des st_makeline entre le point de départ et les points tout du long du bord du buffer tronqué et calculer leur longueur , ne prendre les longueurs de ces segments qu'égal ou inférieur à la distance de parcours que je veux puis faire un patatoïde de ces lignes transformés en points.

mais je ne sais pas trop comment aborder le st_makeline entre le point d'origine et le bord de mon buffer (générer des points tout au long de mon buffer et comment dire fais-moi des line entre de point de départ et chaque point de mon polygone??) ...


Voilà, peut-être avez-vous des suggestions (petite précision, il n'y a pas de route ou chemin dans l'emprise du buffer, il tombe dans un parc!) ...

#9 Re : Général » Regroupement de valeur au sein d'un seul champs » 13/11/2013 14:56:28

lea

Super, merci ... je ne connaissais pas la fonction ... merci beaucoup et bonne journée

#10 Général » Regroupement de valeur au sein d'un seul champs » 13/11/2013 14:10:02

lea
Réponses : 2

Bonjour à tous,

je suis bloquée par un petit problème :
j'ai une table comme suit :

field1        field2         field3
1            A            p1   
2            B            p2
3            C            p3
4            D            p4
5            A            p5
6            B            p6
7            A            p7

Et j'aimerais obtenir :

field1        field2         field3
1            A            p1 p5 p7   
2            B            p2 p6
3            C            p3
4            D            p4

ou

field1        field2         Newfield
1            A            p1 p5 p7   
2            B            p2 p6
3            C            p3
4            D            p4

Voyez-vous comme je pourrais procéder ?

ça fait quelques jours que je cherche une solution mais n'étant pas une spécialiste, je bloque ... c'est l'insertion dans un champs existant ou un nouveau champs de plusieurs valeurs d'une même table ayant la même valeur dans field2 qui me pose problème et il s'agit de champs character varying ou text ...

J'espère avoir été claire ;D

D'avance merci

léa

#11 Général » Create MATERIALIZED VIEW » 16/05/2013 14:53:54

lea
Réponses : 2

Bonjour,

je cherche à créer des "MATERIALIZED VIEW" mais lorsque je veux en créer une, cela ne fonctionne pas. Je ne trouve pas beaucoup d'infos sur internet en ce qui concerne cette option. Il semble que ce soit implémenté dans postgresql, mais cela dépend peut-être de la version ou cela ne fonction peut-être pas avec postGIS.
J'utilise Postgresql 9.0.2 et Postgis 2.0.1
Quelqu'un aurait-il une info?

Merci

Léa

#12 Général » Comparaison spatiale de 2 tables et insertion de données » 20/12/2012 09:53:30

lea
Réponses : 1

Bonjour à tous,

J’ai 2 tables a et b (des polygones dans les 2)… je voudrais  faire une comparaison spatiale des 2 tables et si les polygones sont identiques (st_hausdorffdistance=0), ne rien faire, s’ils ne sont pas identiques injecter les polygones de la table b dans la table a avec les attributs(les 2 tables ont exactement les mêmes champs et dans le même ordre) …
J'ai fait ces 2 requêtes ci-dessous mais elles ne fonctionnent pas (pourtant si je lance insert seul il fonctionne):

select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_intersects(a.the_geom, b.the_geom) is false
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;

ou

select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_hausdorffdistance(a.the_geom, b.the_geom) >0
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;

Sauriez-vous m'aider,

merci,
lea

#13 PL/pgSQL » comparaison spatiale de 2 tables et insertion de données » 19/12/2012 22:00:15

lea
Réponses : 0

Bonjour à tous,

J’ai 2 tables a et b (des polygones dans les 2)… je voudrais  faire une comparaison spatiale des 2 tables et si les polygones sont identiques (st_hausdorffdistance=0), ne rien faire, s’ils ne sont pas identiques injecter les polygones de la table b dans la table a avec les attributs(les 2 tables ont exactement les mêmes champs et dans le même ordre) …
J'ai fait ces 2 requêtes ci-dessous mais elles ne fonctionnent pas (pourtant si je lance insert seul il fonctionne):

select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_intersects(a.the_geom, b.the_geom) is false
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;

ou

select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_hausdorffdistance(a.the_geom, b.the_geom) >0
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;

Sauriez-vous m'aider,

merci,
lea

#14 Re : Général » Pb de requête avec champ geometrie (postgis) » 09/10/2012 09:42:36

lea

Merci pour la réponse ... c'est malheureusement ce que j'avais fait mais le problème de cette solution c'est que le résultat du champ n'est plus une géométrie mais du texte et là ça ne va plus!! Comment récupérer un champs "geometry"?

Lea

#15 Général » Pb de requête avec champ geometrie (postgis) » 08/10/2012 15:18:54

lea
Réponses : 3

Bonjour,

je cherche à faire une requête SQL pour obtenir à partir d'une table existante une vue dans laquelle je dois récupérer obligatoirement le champ clé primaire (gid) et le champ géométrie (the_geom) de la table (là il n'y a aucun doublon) puis ensuite dans le champ 1, j'ai de nombreux enregistrements dont certains sont identiques et que j'aimerais regrouper. Puis je rajoute toujours dans cette même vue le champ2 avec les enregistrements correspondants au champ1 (qui a été regroupé).

J'arrive à obtenir quasiment ce que je veux lorsque je fais la requête 1 sans le champ geometrie mais quand je rajoute ce dernier dans la requête 2, je n'ai plus les regroupements sur le champ1!!
Je dois mal m'y prendre ... savez-vous ce qui cloche dans ma requête?

requête 1 :
create view table1.test as SELECT min(table1.gid) AS gid,table1.champ1,table1.champ2 FROM schema1.table1 group by table1.champ1,table1.champ2; --> ok mais il me manque le champ géométrie

requête 2 :
create view table1.test as SELECT min(table1.gid) AS gid,table1.champ1,table1.champ2, table1.the_geom FROM schema1.table1 group by table1.champ1,table1.champ2, table1.the_geom; --> je n'ai plus le regroupement par même dénomination du champ1! et si je ne déclare pas tous les champs dans le group by ça ne fonctionne pas du tout!

Savez-vous m'aiguiller

Merci

Léa

#16 Général » Requête SQL - POSTGIS » 21/09/2012 12:53:17

lea
Réponses : 1

Bonjour,

J'ai une table avec de nombreux points dont certains endroits montre une densité importante de ces points. Je cherche à faire une requête pour regrouper des points en un seul en fonction de la densité en non d'un centroide. J'ai trouvé la fonction kmeans qui correspondrait à ce que je recherche mais il faut installer le module et je n'ai pas la possibilité de l'installer sur le server où je trouve postgres.
Seriez-vous m'aiguiller?

Merci d'avance,

lea

#17 Re : PL/pgSQL » Enlever les doublons mais valeurs id différentes même pour doublons » 31/08/2012 15:32:47

lea

merci beaucoup. j'étais partie sur ce genre de requête mais avec FIRST au lieu de MIN mais cela ne fonctionnait pas!! je ne connaissais pas le bon nom de la fonction dans postgres!!
Encore merci et bon week-end

Lea

#18 PL/pgSQL » Enlever les doublons mais valeurs id différentes même pour doublons » 31/08/2012 15:02:49

lea
Réponses : 2

Bonjour,

je cherche à faire une requête à partir d'une table existante que je voudrais enregistrer en tant que vue (jusqu'ici il n'y a pas de soucis!!!). Je voudrais regrouper (group by ou distinct) les enregistrements similaires des champs spécifiés. C'est à partir ici que je coince. En fait, les enregistrements sont similaires sauf dans un des champs spécifiés, le champs id (identifiant unique qui est clé primaire dans la table d'origine et j'ai besoin d'un clé primaire pour utiliser ces données).
Un exemple concret pour être plus claire :

table1:
id            couleur            nbre                contour                buffer                forme
-----------------------------------------------------------------------------------------------------------------------------------------------------
1            rouge            14                net                    2                    alpha
2            rouge            2                net                    2                    alpha
3            rouge            5                net                    2                    alpha
4            rouge            5                net                    2                    alpha
5            jaune            16                flou                        3                    beta
6            jaune            8                flou                        3                    beta
7            jaune            20                flou                        3                    beta
8            vert                    5                net                    20                    omega
9            vert                   19                net                    20                    omega
10            bleu                   22                flou                        12                    gamma

Je voudrais faire une requête genre :
CREATE VIEW view1 AS SELECT DISTINCT (buffer), couleur, contour,forme,id  FROM table1;

Pour obtenir le resultat suivant :
View1:
id            couleur                    contour                buffer                forme
-----------------------------------------------------------------------------------------------------------------------------------------------------
1            rouge                    net                    2                    alpha
5            jaune                    flou                        3                    beta
8            vert                        net                    20                    omega
10            bleu                        flou                        12                    gamma


mais malheureusement cette requête me renvoie la table d'origine ce qui est normal car tous le id sont différents!!

Seriez-vous m'aider?

Merci d'avance

Léa

Pied de page des forums

Propulsé par FluxBB