[OSM-dev-fr] Question noob postgis

2012-02-22 Par sujet yvecai
J'ai pris la grande décision de me frotter un peu à postgis, mais j'ai 
un peu de mal en sql, alors c'est l'occasion d'animer un peu cette liste.


Dans une base 'osm2pgsql', je recherche les relations qui partagent un 
bout de chemin avec, disons la relation 1347356.
Je n'arrive pas à comprendre comment faire fonctionner les fonctions de 
comparaison.


   SELECT a.osm_id, b.osm_id
   FROM planet_osm_line a, planet_osm_line b
   WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);

   ERREUR:  erreur de syntaxe sur ou près de « select »
   LIGNE 3 : WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);


Quelqu'un pour me mettre le pied à l'étrier?

Yves
___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr


Re: [OSM-dev-fr] Question noob postgis

2012-02-22 Par sujet Frédéric Rodrigo

On 22/02/2012 21:54, yvecai wrote:

J'ai pris la grande décision de me frotter un peu à postgis, mais j'ai
un peu de mal en sql, alors c'est l'occasion d'animer un peu cette liste.

Dans une base 'osm2pgsql', je recherche les relations qui partagent un
bout de chemin avec, disons la relation 1347356.
Je n'arrive pas à comprendre comment faire fonctionner les fonctions de
comparaison.

SELECT a.osm_id, b.osm_id
FROM planet_osm_line a, planet_osm_line b
WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);

ERREUR: erreur de syntaxe sur ou près de « select »
LIGNE 3 : WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);


Ton sql n'est pas bien structuré :

SELECT
a.osm_id,
b.osm_id
FROM
planet_osm_line AS a,
planet_osm_line AS b
WHERE
b.osm_id=-1347356 AND
ST_overlaps(a.way, b.way)
;


Ou en plus jolie :

SELECT
a.osm_id,
b.osm_id
FROM
planet_osm_line AS a
JOIN planet_osm_line AS b ON
ST_overlaps(a.way, b.way)
WHERE
b.osm_id=-1347356
;

___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr


Re: [OSM-dev-fr] Question noob postgis

2012-02-22 Par sujet yvecai

Le 22/02/2012 22:24, Frédéric Rodrigo a écrit :

On 22/02/2012 21:54, yvecai wrote:

J'ai pris la grande décision de me frotter un peu à postgis, mais j'ai
un peu de mal en sql, alors c'est l'occasion d'animer un peu cette 
liste.


Dans une base 'osm2pgsql', je recherche les relations qui partagent un
bout de chemin avec, disons la relation 1347356.
Je n'arrive pas à comprendre comment faire fonctionner les fonctions de
comparaison.

SELECT a.osm_id, b.osm_id
FROM planet_osm_line a, planet_osm_line b
WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);

ERREUR: erreur de syntaxe sur ou près de « select »
LIGNE 3 : WHERE ST_overlaps(a.way,select b.way where 
osm_id=-1347356);


Ton sql n'est pas bien structuré :

SELECT
a.osm_id,
b.osm_id
FROM
planet_osm_line AS a,
planet_osm_line AS b
WHERE
b.osm_id=-1347356 AND
ST_overlaps(a.way, b.way)
;


Ou en plus jolie :

SELECT
a.osm_id,
b.osm_id
FROM
planet_osm_line AS a
JOIN planet_osm_line AS b ON
ST_overlaps(a.way, b.way)
WHERE
b.osm_id=-1347356
;

___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr


Entre-temps j'avais trouvé:
SELECT a.name, a.osm_id
FROM planet_osm_line a, (select way from planet_osm_line where 
osm_id=-1354395) as b

WHERE ST_intersects(a.way,b.way);

Mais bien moins joli, je te l'accorde !

Yves

___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr


Re: [OSM-dev-fr] Question noob postgis

2012-02-22 Par sujet sly (sylvain letuffe)
Le mercredi 22 février 2012 21:54:48, yvecai a écrit :
 J'ai pris la grande décision de me frotter un peu à postgis, 

Tu ne le regrettera pas !

 mais j'ai
 un peu de mal en sql, alors c'est l'occasion d'animer un peu cette liste.

Ouais ! ça motivera peut-être certains (dont moi ;-) ) à se bouger et à venir 
ici plutôt que d'encombrer talk-fr

 Dans une base 'osm2pgsql', je recherche les relations qui partagent un
 bout de chemin avec, disons la relation 1347356.
 Je n'arrive pas à comprendre comment faire fonctionner les fonctions de
 comparaison.
 
 SELECT a.osm_id, b.osm_id
 FROM planet_osm_line a, planet_osm_line b
 WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);
 
 ERREUR:  erreur de syntaxe sur ou près de « select »
 LIGNE 3 : WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);
 
 
 Quelqu'un pour me mettre le pied à l'étrier?

Attention, je ne me veux ni condescendant, ni exaspérant, ni malpoli, c'est 
juste pour adapter mes réponses à ton niveau actuel :

Tu as déjà pratiqué SQL dans un contexte non GIS ou pas encore ?


 WHERE ST_overlaps(a.way,select b.way where osm_id=-1347356);
tu ne peux avoir 2 where la bonne syntaxe, si on remet les ( ) au bon 
endroit est :
where ST_overlaps(a.way,select b.way) and (osm_id=-1347356);


Au delà de la syntaxe que je viens de corriger, il faut maintenant voir si 
chaque champ est bien défini et bien unique
si tu re-tentes ta requête, il devrait te dire osm_id est ambigue car il ne 
sait pas de quel table tu veux a ou b

Donc :

where ST_overlaps(a.way,select b.way) and (b.osm_id=-1347356);

Je sais plus pourquoi, mais je crois que j'utiliserais st_intersects plutôt 
que st_overlaps


Et au cas où tu ne connaisses pas, la bible :
http://www.postgis.org/docs/reference.html


-- 
sly (sylvain letuffe)

___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr