[PostGIS] #5663: ST_GeometryN cannot access sections of CompoundCurve
PostGIS
trac at osgeo.org
Thu Feb 1 16:47:32 PST 2024
#5663: ST_GeometryN cannot access sections of CompoundCurve
----------------------+---------------------------
Reporter: dbaston | Owner: pramsey
Type: defect | Status: new
Priority: medium | Milestone: PostGIS 3.4.2
Component: postgis | Version: 3.4.x
Resolution: | Keywords:
----------------------+---------------------------
Description changed by dbaston:
Old description:
> ST_NumGeometries reports that the following curve has two sub-geometries:
>
> {{{
> SELECT ST_NumGeometries('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1 0),
> (1 0, 0 1))'::geometry);
> st_numgeometries
> ------------------
> 2
> }}}
>
> However, attempting to access the first section of the curve with
> ST_GeometryN returns the entire CompoundCurve:
>
> {{{
> SELECT ST_AsText(ST_GeometryN('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1
> 0), (1 0, 0 1))'::geometry, 1));
> st_astext
> ------------------------------------------------------
> COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))
>
> }}}
>
> This behavior differs from OGR:
>
> {{{
> from osgeo import ogr
> g = ogr.CreateGeometryFromWkt('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1
> 0), (1 0, 0 1))')
> g.GetGeometryCount()
> # 2
> g.GetGeometryRef(1).ExportToWkt()
> # LINESTRING (1 0,0 1)
> }}}
New description:
ST_NumGeometries reports that the following curve has two sub-geometries:
{{{
SELECT ST_NumGeometries('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1 0),
(1 0, 0 1))'::geometry);
st_numgeometries
------------------
2
}}}
However, attempting to access the first section of the curve with
ST_GeometryN returns the entire CompoundCurve:
{{{
SELECT ST_AsText(ST_GeometryN('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1
0), (1 0, 0 1))'::geometry, 1));
st_astext
------------------------------------------------------
COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))
}}}
This behavior differs from OGR:
{{{
from osgeo import ogr
g = ogr.CreateGeometryFromWkt('COMPOUNDCURVE (CIRCULARSTRING (0 0, 1 1, 1
0), (1 0, 0 1))')
g.GetGeometryCount()
# 2
g.GetGeometryRef(1).ExportToWkt()
# LINESTRING (1 0,0 1)
}}}
I can see an argument that ST_GeometryN is not intended to return sections
of a curve (that must be what #220 proposes to implement), but
ST_NumGeometries and ST_GeometryN should at least be consistent.
--
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/5663#comment:1>
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-tickets
mailing list