4 - Bug fixes / improvements
5 - Do not abort on NaN overlay input (#530)
6 - Reduce CommonBitsRemover harmful effects during overlay op (#527)
11 - Bug fixes / improvements
12 - Fix simplification of collections with empty items (#519)
13 - Fix MSVC compilation of ambiguous log() call (#506)
14 - Fix CMake issues with std:: namespace detection (#493)
19 - Bug fixes / improvements
20 - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489)
21 - Missing versions update in CMake configuration (#490)
22 - Fix noding of self-intersecting lines through UnaryUnion (#482)
23 - Fix handling of collapsed edges skipping in BufferOp (#494)
24 - Print up to 18 digits of precision for TopologyException points
25 - Fix noding with reduced precision in Buffer operation (#473)
26 - Fix HotPixel original point invalidation (#498)
27 - Fix CascadedPolygonUnion to discard non-polygonal components (#499)
28 - Improve buffer robustness by reverting to non-snaprounding noder (#495)
29 - Fix C++11 build by avoiding std::pair<auto_ptr> (#491)
30 - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497)
31 - Apply shoelace formula for area calculation (#485)
32 - Fix default initialization issue for clang (#500)
33 - Improve overlay robustness by fixing areal validity on snapping (#488)
38 - Bug fixes / improvements
39 - Fix memory leak on invalid geometry in InteriorPointArea (#475)
40 - ValidOp abort in presence of 2 touching holes forming an island (#449)
41 - Enable prepared intersects operation for points
42 - Fortify suspicious code found by static analisys tools
43 - Fix for SOLARIS build (#461)
44 - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454)
45 - Fix Geometry::clone to copy SRID (#464)
46 - Fix for clang builds (#463)
47 - Fix out-of-place builds for python binding (#332) and regress testing
48 - Fix OS X framework cmake build (#385)
54 - CAPI: GEOSBufferWithParams (allows single sided buffers)
55 - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer
56 - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion
57 - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows
59 - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r
60 - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString
61 GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection
62 - CAPI: GEOSGeom_extractUniquePoints
63 - CAPI: GEOSGetGeometryN support for single geometries
64 - CAPI: GEOSPolygonize_full to return all informations computed by
66 - CAPI: GEOSOrientationIndex
67 - CAPI: GEOSSharedPaths to find shared paths and their orientation
69 - CAPI: GEOSRelatePatternMatch
70 - CAPI: GEOSCovers, GEOSCoveredBy (#396)
71 - CAPI: GEOSRelateBoundaryNodeRule (#399)
72 - CAPI: GEOSGeom_getCoordinateDimension() (#311)
73 - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292)
74 - PHP: new PHP5 bindings based on CAPI
75 - Semantic C++ API changes:
76 - Geometry inheritance chain changed to introduce Puntal, Lineal
77 and Polygonal classes (virtual inheritance introduced)
78 - Polygonizer::getInvalidRingLines retains ownership of vector elements
79 - Geometry::isWithinDistance method is now const
80 - Polygonizer::getCutEdges returns by const ref
81 - Polygonizer::getDangles returns by const ref
82 - Empty LinearRings are closed by definition
83 - Bug fixes / improvements
84 - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs
85 - Invalid compound geometries reported as valid (#333)
86 - Return up to 15 digits of precision from GEOSisValidReason_t (#329)
87 - CAPI: do not leak contexts when using the non-reentrant interface
88 - Fix duplicated dangles returned by Polygonizer
89 - Fix SnapIfNeededOverlayOp to throw the originating exception
90 - Fixed LineMerger to skip lines with only a single unique coordinate
91 - Fix NodedSegmentString to handle zero-length line segments correctly
93 - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly
94 - Added illegal state check in LineSegment::pointAlongOffset()
95 - Improved performance of RectangleIntersects by always using
96 segment-scanning and refining SegmentIntersectionTester
97 - Reduce memory use in PreparedGeometry predicates (#342)
98 - Fix infinite loop in RobustDeterminant with nan/inf input (#357)
103 - Add Single-sided buffer operation
105 - Drastically improved Buffer speed (20x for a case in testsuite)
106 - Improved EdgeList duplicate edge finding
107 - Added algorithm::distance package
108 - Added algorithm::Angle class
109 - Added algorithm::BoundaryNodeRule class
110 - IsSimpleOp can now return non-simple location coordinate
111 - DistanceOp can now check for 'within distance' predicate
113 - MultiPolygon::getBoundary always return MultiLineString, also
114 when the result is the EMPTY geometry.
115 - Various bug and leak fixes, optimizations
116 - Replace MarkupSTL with tinyXML
120 - PreparedGeometry operations for very fast predicate testing.
125 - Easier builds under MSVC and OpenSolaris
126 - Thread-safe CAPI option
127 - IsValidReason added to CAPI
128 - GEOSPolygonizer_getCutEdges added to CAPI
129 - CascadedUnion operation for fast unions of geometry sets
130 - Numerous bug fixes.
131 http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority
135 These are mostly ABI breaking changes.
136 In few cases the API also changed, but the most external one
137 (the documented one) should be unchanged.
140 - Added geom::BinaryOp class performing a binary operation
141 using different heuristics to reduce probability of robustness
142 issues. Both C-API and XMLTester now use this class for
144 - Added covers() and coveredBy() predicates to Geometry class
145 - Added overlay::overlayOp() adapter class
146 - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
148 - Added closed ring checks in IsValidOp
149 - Multi-input support in XMLTester
151 - Envelope(string) ctor
153 - New ShortCircuitedGeometryVisitor class
154 - New operation/predicate package
155 - Added CGAlgorithms::isPointInRing() version working with
156 Coordinate::ConstVect type (faster!)
157 - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence
159 - Moved GetNumGeometries() and GetGeometryN() interfaces
160 from GeometryCollection to Geometry class.
161 - New planarSubgraph class
162 - New ConnectedSubgraphFinder class.
163 - New LineSequencer class
164 - New WKTWriter::toLineString and ::toPoint convenience methods
165 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
166 - New WKTWriter::toLineString and ::toPoint convenience methods
167 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
168 - New Envelope::centre()
169 - New Envelope::intersection(Envelope)
170 - New Envelope::expandBy(distance, [ydistance])
171 - New LineString::reverse()
172 - New MultiLineString::reverse()
173 - New Geometry::buffer(distance, quadSeg, endCapStyle)
174 - New SnapRounding code
175 - New size() and operator[] interfaces to CoordinateSequence
176 - New ScaledNoder class
177 - New unit tests (make check rule)
182 - Coordinate copies reduction
183 - Heap allocations reduction
184 - More classes made final
185 - Better use of standard containers
186 - Use of singletons when appropriate
187 - Removed many function calls in loops' end conditions
188 - Improved XMLTester output and user interface
189 - Improved memory use in geos::geom::util::PolygonExtractor
190 - Ported JTS-1.7 version of ConvexHull with big attention to
191 memory usage optimizations.
192 - Changed CoordinateArrayFilter to reduce memory copies
193 - Changed UniqueCoordinateArrayFilter to reduce memory copies
194 - Added rectangle-based optimizations of intersects() and
196 - Inlined all planarGraphComponent class
197 - More iterators returning methods and inlining in planargraph.
198 - Obsoleted toInternalGeometry/fromInternalGeometry
199 - Improved buffering speed and robustness by using Snap Rounding
203 - SegmentString: getCoordinates() doesn't return a clone
204 anymore, getCoordinatesRO() obsoleted.
205 - JTS packages mapped to geos:: sub-namespaces
206 - Geometry::getInteriorPoint() returns NULL if called
207 against an EMPTY geom
208 - LineString::get{Start,End}Point return NULL for
210 - GEOSException is now derived by std::runtim_exception
211 and thrown by const reference.
212 - Geometry constructors made protected, to force use
213 of a GeometryFactory.
216 - More const-correct signatures
217 - Stronger methods typing (removed some void * args).
218 - Changed index-related funx signatures to use size_t
220 - More const-correctness in Buffer "package"
221 - Bugfix in LineString::getCoordinate() failing to return
222 NULL from getCoordinat() when empty.
223 - Use unsigned int for indexes and sizes.
226 - Namespaces mapping JTS packages
227 - Renamed classes after JTS names (namespaces use made this possible
229 - Splitted headers, for build speedup and possible API reduction.
230 - Moved source/bigtest and source/test to tests/bigtest
232 - Moved C-API in it's own top-level dir capi/
233 - Reworked automake scripts to produce a static lib for each subdir
234 and then link all subsystem's libs togheter
235 - Renamed DefaultCoordinateSequence to CoordinateArraySequence.
236 - Renamed OverlayOp opcodes by prepending the 'op' prefix, and
237 given the enum a name (OpCode) for type-safety.
240 - Fixed bug causing redundant linestrings to be returned in the
241 result of overlaying polygons containing touching holes (#13)
242 - Fixed integer conversion bug
243 - Fixed PointLocator handling of LinearRings
244 - Added missing ::clone() methods for Multi* geoms
246 - (Partial) Detailed list of changes:
247 - Changed SegmentNode to contain a *real* Coordinate (not a pointer)
248 to reduce construction costs.
249 - Changed geomgraph nodeMap to use Coordinate pointers as keys
250 - Envelope destructor made non-virtual to give compiler more static
252 - Changed BufferSubgraph::computeDepths to use a set instead of a
253 vector for checking visited Edges.
254 - Made LineIntersector a concrete type
255 - Node::isIncidentEdgeInResult() method made virtual
256 - Const-correct signatures in LineMerger package
257 - Changed operation/valid/*NestedRingTester classes interface
258 to use Coordinate pointers instead of copies.
259 - Changed EdgeIntersectionList to use a set instead of a vector
260 - Changed DepthSegment to store a real Coordinate rather then a pointer.
261 - Changed SubgraphDepthLocater to store real containers rather then
263 - Changed BufferSubgraph to store a real RightmostEdgeFinder and real
264 containers rather then pointers.
265 - CoordinateSequence API changes:
266 - point index and size related functions
267 use unsigned int rather then int
268 - Changed EdgeEndStar to maintain a single container for EdgeEnds
269 - Changed PlanarGraph::addEdges to take a const vector by ref
270 rathern then a non-const vector by pointer
271 - Changed EdgeList::addAll to take a const vector by ref
272 rather then a non-const vector by pointer
273 - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *)
274 const to CoordinateSequence
275 - LineBuilder::lineEdgesList made a real vector, rather then pointer
277 - SegmentString::eiList made a real SegmentNodeList, rather then
278 a pointer (private member)
279 - Removed coordinate copies in ElevationMatrix::elevate
280 - Changed CoordinateFilter interface to have a const method
281 for filter_rw, updated interfaces using this to take
282 const CoordinateFilter (apply_rw).
287 - Added version.in.vc to distribution
291 - Support for MingW builds
292 - Bugfix in Polygonizer chocking on invalid LineString inputs
293 - CAPI: small leak removed in GEOSHasZ()
297 - Performance improvement in OverlayOp::insertUniqueEdge()
298 - CoordinateSequence copy removal in EdgeRing
299 - Minor memory allocation improvements
300 - Higher dimensions interface for CoordinateSequence
301 - Added getCoordinatesRO for Point class
303 - NEW Simplified and stabler C API
307 - Severe BUGFIX in BufferSubgraphGT and other functions used
308 as StrictWeakOrdering predicates for sort()
312 - win32/mingw build support
313 - Segfault fix in LinearRing and LineString constructors
314 - Segfault fix in Polygonizer
315 - XMLTester installed by default
316 - XMLTester code cleanup
317 - Fixed handling of collection input in GeometryFactory::buildGeometry
318 - Added shortcircuit test for Union operation
319 - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing()
320 - Performance improvements in CGAlgorithms::isOnLine()
321 - Other minor performance improvements
322 - New Node::isIncidentEdgeInResult() method
323 - OverlayOp's PointBuilder performance improvement by reduction
324 of LineIntersector calls.
325 - Optimizations in Buffer operation
326 - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert
330 - Segfault fix in Point::isEmpty
331 - Mem Leak fix in OffsetCurveBuilder::getRingCurve
332 - Bugfix in LineSegment::reverse
333 - Added multipolygon buffering test in source/test/testLeaksBig
334 - Ported JTS robustness patch for RobustLineIntersector
335 - Removed useless Coordinate copies in OverlayOp::mergeZ()
336 - Avoided throws by IsValid on invalid input
337 - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream
339 - Better support for older compilers (Polygonizer::LineStringAdder friendship)
340 - Removed useless Coordinate copies in CGAlgorithms::isOnLine()
341 - Added support for polygonize and parametrized buffer tests in XMLTester
342 - Fixed support for --includedir and --libdir
343 - Fixed Z interpolation in LineIntersector
344 - Handled NULL results from getCentroid() in XMLTester
345 - Segfault fix in (EMPTY)Geometry::getCentroid()
346 - Made polygon::getBoundary() always OGC-valid (no LinearRings)
347 - Input checking and promoting in GeometryFactory::createMultiLineString()
348 - Segfault fix in GeometryEditor::editPolygon()
353 - Fixed uninitialized Coordinate in TopologyException
354 - Added install of version.h, platform.h and timeval.h
355 - Memleak fix in PolygonizeGraph
356 - Memleak fix in OverlayOp
357 - Compiler warnings removal
359 - Z interpolation in overlay operations
360 - Debian package build scripts
365 - Added Polygonizer and LineMerger classes.
366 - python wrapper examples
367 - General cleanup / warnings removal
368 - cleaner win32 / older copilers builds
369 - Reduced heap allocations
370 - debian package builder scripts
371 - reduction of standard C lib headers dependency
372 - Z support in overlay operations.
377 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList
378 renamed to DefaultCoordinateSequence to reflect JTS changes.
379 DefaultCoordinateSequenceFactory and CoordinateSequenceFactory
380 got same interface as JTS.
381 - Added geos/version.h defining versioning infos
382 - Added geos.h for quick inclusion. It will include geos/geom.h,
383 new geos/version.h, geos/util.h geos/io.h and geos/unload.h
384 (geometry input/output, exceptions, operations).
385 - Added a geos::version() function showing GEOS and equivalent
386 JTS versions as strings.
387 - All geometry constructors take ownership of given arguments.
388 GeometryFactory provides pass-by-reference geometry creators
389 to take care of a deep-copy.
390 - GeometryFactory::createMultiPoint(const CoordinateList *)
392 GeometryFactory::createMultiPoint(const CoordinateList &)
393 to reflect copy semantic
394 - GeometryFactory: EMPTY geometry creation do now have their
395 own constructors taking no arguments.
396 - Geometry constructors taking PrecisionModel and SRID have
397 been dropped. You have to use GeometryFactory instead.
398 - WKTWriter default constructor has been dropped. You need
399 to initialize it with an explicit GeometryFactory