> SELECT Y(ST_AsText(ST_Transform(way, 4326))),
> X(ST_AsText(ST_Transform(way, 4326))),
> Distance(way, (SELECT way FROM planet_osm_point WHERE 
osm_id=582505865))::int,
> amenity || ' ' || name, 'icon.png', '16,16', '0,0'
> FROM planet_osm_point P WHERE (amenity ILIKE 'res%' OR amenity ILIKE
> 'caf%') AND Distance(way, (SELECT way FROM planet_osm_point WHERE
> osm_id=582505865)) < 10000
> ORDER BY 3;
> 
> Ca me retourne des données directement exploitable avec Openlayer mais
> il est certainement possible de faire 100x mieux.
> Suggestions bienvenues

grosso modo c'est pas mal, mais je te conseille : 
- de ne pas faire de mise en forme au niveau SQL, fais le au niveau de ton 
langage afin de générer le fichier pour openlayers sans quoi on n'y comprend 
rien
- limite le nombre de requête imbriquées, on doit pouvoir faire ce que tu veux 
faire sans aucune requête imbriquée
En plus là, elle ne servent pas puisque j'imagine que "chez toi" est un 
concept pas nécessairement dans la base OSM, donc plutôt que de galérer à 
trouver le feu le plus proche de chez toi (582505865) donne directement les 
coordonnées GPS dans ta requête

Sinon, tu peux passer par une requête sur deux fois la même table style :
select name 
from planet_osm_point as p1, planet_osm_point as p2
where
p1.osm_id=l'id du point choisi
and
st_distance(p1.way,p2.way)<bidule

Sinon, voilà ce que j'ai fais en plaçant (6.6 46.52) comme origine des 
recherches :

select name,
round(st_distance(st_transform(way,2154),st_transform('SRID=4326;POINT(6.62 
46.52)',2154))) 
as distance_m 
from planet_osm_point as p where p.amenity='cafe' 
and st_distance(st_transform(way,2154),st_transform('SRID=4326;POINT(6.62 
46.52)',2154))<5000 
order by distance_m 
limit 5;

       name       | distance_m
------------------+------------
                  |        800
 Le Petit-Chene   |        818
 Starbucks        |        833
 Café de Beaulieu |        939
 Starbucks        |        970
(5 lignes)

C'est juste triste que je ne puisse récupérer distance_m comme condition et 
être obligé de répéter mon st_distance (à factoriser dans le langage qui fait 
l'appel à la requête)

-- 
sly
qui suis-je : http://sly.letuffe.org

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

Répondre à