5 - Delaunay Triangulation API (#487, #565, #570, #567)
6 - Interruptibility API (C and C++)
7 - CAPI: GEOSNode (#496) - PHP: Geometry->node
8 - GeometryPrecisionReducer class (#496, #526)
9 - BufferInputLineSimplifier header exposed (#548)
10 - New Centroid class supporting mixed geometry components (#612)
11 - io::Writer::reserve() method
12 - CAPI: GEOSNearestPoints
13 - Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497)
14 - Early bail out of overlay exception if input is invalid
17 - New noding::GeometryNoder class
18 - Added BufferOp::setSingleSided
19 - Signature of most functions taking a Label changed to take it
20 by reference rather than pointer.
21 - Signature of most functions taking an IntersectionMatrix changed
22 to take it by reference rather than pointer.
23 - GraphComponent::label is now a Label value (from a pointer)
24 - NodedSegmentString takes ownership of CoordinateSenuence now
25 - io::Writer's toString() returns by const ref, write() takes a const ref
26 - Unify prototypes of WKTReader and WKBReader constructor (#310)
27 - GeometryCollection::computeEnvelopInternal and
28 GeometryCollection::compareToSameClass are marked virtual (#478)
30 - Bug fixes / improvements
31 - A point interpolated from a line does not always intersect
33 - Port ConvexHull robustness fix from JTS-1.13 (#457)
34 - Improve Overlay robustness by reducing input precision on topology
35 exception and by refusing to accept unnoded output (#459)
36 - Improve Buffer robustness by reducing input precision on topology
38 - Mismatch segment sides in OffsetCurveBuilder (#633 )
39 - Fixed Linear Referencing API to handle MultiLineStrings consistently
40 by always using the lowest possible index value, and by trimming
41 zero-length components from results (#323)
42 - Fixed CMake configuration to set correct SOVERSION (current - age)
43 - Fix EMPTY return from single-point lines and zero-length polygons (#612)
48 - Bug fixes / improvements
49 - IsValidOp: throw proper error on nested shells (#608)
50 - Fix header guards (#617, #618, #619)
51 - WKTWriter::appendCoordinate optimisation
52 - Fix centroid computation for collections with empty components (#582)
57 - Bug fixes / improvements
58 - Fix abort in RightmostEdgeFinder (#605)
59 - Do not force precision reduction below 6 significant digits
60 while trying to obtain a valid Buffer output (#605)
61 - Fix GEOSPointOnSurface with zero-length linestring (#609)
62 - Fix EMPTY return from zero-area polygon (#613)
63 - Segfault from symdifference (#615)
66 2012-11-15 -- that's Post-GIS day !
68 - Bug fixes / improvements
69 - Add support for testing with phpunit 3.6 (not loosing support for 3.4)
70 - Segfault from intersection (#586, #598, #599)
75 - Bug fixes / improvements
76 - Correctly increment CAPI lib version from 3.3.3 (#558)
77 - Port robustness fix to CentroidArea (#559)
78 - Always return POINT from GEOSGetCentroid, even for EMPTY (#560)
79 - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561)
84 - Bug fixes / improvements
85 - Do not abort on NaN overlay input (#530)
86 - Reduce CommonBitsRemover harmful effects during overlay op (#527)
87 - Better cross-compiler support (#534)
88 - Enable overlay ops short-circuits (#542)
89 - Envelope-based short-circuit for symDifference (#543)
90 - Fix support for PHP 5.4 (#513)
91 - Fix TopologyPreservingSimplifier invalid output on closed line (#508)
92 - Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545)
97 - Bug fixes / improvements
98 - Fix simplification of collections with empty items (#519)
99 - Fix MSVC compilation of ambiguous log() call (#506)
100 - Fix CMake issues with std:: namespace detection (#493)
105 - Bug fixes / improvements
106 - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489)
107 - Missing versions update in CMake configuration (#490)
108 - Fix noding of self-intersecting lines through UnaryUnion (#482)
109 - Fix handling of collapsed edges skipping in BufferOp (#494)
110 - Print up to 18 digits of precision for TopologyException points
111 - Fix noding with reduced precision in Buffer operation (#473)
112 - Fix HotPixel original point invalidation (#498)
113 - Fix CascadedPolygonUnion to discard non-polygonal components (#499)
114 - Improve buffer robustness by reverting to non-snaprounding noder (#495)
115 - Fix C++11 build by avoiding std::pair<auto_ptr> (#491)
116 - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497)
117 - Apply shoelace formula for area calculation (#485)
118 - Fix default initialization issue for clang (#500)
119 - Improve overlay robustness by fixing areal validity on snapping (#488)
124 - Bug fixes / improvements
125 - Fix memory leak on invalid geometry in InteriorPointArea (#475)
126 - ValidOp abort in presence of 2 touching holes forming an island (#449)
127 - Enable prepared intersects operation for points
128 - Fortify suspicious code found by static analisys tools
129 - Fix for SOLARIS build (#461)
130 - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454)
131 - Fix Geometry::clone to copy SRID (#464)
132 - Fix for clang builds (#463)
133 - Fix out-of-place builds for python binding (#332) and regress testing
134 - Fix OS X framework cmake build (#385)
140 - CAPI: GEOSBufferWithParams (allows single sided buffers)
141 - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer
142 - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion
143 - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows
145 - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r
146 - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString
147 GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection
148 - CAPI: GEOSGeom_extractUniquePoints
149 - CAPI: GEOSGetGeometryN support for single geometries
150 - CAPI: GEOSPolygonize_full to return all informations computed by
152 - CAPI: GEOSOrientationIndex
153 - CAPI: GEOSSharedPaths to find shared paths and their orientation
155 - CAPI: GEOSRelatePatternMatch
156 - CAPI: GEOSCovers, GEOSCoveredBy (#396)
157 - CAPI: GEOSRelateBoundaryNodeRule (#399)
158 - CAPI: GEOSGeom_getCoordinateDimension() (#311)
159 - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292)
160 - PHP: new PHP5 bindings based on CAPI
161 - Semantic C++ API changes:
162 - Geometry inheritance chain changed to introduce Puntal, Lineal
163 and Polygonal classes (virtual inheritance introduced)
164 - Polygonizer::getInvalidRingLines retains ownership of vector elements
165 - Geometry::isWithinDistance method is now const
166 - Polygonizer::getCutEdges returns by const ref
167 - Polygonizer::getDangles returns by const ref
168 - Empty LinearRings are closed by definition
169 - Bug fixes / improvements
170 - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs
171 - Invalid compound geometries reported as valid (#333)
172 - Return up to 15 digits of precision from GEOSisValidReason_t (#329)
173 - CAPI: do not leak contexts when using the non-reentrant interface
174 - Fix duplicated dangles returned by Polygonizer
175 - Fix SnapIfNeededOverlayOp to throw the originating exception
176 - Fixed LineMerger to skip lines with only a single unique coordinate
177 - Fix NodedSegmentString to handle zero-length line segments correctly
179 - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly
180 - Added illegal state check in LineSegment::pointAlongOffset()
181 - Improved performance of RectangleIntersects by always using
182 segment-scanning and refining SegmentIntersectionTester
183 - Reduce memory use in PreparedGeometry predicates (#342)
184 - Fix infinite loop in RobustDeterminant with nan/inf input (#357)
189 - Add Single-sided buffer operation
191 - Drastically improved Buffer speed (20x for a case in testsuite)
192 - Improved EdgeList duplicate edge finding
193 - Added algorithm::distance package
194 - Added algorithm::Angle class
195 - Added algorithm::BoundaryNodeRule class
196 - IsSimpleOp can now return non-simple location coordinate
197 - DistanceOp can now check for 'within distance' predicate
199 - MultiPolygon::getBoundary always return MultiLineString, also
200 when the result is the EMPTY geometry.
201 - Various bug and leak fixes, optimizations
202 - Replace MarkupSTL with tinyXML
206 - PreparedGeometry operations for very fast predicate testing.
211 - Easier builds under MSVC and OpenSolaris
212 - Thread-safe CAPI option
213 - IsValidReason added to CAPI
214 - GEOSPolygonizer_getCutEdges added to CAPI
215 - CascadedUnion operation for fast unions of geometry sets
216 - Numerous bug fixes.
217 http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority
221 These are mostly ABI breaking changes.
222 In few cases the API also changed, but the most external one
223 (the documented one) should be unchanged.
226 - Added geom::BinaryOp class performing a binary operation
227 using different heuristics to reduce probability of robustness
228 issues. Both C-API and XMLTester now use this class for
230 - Added covers() and coveredBy() predicates to Geometry class
231 - Added overlay::overlayOp() adapter class
232 - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
234 - Added closed ring checks in IsValidOp
235 - Multi-input support in XMLTester
237 - Envelope(string) ctor
239 - New ShortCircuitedGeometryVisitor class
240 - New operation/predicate package
241 - Added CGAlgorithms::isPointInRing() version working with
242 Coordinate::ConstVect type (faster!)
243 - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence
245 - Moved GetNumGeometries() and GetGeometryN() interfaces
246 from GeometryCollection to Geometry class.
247 - New planarSubgraph class
248 - New ConnectedSubgraphFinder class.
249 - New LineSequencer class
250 - New WKTWriter::toLineString and ::toPoint convenience methods
251 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
252 - New WKTWriter::toLineString and ::toPoint convenience methods
253 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
254 - New Envelope::centre()
255 - New Envelope::intersection(Envelope)
256 - New Envelope::expandBy(distance, [ydistance])
257 - New LineString::reverse()
258 - New MultiLineString::reverse()
259 - New Geometry::buffer(distance, quadSeg, endCapStyle)
260 - New SnapRounding code
261 - New size() and operator[] interfaces to CoordinateSequence
262 - New ScaledNoder class
263 - New unit tests (make check rule)
268 - Coordinate copies reduction
269 - Heap allocations reduction
270 - More classes made final
271 - Better use of standard containers
272 - Use of singletons when appropriate
273 - Removed many function calls in loops' end conditions
274 - Improved XMLTester output and user interface
275 - Improved memory use in geos::geom::util::PolygonExtractor
276 - Ported JTS-1.7 version of ConvexHull with big attention to
277 memory usage optimizations.
278 - Changed CoordinateArrayFilter to reduce memory copies
279 - Changed UniqueCoordinateArrayFilter to reduce memory copies
280 - Added rectangle-based optimizations of intersects() and
282 - Inlined all planarGraphComponent class
283 - More iterators returning methods and inlining in planargraph.
284 - Obsoleted toInternalGeometry/fromInternalGeometry
285 - Improved buffering speed and robustness by using Snap Rounding
289 - SegmentString: getCoordinates() doesn't return a clone
290 anymore, getCoordinatesRO() obsoleted.
291 - JTS packages mapped to geos:: sub-namespaces
292 - Geometry::getInteriorPoint() returns NULL if called
293 against an EMPTY geom
294 - LineString::get{Start,End}Point return NULL for
296 - GEOSException is now derived by std::runtim_exception
297 and thrown by const reference.
298 - Geometry constructors made protected, to force use
299 of a GeometryFactory.
302 - More const-correct signatures
303 - Stronger methods typing (removed some void * args).
304 - Changed index-related funx signatures to use size_t
306 - More const-correctness in Buffer "package"
307 - Bugfix in LineString::getCoordinate() failing to return
308 NULL from getCoordinat() when empty.
309 - Use unsigned int for indexes and sizes.
312 - Namespaces mapping JTS packages
313 - Renamed classes after JTS names (namespaces use made this possible
315 - Splitted headers, for build speedup and possible API reduction.
316 - Moved source/bigtest and source/test to tests/bigtest
318 - Moved C-API in it's own top-level dir capi/
319 - Reworked automake scripts to produce a static lib for each subdir
320 and then link all subsystem's libs togheter
321 - Renamed DefaultCoordinateSequence to CoordinateArraySequence.
322 - Renamed OverlayOp opcodes by prepending the 'op' prefix, and
323 given the enum a name (OpCode) for type-safety.
326 - Fixed bug causing redundant linestrings to be returned in the
327 result of overlaying polygons containing touching holes (#13)
328 - Fixed integer conversion bug
329 - Fixed PointLocator handling of LinearRings
330 - Added missing ::clone() methods for Multi* geoms
332 - (Partial) Detailed list of changes:
333 - Changed SegmentNode to contain a *real* Coordinate (not a pointer)
334 to reduce construction costs.
335 - Changed geomgraph nodeMap to use Coordinate pointers as keys
336 - Envelope destructor made non-virtual to give compiler more static
338 - Changed BufferSubgraph::computeDepths to use a set instead of a
339 vector for checking visited Edges.
340 - Made LineIntersector a concrete type
341 - Node::isIncidentEdgeInResult() method made virtual
342 - Const-correct signatures in LineMerger package
343 - Changed operation/valid/*NestedRingTester classes interface
344 to use Coordinate pointers instead of copies.
345 - Changed EdgeIntersectionList to use a set instead of a vector
346 - Changed DepthSegment to store a real Coordinate rather then a pointer.
347 - Changed SubgraphDepthLocater to store real containers rather then
349 - Changed BufferSubgraph to store a real RightmostEdgeFinder and real
350 containers rather then pointers.
351 - CoordinateSequence API changes:
352 - point index and size related functions
353 use unsigned int rather then int
354 - Changed EdgeEndStar to maintain a single container for EdgeEnds
355 - Changed PlanarGraph::addEdges to take a const vector by ref
356 rathern then a non-const vector by pointer
357 - Changed EdgeList::addAll to take a const vector by ref
358 rather then a non-const vector by pointer
359 - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *)
360 const to CoordinateSequence
361 - LineBuilder::lineEdgesList made a real vector, rather then pointer
363 - SegmentString::eiList made a real SegmentNodeList, rather then
364 a pointer (private member)
365 - Removed coordinate copies in ElevationMatrix::elevate
366 - Changed CoordinateFilter interface to have a const method
367 for filter_rw, updated interfaces using this to take
368 const CoordinateFilter (apply_rw).
373 - Added version.in.vc to distribution
377 - Support for MingW builds
378 - Bugfix in Polygonizer chocking on invalid LineString inputs
379 - CAPI: small leak removed in GEOSHasZ()
383 - Performance improvement in OverlayOp::insertUniqueEdge()
384 - CoordinateSequence copy removal in EdgeRing
385 - Minor memory allocation improvements
386 - Higher dimensions interface for CoordinateSequence
387 - Added getCoordinatesRO for Point class
389 - NEW Simplified and stabler C API
393 - Severe BUGFIX in BufferSubgraphGT and other functions used
394 as StrictWeakOrdering predicates for sort()
398 - win32/mingw build support
399 - Segfault fix in LinearRing and LineString constructors
400 - Segfault fix in Polygonizer
401 - XMLTester installed by default
402 - XMLTester code cleanup
403 - Fixed handling of collection input in GeometryFactory::buildGeometry
404 - Added shortcircuit test for Union operation
405 - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing()
406 - Performance improvements in CGAlgorithms::isOnLine()
407 - Other minor performance improvements
408 - New Node::isIncidentEdgeInResult() method
409 - OverlayOp's PointBuilder performance improvement by reduction
410 of LineIntersector calls.
411 - Optimizations in Buffer operation
412 - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert
416 - Segfault fix in Point::isEmpty
417 - Mem Leak fix in OffsetCurveBuilder::getRingCurve
418 - Bugfix in LineSegment::reverse
419 - Added multipolygon buffering test in source/test/testLeaksBig
420 - Ported JTS robustness patch for RobustLineIntersector
421 - Removed useless Coordinate copies in OverlayOp::mergeZ()
422 - Avoided throws by IsValid on invalid input
423 - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream
425 - Better support for older compilers (Polygonizer::LineStringAdder friendship)
426 - Removed useless Coordinate copies in CGAlgorithms::isOnLine()
427 - Added support for polygonize and parametrized buffer tests in XMLTester
428 - Fixed support for --includedir and --libdir
429 - Fixed Z interpolation in LineIntersector
430 - Handled NULL results from getCentroid() in XMLTester
431 - Segfault fix in (EMPTY)Geometry::getCentroid()
432 - Made polygon::getBoundary() always OGC-valid (no LinearRings)
433 - Input checking and promoting in GeometryFactory::createMultiLineString()
434 - Segfault fix in GeometryEditor::editPolygon()
439 - Fixed uninitialized Coordinate in TopologyException
440 - Added install of version.h, platform.h and timeval.h
441 - Memleak fix in PolygonizeGraph
442 - Memleak fix in OverlayOp
443 - Compiler warnings removal
445 - Z interpolation in overlay operations
446 - Debian package build scripts
451 - Added Polygonizer and LineMerger classes.
452 - python wrapper examples
453 - General cleanup / warnings removal
454 - cleaner win32 / older copilers builds
455 - Reduced heap allocations
456 - debian package builder scripts
457 - reduction of standard C lib headers dependency
458 - Z support in overlay operations.
463 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList
464 renamed to DefaultCoordinateSequence to reflect JTS changes.
465 DefaultCoordinateSequenceFactory and CoordinateSequenceFactory
466 got same interface as JTS.
467 - Added geos/version.h defining versioning infos
468 - Added geos.h for quick inclusion. It will include geos/geom.h,
469 new geos/version.h, geos/util.h geos/io.h and geos/unload.h
470 (geometry input/output, exceptions, operations).
471 - Added a geos::version() function showing GEOS and equivalent
472 JTS versions as strings.
473 - All geometry constructors take ownership of given arguments.
474 GeometryFactory provides pass-by-reference geometry creators
475 to take care of a deep-copy.
476 - GeometryFactory::createMultiPoint(const CoordinateList *)
478 GeometryFactory::createMultiPoint(const CoordinateList &)
479 to reflect copy semantic
480 - GeometryFactory: EMPTY geometry creation do now have their
481 own constructors taking no arguments.
482 - Geometry constructors taking PrecisionModel and SRID have
483 been dropped. You have to use GeometryFactory instead.
484 - WKTWriter default constructor has been dropped. You need
485 to initialize it with an explicit GeometryFactory