[geos-devel] [GEOS] #1000: behavior of GEOSCoordSeq_isCCW() is unclear when input is not a simple closed curve

GEOS geos-trac at osgeo.org
Wed Oct 23 11:51:20 PDT 2019


#1000: behavior of GEOSCoordSeq_isCCW() is unclear when input is not a simple
closed curve
------------------------+--------------------------
 Reporter:  sirsigurd   |      Owner:  geos-devel@…
     Type:  defect      |     Status:  new
 Priority:  major       |  Milestone:
Component:  Default     |    Version:  3.7.0
 Severity:  Unassigned  |   Keywords:
------------------------+--------------------------
 Here's GEOSCoordSeq_isCCW() doc from C API header:

 {{{
 /*
  * Check orientation of a CoordinateSequence and set 'is_ccw' to 1
  * if it has counter-clockwise orientation, 0 otherwise.
  * Return 0 on exception, 1 on success.
  */
 extern int GEOS_DLL GEOSCoordSeq_isCCW_r(GEOSContextHandle_t handle,
                                          const GEOSCoordSequence* s,
                                          char* is_ccw);
 }}}

 As I understand from [https://en.wikipedia.org/wiki/Curve_orientation
 Wikipedia], 'orientation' is defined only for simple closed curves
 (hereafter referred to as SCC).

 So from my perspective GEOSCoordSeq_isCCW() could follow one these
 approaches for  input which is not SCC:

 1. Orientation is defined only for SCC, so if input is not SCC, it can't
 be CCW-oriented curve (is_ccw = 0).

 2. Orientation is defined only for SCC, so if input is not SCC, it's
 invalid (error code is returned)

 Currently GEOSCoordSeq_isCCW() doesn't follow any of these approaches
 consistently. If coordinate sequence has less than 4 points error code is
 returned. At later stage if it turns out that there are less than 3
 distinctive points is_ccw is set to 0.

-- 
Ticket URL: <https://trac.osgeo.org/geos/ticket/1000>
GEOS <http://trac.osgeo.org/geos>
GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS).


More information about the geos-devel mailing list