Opened 9 months ago

Last modified 9 months ago

#5663 closed defect

ST_GeometryN cannot access sections of CompoundCurve — at Version 1

Reported by: dbaston Owned by: pramsey
Priority: medium Milestone: PostGIS 3.4.3
Component: postgis Version: 3.4.x
Keywords: Cc:

Description (last modified by dbaston)

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.

Change History (1)

comment:1 by dbaston, 9 months ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.