[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