On Thu, Jun 09, 2011 at 06:48:54PM +0000, Sven Geggus wrote:
> Hallo zusammen,
> 
> vielleicht kann ja jemand von euch ein wenig helfen.
> 
> Ich versuche einen SQL Befehl zu basteln, der Mittelpunkt einer
> Fläche ausgibt (ST_PointOnSurface).
> 
> Dazu muss man wohl zuerst aus Punkten eine Fläche machen und dann mit
> hilfe von ST_PointOnSurface den Mittelpunkt der Fläche zu ermitteln.
> 
> 
> osmdb=>  select nodes from ways where id=99382824;
>                           nodes                           
> ----------------------------------------------------------
>  {1149487195,1149487106,1149487674,1149487557,1149487195}
> (1 Zeile)
> 
> Da fängt jetzt mein Problem schon an. "nodes" ist ein bigint[]
> 
> Wie mache ich jetzt ein select für alle diese nodes in der Liste?
> 
> Also folgendes hätte ich gerne:
> 
> * liste der nodes aus Tabelle ways
> * geometrien aller dieser nodes aus Tabelle nodes
> * Polygon aus disen Geometrien (ST_????)
> * ST_PointOnSurface(Polygon)

SELECT ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom))) 
        FROM (SELECT unnest(nodes) 
                            FROM ways WHERE id = 99382824) as w, nodes n 
 WHERE w.unnest = n.id;

aber ich wuerde es eher damit versuchen (geht schneller):

SELECT ST_Centroid(ST_Collect(n.geom))
        FROM (SELECT unnest(nodes) 
                            FROM ways WHERE id = 99382824) as w, nodes n 
 WHERE w.unnest = n.id;

Und vermutlich willst du auch noch in 900913 transformieren.

Sarah

_______________________________________________
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an