[Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?

Sarah Hoffmann lonvia at denofr.de
Fr Jun 10 20:07:37 UTC 2011


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




Mehr Informationen über die Mailingliste Talk-de