[geos-devel] Bug in GEOS polygonizer

Mika Heiskanen mika.heiskanen at fmi.fi
Fri Mar 7 09:10:48 PST 2014


Hi all,

I'm new to GEOS, and this is my first post to this list which I just
subscribed to.

I am quite confident I have found a bug in the GEOS polygonizer.

The problem:

- I have a set of edges which I first polygonize, and then
   call buildGeometry on to get a single multipolygon.

- The last two rings in the multipolygon output should not be
   there, they have already been listed as holes in earlier
   polygons.

Leads:

- The extra rings are listed last in the resulting multipolygon,
   implying they might be on some internal todo-list, but are
   perhaps not correctly removed when added as a hole to the
   multipolygon. This todo-list might be the last geometry
   collection to be added to the resulting multipolygon.

- The second coordinate of the rings is the first coordinate
   of the holes already added. This might imply some internal
   sorting/constructing has been done on the rings but perhaps
   not consistently.

I will try to debug this myself, but since I am completely
new to the code I would appreciate any hints on where to
look. For this purpose I have temporarily made this link available:

   http://beta.fmi.fi/bug.zip

The zip-file contains two files. One named EDGES, containing
about 2000 coordinate pairs forming the resulting polygons by a true
case of contouring temperature over Scandinavia, and
a second file named bug.cpp, a simple test program which uses the
GEOS C++ API and can be compiled in the GEOS source directory as
instructed by the first lines in bug.cpp:

// ./configure  CXXFLAGS="-g -O0" && make
// g++ -std=c++11 -Wno-deprecated-declarations -o bug bug.cpp 
src/.libs/libgeos.a

The test program prints a multipolygon WKT. The last two rings in
it have as their second coordinates:

    664682.9106474313884974 -3956251.4601273220032454
    824358.6671691739466041 -3900967.1810790780000389

The rings are embedded in "(( ))" meaning they are polygons in
a multipolygon. However, if you search backward in the output
the same coordinates appear first in holes embedded in "( )".

I will try to debug this on Monday, until then I'm pretty much
booked. Meanwhile any hints on where to look for the bug would be
appreciated.

This bug seems to occur fairly frequently. The test case covers
only one temperature interval in Scandinavia, the same problem
occurred in a couple of the ~20 temperature intervals I calculated.
The test data was the first one I tried.

Regards,

Mika Heiskanen / Finnish Meteorological Institute


More information about the geos-devel mailing list