## Changes in 3.11.0 2022-xx-xx - New things: - Fixes/Improvements: - Changes: ## Changes in 3.10.0 2021-10-20 - New things: - CAPI: GEOSDistanceWithin, GEOSPreparedDistanceWithin (#1124, Sandro Santilli) - Output WKT using positional precision with the ryu library (#868, Paul Ramsey) - geosop CLI for GEOS (Martin Davis) - Full doxygen of the C-API (Paul Ramsey) - GeometryFixer class for validity enforcement (Martin Davis, Paul Ramsey) - CAPI: GEOSDensify (Brendan Ward) - CAPI: GEOSCoordSeq_copyFromArrays, GEOSCoordSeq_copyFromBuffer, GEOSCoordSeq_copyToArrays, GEOSCoordSeq_copyToBuffer (Daniel Baston) - CAPI: GEOSMakeValidWithParams new validity enforcement approach from https://github.com/locationtech/jts/pull/704, uses GeometryFixer (Paul Ramsey, Martin Davis) - CAPI: GEOSWKBWriter_getFlavor, GEOSWKBWriter_setFlavor support outputting ISO or Extended WKB flavors (#466, Paul Ramsey) - CAPI: GEOSConstrainedDelaunayTriangulation, builds a constrained triangulation of an input Polygon or MultiPolygon, returning a GeometryCollection(Polygon) of the triangles. - Fixes/Improvements: - Preserve ordering of lines in overlay results (Martin Davis) - Check for invalid geometry before fixing polygonal result in Densifier and DPSimplifier (Martin Davis) - Fix overlay handling of flat interior lines (JTS-685, Martin Davis) - Fix IsValidOp to correctly report invalid nested MultiPolygons (#1112, Martin Davis) - Fix BufferOp to avoid artifacts in certain polygon buffers (#1101, Martin Davis) - Fix IsValidOp to correctly report certain kinds of invalid LinearRings (Martin Davis) - Improve STRtree performance through TemplateSTRtree implementation (Daniel Baston) - Fix DiscreteFrechetDistance to use initial points of input lines (#1128, Martin Davis) - Changes: - Autoconf build system is dropped in favour of CMake See README.md and INSTALL.md for examples of usage - Libtool is no longer used for in favour of CMake Therefor libgeos.la is no longer built/installed - #1094, #1090: Drop inlines.cpp to address duplicate symbols on many platforms (Regina Obe) - GH475: Do not return NaN from GEOSProjectNormalized_r (Paul Ramsey) - GH442: BufferOp now returns unique_ptr result (Paul Ramsey) ## Changes in 3.9.0 2020-12-09 - New things: - OverlayNG engine from JTS, now the default (Martin Davis, Paul Ramsey) - MaximumInscribedCircle and LargestEmptyCircle (JTS-530, Paul Ramsey) - CAPI: Fixed precision overlay operations (Sandro Santilli) - CAPI: GEOSPreparedNearestPoints (#1007, Sandro Santilli) - CAPI: GEOSPreparedDistance (#1066, Sandro Santilli) - CAPI: GEOSGeom_setPrecision uses OverlayNG (Paul Ramsey) - SimpleSTRTree spatial index implementation (Paul Ramsey) - Add support for pkg-config for GEOS C API (#1073, Mike Taves) - Fixes/Improvements: - Stack allocate segments in OverlapUnion (Paul Ramsey) - Improve performance of GEOSisValid (Dan Baston) - Update geos-config tool for consistency and escape paths (https://git.osgeo.org/gitea/geos/geos/pulls/99) changes mostly affect CMake MSVC builds (#1015, Mike Taves) - Testing on Rasberry Pi 32-bit (berrie) (#1017, Bruce Rindahl, Regina Obe) - Replace ttmath with JTS DD double-double implementation (Paul Ramsey) - Fix bug in DistanceOp for geometries with empty components (#1026, Paul Ramsey) - Remove undefined behaviour in CAPI (#1021, Greg Troxel) - Fix buffering issue (#1022, JTS-525, Paul Ramsey) - MinimumBoundingCircle.getMaximumDiameter fix (JTS-533, Paul Ramsey) - Changes: - Drop SWIG bindings, including for Ruby and Python (#1076, Mike Taves) ## Changes in 3.8.0 2019-10-10 - New things: - CAPI: GEOSBuildArea (#952, Even Rouault) - CAPI: GEOSMakeValid (#952, Even Rouault) - CAPI: GEOSPolygonize_valid (#727, Dan Baston) - CAPI: GEOSCoverageUnion (Dan Baston) - CAPI: GEOSCoordSeq_setXY, GEOSCoordSeq_setXYZ, GEOSCoordSeq_getXY, GEOSCoordSeq_getXYZ (Dan Baston) - CAPI: GEOSMinimumBoundingCircle (#735) - CAPI: GEOSGeom_createPointFromXY (Dan Baston) - Improvements: - Improve overall performance by reducing of heap allocations (Dan Baston) - Improve performance and robustness of GEOSPointOnSurface (Martin Davis) - Improve performance of GEOSPolygonize for cases with many potential holes (#748, Dan Baston) - Support extended precision calculations (ttmath) and port JTS improvements related to extended precision (Paul Ramsey, Mateusz Loskot) - Improve performance of GEOSPolygonize for cases with many or complex shells (Dan Baston, Martin Davis) - Improve performance of Delaunay triangulations / Voronoi Diagrams (Dan Baston) - Improve performance of prepared geometry operations (Dan Baston) - Improve robustness of Delaunay triangulations (Paul Ramsey, Martin Davis) - Improve performance of unary union for lines (Dan Baston) - Improve general predicate, overlay, and buffer performance (Dan Baston, Paul Ramsey) - Improve cascaded union performance (Paul Ramsey, Martin Davis) - Allocate default GeometryFactory singleton on the stack (Sandro Mani) - Harmonize XML tests with JTS and harmonize cmake/autoconf test running (Paul Ramsey) - CMake modernization (Mateusz Loskot, Paul Ramsey, Dan Baston) - Return unique_ptr from most methods that produce a new geometry (Dan Baston) - Changes: - Constructive geometry functions in CAPI now preserve SRID of input arguments in output (#896) ## Changes in 3.7.2 2019-05-02 - Bug fixes / improvements - Envelope constructor using strtod (#875 Paul Ramsey) - Failure in CMake for OSX Framework (#936 Paul Ramsey) - Polygon build failure in Overlay difference (#789 Paul Ramsey) - Invalid union result from valid polygon inputs (#838) ## Changes in 3.7.1 2018-11-29 - Bug fixes / improvements - Fix crash in GEOSCoordSeq_isCCW with empty coordseq (#927, Sergey Fedoseev) - Fix crash in GEOSInterpolate with empty LineString (#926, Sergey Fedoseev) - Fix crash in GEOSUnaryUnion with empty LineString (#928, Sergey Fedoseev) - Fix memory leak in SIRtree::insert (#919, Dan Baston) - Reduce required autoconf to 2.63 (#56, John Harvey) - Fix incorrect return values on error from GEOSLength GEOSisValidDetail (#941, Dan Baston) ## Changes in 3.7.0 2018-09-10 - New things: - CAPI: GEOSDistanceIndexed (#795, Dan Baston) - CAPI: GEOSCoordSeq_isCCW (#870, Dan Baston) - CAPI: GEOSGeom_getXMin, GEOSGeom_getXMax, GEOSGeom_getYMin, GEOSGeom_getYMax (#871, Dan Baston) - CAPI: GEOSFrechetDistance (#797, Shinichi SUGIYAMA) - CAPI: GEOSReverse (#872, Dan Baston) - CAPI: GEOSSegmentIntersection (#873, Dan Baston) - CAPI: GEOSGeomGetZ (#581, J Smith) - Improvements - Interruptible snap operation (Paul Ramsey) - Numerous packaging, doc, and build changes (Debian group: Bas Couwenberg, Francesco Paolo Lovergine) - C++ API changes: - Require defining USE_UNSTABLE_GEOS_CPP_API for use without warnings. - Make C++11 required (Mateusz Loskot) - Use C++11 unique_ptr, nullptr, and override constructs (Mateusz Loskot) - C++11 standard delete on noncopyable (#851, Vicky Vergara) - Fix CommonBits::getBit to correctly handle i >= 32 (#834, Kurt Schwehr) ## Changes in 3.7.0rc1 2018-08-19 Fixes / enhancements since 3.7.0beta2 - Avoid segfault when querying empty tree (#730, framm) - Collection with Empty components crashes overlay (#782, Dan Baston) - Allow static library with C API for CMake builds (#878, Dakota Hawkins) ## Changes in 3.7.0beta2 2018-08-06 Fixes since 3.7.0beta1 - Fix infinite loop in GEOSClipByRect (#865, Dan Baston) - Make GEOSException inherit from std::runtime_error to address clang warnings (Dan Baston) - Add missing CMake files to tarball (#895, Regina Obe) ## Changes in 3.7.0beta1 2018-06-25 See 3.7.0 latest notes ## Changes in 3.7.0alpha 2018-06-14 See 3.7.0 notes ## Changes in 3.6.1 2016-12-24 - Bug fixes / improvements - Fix GEOSSTRtree_nearest_r signature and add implementation (#796) - Fix --static-clibs and --static-cclibs returns from geos-config - Fix WKB representation of empty polygon (#680). - Fix empty GEOSSimplify return on inner ring collapse (#741) ## Changes in 3.6.0 2016-10-25 - Important / Breaking Changes: - The PHP binding moved to its own repository: http://git.osgeo.org/gogs/geos/php-geos (#765) - New things: - CAPI: GEOSGeom_{get,set}UserData (Rashad Kanavath) - CAPI: GEOSGeom_{set,get}Precision (#713) - CAPI: GEOSMinimumRotatedRectangle and GEOSMinimumWidth (#729, Nyall Dawson) - CAPI: GEOSSTRtree_nearest (#768, Dan Baston) - CAPI: GEOSMinimumClearance and GEOSMinimumClearanceLine (#776, Dan Baston) - C++ API changes: - Automatic memory management for GeometryFactory objects ## Changes in 3.5.0 2015-08-16 - New things: - Voronoi API (#627) - PHP: Geometry->normalize method - GEOS_USE_ONLY_R_API macro support (#695) - PHP: WKBReader->read() & WKBWriter::write() methods (Benjamin Morel) - GEOSClipByRect (#699, Mika Heiskanen, Sandro Santilli) - CAPI: thread-safe message handling API (#663, Pepijn Van Eeckhoudt) - Improvements: - Speed-up intersection and difference between geometries with small bounding box overlap. - CAPI: add MULTILINESTRING support for GEOSisClosed (Benjamin Morel) - C++ API changes: - Added no-parameter CoordinateSequenceFactory::create method (Sandro Mani) ## Changes in 3.4.2 2013-08-25 - Bug fixes / improvements - Use a double for PrecisionModel scale, avoiding overflows should fix 32-bit regression failures (#652) - isnan workaround OS detection missing NetBSD, DragonFly, Sun nuance (#650) - Do not distribute platform.h and version.h, but install both (#601) - Non-standard ChangeLog file in 3.4.0 and 3.4.1 releases (#654) - new travis bot (#657) - accept multiple Nan representations (#656) ## Changes in 3.4.1 2013-08-17 - Bug fixes / improvements - Assertion failure snapping line to points of rectangle smaller than tolerance (#649) - Can't build using cmake with tar ball (#644) ## Changes in 3.4.0 2013-08-11 - New things: - Delaunay Triangulation API (#487, #565, #570, #567) - Interruptibility API (C and C++) - CAPI: GEOSNode (#496) - PHP: Geometry->node - GeometryPrecisionReducer class (#496, #526) - BufferInputLineSimplifier header exposed (#548) - New Centroid class supporting mixed geometry components (#612) - io::Writer::reserve() method - CAPI: GEOSNearestPoints - Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497) - Early bail out of overlay exception if input is invalid - C++ API changes: - New noding::GeometryNoder class - Added BufferOp::setSingleSided - Signature of most functions taking a Label changed to take it by reference rather than pointer. - Signature of most functions taking an IntersectionMatrix changed to take it by reference rather than pointer. - GraphComponent::label is now a Label value (from a pointer) - NodedSegmentString takes ownership of CoordinateSenuence now - io::Writer's toString() returns by const ref, write() takes a const ref - Unify prototypes of WKTReader and WKBReader constructor (#310) - GeometryCollection::computeEnvelopInternal and GeometryCollection::compareToSameClass are marked virtual (#478) - Bug fixes / improvements - A point interpolated from a line does not always intersect the same line (#323) - Port ConvexHull robustness fix from JTS-1.13 (#457) - Improve Overlay robustness by reducing input precision on topology exception and by refusing to accept unnoded output (#459) - Improve Buffer robustness by reducing input precision on topology exception (#605) - Mismatch segment sides in OffsetCurveBuilder (#633 ) - Fixed Linear Referencing API to handle MultiLineStrings consistently by always using the lowest possible index value, and by trimming zero-length components from results (#323) - Fixed CMake configuration to set correct SOVERSION (current - age) - Fix EMPTY return from single-point lines and zero-length polygons (#612) - CMakeLists.txt, tools/geos_svn_revision_cmake.h.in: Add geos_svn_revision.h generator to CMake config (#643) - Makefile.vc 'clean' step leaks obj files (#607) ## Changes in 3.3.9 2013-09-04 - Bug fixes / improvements - Fix OffsetCurve op in presence of duplicated vertices (#602) - Fix LineSegmentVisitor copy ctor (#636) - Fix area boundary return from GEOSPointOnSurface (#623) - Speedup GEOSWKBReader_read (#621) - Fix RobustLineIntersector handling of invalid intersection points (#622) - Reduce likelyhood of invalid output from snap operation (#629, #501) - Reduce memory fragmentation of prepared Polygon/Point intersection op - Fix mingw64 compile (#630) - Fix bug in HotPixel constructor (#635) - Fix install location of linearref headers (#624) - Fix multi-geometry constructor to drop SRID from components (#583) ## Changes in 3.3.8 2013-02-28 - Bug fixes / improvements - IsValidOp: throw proper error on nested shells (#608) - Fix header guards (#617, #618, #619) - WKTWriter::appendCoordinate optimisation - Fix centroid computation for collections with empty components (#582) ## Changes in 3.3.7 2013-01-22 - Bug fixes / improvements - Fix abort in RightmostEdgeFinder (#605) - Do not force precision reduction below 6 significant digits while trying to obtain a valid Buffer output (#605) - Fix GEOSPointOnSurface with zero-length linestring (#609) - Fix EMPTY return from zero-area polygon (#613) - Segfault from symdifference (#615) ## Changes in 3.3.6 2012-11-15 -- that's Post-GIS day ! - Bug fixes / improvements - Add support for testing with phpunit 3.6 (not loosing support for 3.4) - Segfault from intersection (#586, #598, #599) ## Changes in 3.3.5 2012-06-25 - Bug fixes / improvements - Correctly increment CAPI lib version from 3.3.3 (#558) - Port robustness fix to CentroidArea (#559) - Always return POINT from GEOSGetCentroid, even for EMPTY (#560) - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561) ## Changes in 3.3.4 2012-05-31 - Bug fixes / improvements - Do not abort on NaN overlay input (#530) - Reduce CommonBitsRemover harmful effects during overlay op (#527) - Better cross-compiler support (#534) - Enable overlay ops short-circuits (#542) - Envelope-based short-circuit for symDifference (#543) - Fix support for PHP 5.4 (#513) - Fix TopologyPreservingSimplifier invalid output on closed line (#508) - Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545) ## Changes in 3.3.3 2012-04-01 - Bug fixes / improvements - Fix simplification of collections with empty items (#519) - Fix MSVC compilation of ambiguous log() call (#506) - Fix CMake issues with std:: namespace detection (#493) ## Changes in 3.3.2 2012-01-05 - Bug fixes / improvements - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489) - Missing versions update in CMake configuration (#490) - Fix noding of self-intersecting lines through UnaryUnion (#482) - Fix handling of collapsed edges skipping in BufferOp (#494) - Print up to 18 digits of precision for TopologyException points - Fix noding with reduced precision in Buffer operation (#473) - Fix HotPixel original point invalidation (#498) - Fix CascadedPolygonUnion to discard non-polygonal components (#499) - Improve buffer robustness by reverting to non-snaprounding noder (#495) - Fix C++11 build by avoiding std::pair (#491) - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497) - Apply shoelace formula for area calculation (#485) - Fix default initialization issue for clang (#500) - Improve overlay robustness by fixing areal validity on snapping (#488) ## Changes in 3.3.1 2011-09-27 - Bug fixes / improvements - Fix memory leak on invalid geometry in InteriorPointArea (#475) - ValidOp abort in presence of 2 touching holes forming an island (#449) - Enable prepared intersects operation for points - Fortify suspicious code found by static analysis tools - Fix for SOLARIS build (#461) - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454) - Fix Geometry::clone to copy SRID (#464) - Fix for clang builds (#463) - Fix out-of-place builds for python binding (#332) and regress testing - Fix OS X framework cmake build (#385) ## Changes in 3.3.0 2011-05-30 - New things: - CAPI: GEOSBufferWithParams (allows single sided buffers) - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows passing flags. - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection - CAPI: GEOSGeom_extractUniquePoints - CAPI: GEOSGetGeometryN support for single geometries - CAPI: GEOSPolygonize_full to return all informations computed by the polygonizer - CAPI: GEOSOrientationIndex - CAPI: GEOSSharedPaths to find shared paths and their orientation - CAPI: GEOSSnap - CAPI: GEOSRelatePatternMatch - CAPI: GEOSCovers, GEOSCoveredBy (#396) - CAPI: GEOSRelateBoundaryNodeRule (#399) - CAPI: GEOSGeom_getCoordinateDimension() (#311) - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292) - PHP: new PHP5 bindings based on CAPI - Semantic C++ API changes: - Geometry inheritance chain changed to introduce Puntal, Lineal and Polygonal classes (virtual inheritance introduced) - Polygonizer::getInvalidRingLines retains ownership of vector elements - Geometry::isWithinDistance method is now const - Polygonizer::getCutEdges returns by const ref - Polygonizer::getDangles returns by const ref - Empty LinearRings are closed by definition - Bug fixes / improvements - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs - Invalid compound geometries reported as valid (#333) - Return up to 15 digits of precision from GEOSisValidReason_t (#329) - CAPI: do not leak contexts when using the non-reentrant interface - Fix duplicated dangles returned by Polygonizer - Fix SnapIfNeededOverlayOp to throw the originating exception - Fixed LineMerger to skip lines with only a single unique coordinate - Fix NodedSegmentString to handle zero-length line segments correctly (via safeOctant) - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly - Added illegal state check in LineSegment::pointAlongOffset() - Improved performance of RectangleIntersects by always using segment-scanning and refining SegmentIntersectionTester - Reduce memory use in PreparedGeometry predicates (#342) - Fix infinite loop in RobustDeterminant with nan/inf input (#357) ## Changes in 3.2.0 2009-12-14 - Add Single-sided buffer operation - JTS-1.10 sync ... - Drastically improved Buffer speed (20x for a case in testsuite) - Improved EdgeList duplicate edge finding - Added algorithm::distance package - Added algorithm::Angle class - Added algorithm::BoundaryNodeRule class - IsSimpleOp can now return non-simple location coordinate - DistanceOp can now check for 'within distance' predicate (earlier exit) - MultiPolygon::getBoundary always return MultiLineString, also when the result is the EMPTY geometry. - Various bug and leak fixes, optimizations - Replace MarkupSTL with tinyXML ## Changes in 3.1.0 - PreparedGeometry operations for very fast predicate testing. - Intersects() - Covers() - CoveredBy() - ContainsProperly() - Easier builds under MSVC and OpenSolaris - Thread-safe CAPI option - IsValidReason added to CAPI - GEOSPolygonizer_getCutEdges added to CAPI - CascadedUnion operation for fast unions of geometry sets - Numerous bug fixes. http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority ## Changes in 3.0.0 These are mostly ABI breaking changes. In few cases the API also changed, but the most external one (the documented one) should be unchanged. - New things: - Added geom::BinaryOp class performing a binary operation using different heuristics to reduce probability of robustness issues. Both C-API and XMLTester now use this class for binary operations. - Added covers() and coveredBy() predicates to Geometry class - Added overlay::overlayOp() adapter class - Added GEOSSimplify() and GEOSTopologyPreserveSimplify() to the C API - Added closed ring checks in IsValidOp - Multi-input support in XMLTester - HEXWKB I/O - Envelope(string) ctor - Ruby interface - New ShortCircuitedGeometryVisitor class - New operation/predicate package - Added CGAlgorithms::isPointInRing() version working with Coordinate::ConstVect type (faster!) - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence class. - Moved GetNumGeometries() and GetGeometryN() interfaces from GeometryCollection to Geometry class. - New planarSubgraph class - New ConnectedSubgraphFinder class. - New LineSequencer class - New WKTWriter::toLineString and ::toPoint convenience methods - New IsValidOp::setSelfTouchingRingFormingHoleValid method - New WKTWriter::toLineString and ::toPoint convenience methods - New IsValidOp::setSelfTouchingRingFormingHoleValid method - New Envelope::centre() - New Envelope::intersection(Envelope) - New Envelope::expandBy(distance, [ydistance]) - New LineString::reverse() - New MultiLineString::reverse() - New Geometry::buffer(distance, quadSeg, endCapStyle) - New SnapRounding code - New size() and operator[] interfaces to CoordinateSequence - New ScaledNoder class - New unit tests (make check rule) - Optimizations: - WKT parser speedup - Function inlining - Coordinate copies reduction - Heap allocations reduction - More classes made final - Better use of standard containers - Use of singletons when appropriate - Removed many function calls in loops' end conditions - Improved XMLTester output and user interface - Improved memory use in geos::geom::util::PolygonExtractor - Ported JTS-1.7 version of ConvexHull with big attention to memory usage optimizations. - Changed CoordinateArrayFilter to reduce memory copies - Changed UniqueCoordinateArrayFilter to reduce memory copies - Added rectangle-based optimizations of intersects() and contains() ops - Inlined all planarGraphComponent class - More iterators returning methods and inlining in planargraph. - Obsoleted toInternalGeometry/fromInternalGeometry - Improved buffering speed and robustness by using Snap Rounding - Semantic changes - SegmentString: getCoordinates() doesn't return a clone anymore, getCoordinatesRO() obsoleted. - JTS packages mapped to geos:: sub-namespaces - Geometry::getInteriorPoint() returns NULL if called against an EMPTY geom - LineString::get{Start,End}Point return NULL for EMPTY geoms - GEOSException is now derived by std::runtim_exception and thrown by const reference. - Geometry constructors made protected, to force use of a GeometryFactory. - Correctness: - More const-correct signatures - Stronger methods typing (removed some void * args). - Changed index-related funx signatures to use size_t rather then int - More const-correctness in Buffer "package" - Bugfix in LineString::getCoordinate() failing to return NULL from getCoordinat() when empty. - Use unsigned int for indexes and sizes. - Layout changes: - Namespaces mapping JTS packages - Renamed classes after JTS names (namespaces use made this possible w/out name clashes) - Splitted headers, for build speedup and possible API reduction. - Moved source/bigtest and source/test to tests/bigtest and test/xmltester - Moved C-API in it's own top-level dir capi/ - Reworked automake scripts to produce a static lib for each subdir and then link all subsystem's libs togheter - Renamed DefaultCoordinateSequence to CoordinateArraySequence. - Renamed OverlayOp opcodes by prepending the 'op' prefix, and given the enum a name (OpCode) for type-safety. - Bug fixes: - Fixed bug causing redundant linestrings to be returned in the result of overlaying polygons containing touching holes (#13) - Fixed integer conversion bug - Fixed PointLocator handling of LinearRings - Added missing ::clone() methods for Multi* geoms - (Partial) Detailed list of changes: - Changed SegmentNode to contain a *real* Coordinate (not a pointer) to reduce construction costs. - Changed geomgraph nodeMap to use Coordinate pointers as keys - Envelope destructor made non-virtual to give compiler more static binding options. - Changed BufferSubgraph::computeDepths to use a set instead of a vector for checking visited Edges. - Made LineIntersector a concrete type - Node::isIncidentEdgeInResult() method made virtual - Const-correct signatures in LineMerger package - Changed operation/valid/*NestedRingTester classes interface to use Coordinate pointers instead of copies. - Changed EdgeIntersectionList to use a set instead of a vector - Changed DepthSegment to store a real Coordinate rather then a pointer. - Changed SubgraphDepthLocater to store real containers rather then pointers. - Changed BufferSubgraph to store a real RightmostEdgeFinder and real containers rather then pointers. - CoordinateSequence API changes: - point index and size related functions use unsigned int rather then int - Changed EdgeEndStar to maintain a single container for EdgeEnds - Changed PlanarGraph::addEdges to take a const vector by ref rathern then a non-const vector by pointer - Changed EdgeList::addAll to take a const vector by ref rather then a non-const vector by pointer - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *) const to CoordinateSequence - LineBuilder::lineEdgesList made a real vector, rather then pointer (private member) - SegmentString::eiList made a real SegmentNodeList, rather then a pointer (private member) - Removed coordinate copies in ElevationMatrix::elevate - Changed CoordinateFilter interface to have a const method for filter_rw, updated interfaces using this to take const CoordinateFilter (apply_rw). ## Changes in 2.2.4 - Added version.in.vc to distribution ## Changes in 2.2.1 - Support for MingW builds - Bugfix in Polygonizer chocking on invalid LineString inputs - CAPI: small leak removed in GEOSHasZ() ## Changes in 2.2.0 - Performance improvement in OverlayOp::insertUniqueEdge() - CoordinateSequence copy removal in EdgeRing - Minor memory allocation improvements - Higher dimensions interface for CoordinateSequence - Added getCoordinatesRO for Point class - NEW WKB IO - NEW Simplified and stabler C API ## Changes in 2.1.4 - Severe BUGFIX in BufferSubgraphGT and other functions used as StrictWeakOrdering predicates for sort() ## Changes in 2.1.3 - win32/mingw build support - Segfault fix in LinearRing and LineString constructors - Segfault fix in Polygonizer - XMLTester installed by default - XMLTester code cleanup - Fixed handling of collection input in GeometryFactory::buildGeometry - Added shortcircuit test for Union operation - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing() - Performance improvements in CGAlgorithms::isOnLine() - Other minor performance improvements - New Node::isIncidentEdgeInResult() method - OverlayOp's PointBuilder performance improvement by reduction of LineIntersector calls. - Optimizations in Buffer operation - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert ## Changes in 2.1.2 - Segfault fix in Point::isEmpty - Mem Leak fix in OffsetCurveBuilder::getRingCurve - Bugfix in LineSegment::reverse - Added multipolygon buffering test in source/test/testLeaksBig - Ported JTS robustness patch for RobustLineIntersector - Removed useless Coordinate copies in OverlayOp::mergeZ() - Avoided throws by IsValid on invalid input - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream instead of sprintf) - Better support for older compilers (Polygonizer::LineStringAdder friendship) - Removed useless Coordinate copies in CGAlgorithms::isOnLine() - Added support for polygonize and parametrized buffer tests in XMLTester - Fixed support for --includedir and --libdir - Fixed Z interpolation in LineIntersector - Handled NULL results from getCentroid() in XMLTester - Segfault fix in (EMPTY)Geometry::getCentroid() - Made polygon::getBoundary() always OGC-valid (no LinearRings) - Input checking and promoting in GeometryFactory::createMultiLineString() - Segfault fix in GeometryEditor::editPolygon() ## Changes in 2.1.1 - Fixed uninitialized Coordinate in TopologyException - Added install of version.h, platform.h and timeval.h - Memleak fix in PolygonizeGraph - Memleak fix in OverlayOp - Compiler warnings removal - Cleaner w32 build - Z interpolation in overlay operations - Debian package build scripts ## Changes in 2.1.0 - Added Polygonizer and LineMerger classes. - python wrapper examples - General cleanup / warnings removal - cleaner win32 / older copilers builds - Reduced heap allocations - debian package builder scripts - reduction of standard C lib headers dependency - Z support in overlay operations. ## Changes in 2.0.0 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList renamed to DefaultCoordinateSequence to reflect JTS changes. DefaultCoordinateSequenceFactory and CoordinateSequenceFactory got same interface as JTS. - Added geos/version.h defining versioning infos - Added geos.h for quick inclusion. It will include geos/geom.h, new geos/version.h, geos/util.h geos/io.h and geos/unload.h (geometry input/output, exceptions, operations). - Added a geos::version() function showing GEOS and equivalent JTS versions as strings. - All geometry constructors take ownership of given arguments. GeometryFactory provides pass-by-reference geometry creators to take care of a deep-copy. - GeometryFactory::createMultiPoint(const CoordinateList *) has been renamed to GeometryFactory::createMultiPoint(const CoordinateList &) to reflect copy semantic - GeometryFactory: EMPTY geometry creation do now have their own constructors taking no arguments. - Geometry constructors taking PrecisionModel and SRID have been dropped. You have to use GeometryFactory instead. - WKTWriter default constructor has been dropped. You need to initialize it with an explicit GeometryFactory