On Fri, Jun 10, 2011 at 06:13:06PM +0000, Sven Geggus wrote: > Moin, > > Ich treibe die Frage mal noch weiter. Vielleciht geht es ja > tatsächlich mit einem einzigen query alle flächenhaften microbrewery > POI zu selektieren. > > Momentan geht folgendes: > > Ich selektiere mir alle id die mich interessieren: > > SELECT id FROM ways WHERE (tags ? 'microbrewery') and > (tags->'microbrewery'='yes'); > > Dann mache ich den folgenden request indem ich über alle id > iteriere: > > SELECT astext(ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom)))) > FROM (SELECT unnest(nodes) FROM ways WHERE id = ...) as w, nodes n > WHERE w.unnest = n.id;
Das geht mit etwas Gruppierungsmagie, aber irgendwie wird es dann ineffizient. Die beste Methode ist, sich eine Funktion zu definieren: CREATE FUNCTION make_way_geometry(id bigint) RETURNS geometry AS $$ SELECT ST_MakeLine(n.geom) FROM (SELECT unnest(nodes), id FROM ways w WHERE id = $1) as w, nodes n WHERE w.unnest = n.id $$ LANGUAGE SQL; Dann kannst du ganz bequem schreiben: SELECT id, astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id)))) FROM ways WHERE.... Sarah _______________________________________________ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de