Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#1978 closed defect (fixed)

STLength of three-point closed circularstrings incorrect

Reported by: pnalos Owned by: pramsey
Priority: medium Milestone:
Component: postgis Version: 2.0.x
Keywords: Cc:


Q: SELECT PostGIS_full_version(); A: "POSTGIS="2.0.0 r9605" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8" LIBJSON="UNKNOWN" RASTER"

Q: select ST_Length(ST_GeomFromText('CIRCULARSTRING(0 0,1 0,0 0)',0)) A: 1.0 ←— incorrect, should be pi

If I split the geometry into two parts: Q: select ST_Length(ST_GeomFromText('CIRCULARSTRING(0.5 -0.5,1 0,0.5 0.5,0 0,0.5 -0.5)',0)) A: 3.14127725093278 ←— correct

Apologies if this has been solved; I don't have the latest release or svn head installed.

Aside: My previous PostGIS ("POSTGIS="1.5.0" GEOS="3.2.0-CAPI-1.6.0" PROJ="Rel. 4.6.1, 21 August 2008" LIBXML="2.7.6" USE_STATS") returns zero for all circularstring length queries I could think of.

Change History (3)

comment:1 by pramsey, 11 years ago

Arg, this is actually a bug in lwcircstring_segmentize! {{{double lwcircstring_length_2d(const LWCIRCSTRING *circ) {

double length = 0.0; LWLINE *line; if ( lwcircstring_is_empty(circ) )

return 0.0;

line = lwcircstring_segmentize(circ, 32); length = lwline_length_2d(line); lwline_free(line); return length;

} }}} Which makes me want to re-write the length function to actually work on arcs…! But since this bug exists back into early pre-history, I'm going to have to track the problem in segmentize instead for now.

comment:2 by pramsey, 11 years ago

Resolution: fixed
Status: newclosed

Fixed in 2.0 at r10256 and trunk at r10257.

For 1.5 it would take a fair bit more work. It it's critical please set up a new ticket against 1.5

comment:3 by pnalos, 11 years ago

For 1.5 it would take a fair bit more work. It it's critical please set up a new ticket against 1.5

Thanks very much. This is certainly not critical for us. Our interest was limited to, "SQL Server 2012 doesn't support closed three-point circularstrings, so we turn those into five-point circularstrings when inserting data. Do we need to do something similar for PostGIS?" The answer is, "No, PostGIS is just fine with three-point closed circularstrings." -Paul Nalos, Safe Software

Note: See TracTickets for help on using tickets.