From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Breaking Path/Polygon Data into Pieces |
Date: | 2006-02-27 22:10:40 |
Message-ID: | 20060227221040.GA58033@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Mon, Feb 27, 2006 at 08:41:52PM +0200, Volkan YAZICI wrote:
> 2 weeks ago, a user in -tr-genel asked for a function to break
> path/polygon type data into pieces. He also told that, it creates a
> bottleneck in the network traffic when they try to receive rows with
> polygon data of thousands of nodes, while it's enough for them to
> have polygons partially.
>
> AFAIK, there doesn't exist such functions in PostgreSQL. (Please
> correct me if I'm wrong.) For this purpose, I've coded two simple
> C procedures:
>
> polygon part(polygon, offset, limit)
> path part(path, offset, limit)
PostGIS has geometry accessors that might work. You'd need to be
using PostGIS geometry types instead of the PostgreSQL types.
http://postgis.refractions.net/docs/ch06.html
Are the following examples anything like what the user in tr-general
was looking for?
postgis=> SELECT AsText(geom) FROM foo;
astext
----------------------------------------------------------
POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,9 1,9 9,1 9,1 1))
(1 row)
postgis=> SELECT AsText(ExteriorRing(geom)) FROM foo;
astext
-------------------------------------
LINESTRING(0 0,10 0,10 10,0 10,0 0)
(1 row)
postgis=> SELECT AsText(InteriorRingN(geom, 1)) FROM foo;
astext
---------------------------------
LINESTRING(1 1,9 1,9 9,1 9,1 1)
(1 row)
postgis=> SELECT n, AsText(PointN(ring, n))
postgis-> FROM (SELECT ExteriorRing(geom) AS ring FROM foo) AS s,
postgis-> generate_series(1, 2) AS g(n);
n | astext
---+-------------
1 | POINT(0 0)
2 | POINT(10 0)
(2 rows)
postgis=> SELECT AsText(MakeLine(PointN(ring, n)))
postgis-> FROM (SELECT ExteriorRing(geom) AS ring FROM foo) AS s,
postgis-> generate_series(1, 2) AS g(n);
astext
----------------------
LINESTRING(0 0,10 0)
(1 row)
postgis=> SELECT AsText(line_substring(ExteriorRing(geom), 0, 0.25))
postgis-> FROM foo;
astext
----------------------
LINESTRING(0 0,10 0)
(1 row)
--
Michael Fuhr
From | Date | Subject | |
---|---|---|---|
Next Message | Jebus | 2006-02-27 22:12:44 | audit tables adding columns |
Previous Message | Jonathan Gardner | 2006-02-27 21:53:43 | Re: Wish: remove ancient constructs from Postgres |