Vous n'êtes pas identifié(e).
Pages : 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
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
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?
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
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
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 ...
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
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!) ...
Super, merci ... je ne connaissais pas la fonction ... merci beaucoup et bonne journée
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
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
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
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
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
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
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
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
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
Pages : 1