Changes in 3.1.1 - Bug fixes - Calculations in Octant - Packaging fixes - Memory leaks - Buffer build for multipolygons 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 - 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