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

Antwort per Email an