[postgis-devel] [PostGIS] #926: ST_GeometryN, ST_PointN (input of array) return set
PostGIS
trac at osgeo.org
Thu Apr 28 05:02:14 PDT 2011
#926: ST_GeometryN, ST_PointN (input of array) return set
-------------------------+--------------------------------------------------
Reporter: robe | Owner: pramsey
Type: enhancement | Status: new
Priority: medium | Milestone: PostGIS 2.0.0
Component: postgis | Version: trunk
Keywords: |
-------------------------+--------------------------------------------------
Thinking about ST_DumpPoints and how it doesn't scale with Line strings.
The problem with ST_GeometryN and ST_PointN is that as Paul noted in IRC,
requires a memory copy of the whole geometry for each call.
See thread - http://logs.qgis.org/postgis/%23postgis.2011-04-27.log
I've had other needs in the past where I needed to explode only a portion
of a geometry but not all. ST_Dump becomes slow because it needs to
return data I don't care about and ST_PointN/ST_GeometryN are too slow too
because if I care about 1000 points of a 100,000 geometry -- memcopy 1000
times is also painful.
Alternative
ST_GeometryN/ST_PointN/ST_InteriorRingN(geom, int[]) returns a set of
geometries and takes an arbitrary 1-dimensional array of index positions.
This has a myriad of utilities -- e.g. I could take a huge line and break
it into multiple segments easily without incurring memory copy penalty.
My linestring dump would then be.
SELECT ST_PointN(geom, ARRAY(SELECT generate_series(1,
ST_NumPoints(geom)));
And of course if I only cared about points from 4 to 6, I would do
which I predict would be really fast even for a 100,000 point linestring
SELECT ST_PointN(geom,[4,5,6]);
Then if we swap out the ST_PointN use in ST_DumpPoints with this new
implementation, it may beat bitnerd's implementation.
http://pastebin.com/MhR4kr3f
And be much less cryptic looking :).
--
Ticket URL: <http://trac.osgeo.org/postgis/ticket/926>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-devel
mailing list