4 - Bug fixes / improvements
5 - Fix snapping of last segment of a closed linestring (#758)
6 - Improve robustness of intersection testing (#716)
7 - Fixed build configuration for NMAKE with Visual Leak Detector enabled (#715)
8 - Fixed compilation against thread-safe PHP (#541)
9 - Fix Empty to Empty equals (#703)
10 - Fix build on OpenBSD (#700)
11 - Fix build on HP-UX 11.23 (#664)
12 - Throw a ParseException on missing chars from HEXWKB string (#675)
13 - Fix ruby binding build (https://github.com/libgeos/libgeos/pull/32)
14 - Make polygonize operation interruptable
15 - Make relate-based operations interruptable (#711)
16 - Update for Visual Studio 2013 (#691)
17 - Update for Visual Studio 2015 (r4054, r4062)
18 - Update for Microsoft NMAKE (r4063)
19 - Fix compilation issues while building with Visual C++ (#701)
20 - Fix support of PHP bindings for version < 5.4.0 (#709)
21 - Fix incorrect return from prepared multipoint intersects (#764)
22 - Fix build against GCC 3.5.0+ (#784)
27 - Bug fixes / improvements
28 - Use a double for PrecisionModel scale, avoiding overflows
29 should fix 32-bit regression failures (#652)
30 - isnan workaround OS detection missing NetBSD, DragonFly, Sun nuance (#650)
31 - Do not distribute platform.h and version.h, but install both (#601)
32 - Non-standard ChangeLog file in 3.4.0 and 3.4.1 releases (#654)
33 - new travis bot (#657)
34 - accept multiple Nan representations (#656)
40 - Bug fixes / improvements
41 - Assertion failure snapping line to points of rectangle
42 smaller than tolerance (#649)
43 - Can't build using cmake with tar ball (#644)
49 - Delaunay Triangulation API (#487, #565, #570, #567)
50 - Interruptibility API (C and C++)
51 - CAPI: GEOSNode (#496) - PHP: Geometry->node
52 - GeometryPrecisionReducer class (#496, #526)
53 - BufferInputLineSimplifier header exposed (#548)
54 - New Centroid class supporting mixed geometry components (#612)
55 - io::Writer::reserve() method
56 - CAPI: GEOSNearestPoints
57 - Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497)
58 - Early bail out of overlay exception if input is invalid
61 - New noding::GeometryNoder class
62 - Added BufferOp::setSingleSided
63 - Signature of most functions taking a Label changed to take it
64 by reference rather than pointer.
65 - Signature of most functions taking an IntersectionMatrix changed
66 to take it by reference rather than pointer.
67 - GraphComponent::label is now a Label value (from a pointer)
68 - NodedSegmentString takes ownership of CoordinateSenuence now
69 - io::Writer's toString() returns by const ref, write() takes a const ref
70 - Unify prototypes of WKTReader and WKBReader constructor (#310)
71 - GeometryCollection::computeEnvelopInternal and
72 GeometryCollection::compareToSameClass are marked virtual (#478)
74 - Bug fixes / improvements
75 - A point interpolated from a line does not always intersect
77 - Port ConvexHull robustness fix from JTS-1.13 (#457)
78 - Improve Overlay robustness by reducing input precision on topology
79 exception and by refusing to accept unnoded output (#459)
80 - Improve Buffer robustness by reducing input precision on topology
82 - Mismatch segment sides in OffsetCurveBuilder (#633 )
83 - Fixed Linear Referencing API to handle MultiLineStrings consistently
84 by always using the lowest possible index value, and by trimming
85 zero-length components from results (#323)
86 - Fixed CMake configuration to set correct SOVERSION (current - age)
87 - Fix EMPTY return from single-point lines and zero-length polygons (#612)
88 - CMakeLists.txt, tools/geos_svn_revision_cmake.h.in: Add
89 geos_svn_revision.h generator to CMake config (#643)
90 - Makefile.vc 'clean' step leaks obj files (#607)
95 - Bug fixes / improvements
96 - Fix OffsetCurve op in presence of duplicated vertices (#602)
97 - Fix LineSegmentVisitor copy ctor (#636)
98 - Fix area boundary return from GEOSPointOnSurface (#623)
99 - Speedup GEOSWKBReader_read (#621)
100 - Fix RobustLineIntersector handling of invalid intersection points (#622)
101 - Reduce likelyhood of invalid output from snap operation (#629, #501)
102 - Reduce memory fragmentation of prepared Polygon/Point intersection op
103 - Fix mingw64 compile (#630)
104 - Fix bug in HotPixel constructor (#635)
105 - Fix install location of linearref headers (#624)
106 - Fix multi-geometry constructor to drop SRID from components (#583)
111 - Bug fixes / improvements
112 - IsValidOp: throw proper error on nested shells (#608)
113 - Fix header guards (#617, #618, #619)
114 - WKTWriter::appendCoordinate optimisation
115 - Fix centroid computation for collections with empty components (#582)
120 - Bug fixes / improvements
121 - Fix abort in RightmostEdgeFinder (#605)
122 - Do not force precision reduction below 6 significant digits
123 while trying to obtain a valid Buffer output (#605)
124 - Fix GEOSPointOnSurface with zero-length linestring (#609)
125 - Fix EMPTY return from zero-area polygon (#613)
126 - Segfault from symdifference (#615)
129 2012-11-15 -- that's Post-GIS day !
131 - Bug fixes / improvements
132 - Add support for testing with phpunit 3.6 (not loosing support for 3.4)
133 - Segfault from intersection (#586, #598, #599)
138 - Bug fixes / improvements
139 - Correctly increment CAPI lib version from 3.3.3 (#558)
140 - Port robustness fix to CentroidArea (#559)
141 - Always return POINT from GEOSGetCentroid, even for EMPTY (#560)
142 - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561)
147 - Bug fixes / improvements
148 - Do not abort on NaN overlay input (#530)
149 - Reduce CommonBitsRemover harmful effects during overlay op (#527)
150 - Better cross-compiler support (#534)
151 - Enable overlay ops short-circuits (#542)
152 - Envelope-based short-circuit for symDifference (#543)
153 - Fix support for PHP 5.4 (#513)
154 - Fix TopologyPreservingSimplifier invalid output on closed line (#508)
155 - Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545)
160 - Bug fixes / improvements
161 - Fix simplification of collections with empty items (#519)
162 - Fix MSVC compilation of ambiguous log() call (#506)
163 - Fix CMake issues with std:: namespace detection (#493)
168 - Bug fixes / improvements
169 - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489)
170 - Missing versions update in CMake configuration (#490)
171 - Fix noding of self-intersecting lines through UnaryUnion (#482)
172 - Fix handling of collapsed edges skipping in BufferOp (#494)
173 - Print up to 18 digits of precision for TopologyException points
174 - Fix noding with reduced precision in Buffer operation (#473)
175 - Fix HotPixel original point invalidation (#498)
176 - Fix CascadedPolygonUnion to discard non-polygonal components (#499)
177 - Improve buffer robustness by reverting to non-snaprounding noder (#495)
178 - Fix C++11 build by avoiding std::pair<auto_ptr> (#491)
179 - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497)
180 - Apply shoelace formula for area calculation (#485)
181 - Fix default initialization issue for clang (#500)
182 - Improve overlay robustness by fixing areal validity on snapping (#488)
187 - Bug fixes / improvements
188 - Fix memory leak on invalid geometry in InteriorPointArea (#475)
189 - ValidOp abort in presence of 2 touching holes forming an island (#449)
190 - Enable prepared intersects operation for points
191 - Fortify suspicious code found by static analisys tools
192 - Fix for SOLARIS build (#461)
193 - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454)
194 - Fix Geometry::clone to copy SRID (#464)
195 - Fix for clang builds (#463)
196 - Fix out-of-place builds for python binding (#332) and regress testing
197 - Fix OS X framework cmake build (#385)
203 - CAPI: GEOSBufferWithParams (allows single sided buffers)
204 - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer
205 - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion
206 - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows
208 - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r
209 - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString
210 GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection
211 - CAPI: GEOSGeom_extractUniquePoints
212 - CAPI: GEOSGetGeometryN support for single geometries
213 - CAPI: GEOSPolygonize_full to return all informations computed by
215 - CAPI: GEOSOrientationIndex
216 - CAPI: GEOSSharedPaths to find shared paths and their orientation
218 - CAPI: GEOSRelatePatternMatch
219 - CAPI: GEOSCovers, GEOSCoveredBy (#396)
220 - CAPI: GEOSRelateBoundaryNodeRule (#399)
221 - CAPI: GEOSGeom_getCoordinateDimension() (#311)
222 - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292)
223 - PHP: new PHP5 bindings based on CAPI
224 - Semantic C++ API changes:
225 - Geometry inheritance chain changed to introduce Puntal, Lineal
226 and Polygonal classes (virtual inheritance introduced)
227 - Polygonizer::getInvalidRingLines retains ownership of vector elements
228 - Geometry::isWithinDistance method is now const
229 - Polygonizer::getCutEdges returns by const ref
230 - Polygonizer::getDangles returns by const ref
231 - Empty LinearRings are closed by definition
232 - Bug fixes / improvements
233 - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs
234 - Invalid compound geometries reported as valid (#333)
235 - Return up to 15 digits of precision from GEOSisValidReason_t (#329)
236 - CAPI: do not leak contexts when using the non-reentrant interface
237 - Fix duplicated dangles returned by Polygonizer
238 - Fix SnapIfNeededOverlayOp to throw the originating exception
239 - Fixed LineMerger to skip lines with only a single unique coordinate
240 - Fix NodedSegmentString to handle zero-length line segments correctly
242 - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly
243 - Added illegal state check in LineSegment::pointAlongOffset()
244 - Improved performance of RectangleIntersects by always using
245 segment-scanning and refining SegmentIntersectionTester
246 - Reduce memory use in PreparedGeometry predicates (#342)
247 - Fix infinite loop in RobustDeterminant with nan/inf input (#357)
252 - Add Single-sided buffer operation
254 - Drastically improved Buffer speed (20x for a case in testsuite)
255 - Improved EdgeList duplicate edge finding
256 - Added algorithm::distance package
257 - Added algorithm::Angle class
258 - Added algorithm::BoundaryNodeRule class
259 - IsSimpleOp can now return non-simple location coordinate
260 - DistanceOp can now check for 'within distance' predicate
262 - MultiPolygon::getBoundary always return MultiLineString, also
263 when the result is the EMPTY geometry.
264 - Various bug and leak fixes, optimizations
265 - Replace MarkupSTL with tinyXML
269 - PreparedGeometry operations for very fast predicate testing.
274 - Easier builds under MSVC and OpenSolaris
275 - Thread-safe CAPI option
276 - IsValidReason added to CAPI
277 - GEOSPolygonizer_getCutEdges added to CAPI
278 - CascadedUnion operation for fast unions of geometry sets
279 - Numerous bug fixes.
280 http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority
284 These are mostly ABI breaking changes.
285 In few cases the API also changed, but the most external one
286 (the documented one) should be unchanged.
289 - Added geom::BinaryOp class performing a binary operation
290 using different heuristics to reduce probability of robustness
291 issues. Both C-API and XMLTester now use this class for
293 - Added covers() and coveredBy() predicates to Geometry class
294 - Added overlay::overlayOp() adapter class
295 - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
297 - Added closed ring checks in IsValidOp
298 - Multi-input support in XMLTester
300 - Envelope(string) ctor
302 - New ShortCircuitedGeometryVisitor class
303 - New operation/predicate package
304 - Added CGAlgorithms::isPointInRing() version working with
305 Coordinate::ConstVect type (faster!)
306 - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence
308 - Moved GetNumGeometries() and GetGeometryN() interfaces
309 from GeometryCollection to Geometry class.
310 - New planarSubgraph class
311 - New ConnectedSubgraphFinder class.
312 - New LineSequencer class
313 - New WKTWriter::toLineString and ::toPoint convenience methods
314 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
315 - New WKTWriter::toLineString and ::toPoint convenience methods
316 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
317 - New Envelope::centre()
318 - New Envelope::intersection(Envelope)
319 - New Envelope::expandBy(distance, [ydistance])
320 - New LineString::reverse()
321 - New MultiLineString::reverse()
322 - New Geometry::buffer(distance, quadSeg, endCapStyle)
323 - New SnapRounding code
324 - New size() and operator[] interfaces to CoordinateSequence
325 - New ScaledNoder class
326 - New unit tests (make check rule)
331 - Coordinate copies reduction
332 - Heap allocations reduction
333 - More classes made final
334 - Better use of standard containers
335 - Use of singletons when appropriate
336 - Removed many function calls in loops' end conditions
337 - Improved XMLTester output and user interface
338 - Improved memory use in geos::geom::util::PolygonExtractor
339 - Ported JTS-1.7 version of ConvexHull with big attention to
340 memory usage optimizations.
341 - Changed CoordinateArrayFilter to reduce memory copies
342 - Changed UniqueCoordinateArrayFilter to reduce memory copies
343 - Added rectangle-based optimizations of intersects() and
345 - Inlined all planarGraphComponent class
346 - More iterators returning methods and inlining in planargraph.
347 - Obsoleted toInternalGeometry/fromInternalGeometry
348 - Improved buffering speed and robustness by using Snap Rounding
352 - SegmentString: getCoordinates() doesn't return a clone
353 anymore, getCoordinatesRO() obsoleted.
354 - JTS packages mapped to geos:: sub-namespaces
355 - Geometry::getInteriorPoint() returns NULL if called
356 against an EMPTY geom
357 - LineString::get{Start,End}Point return NULL for
359 - GEOSException is now derived by std::runtim_exception
360 and thrown by const reference.
361 - Geometry constructors made protected, to force use
362 of a GeometryFactory.
365 - More const-correct signatures
366 - Stronger methods typing (removed some void * args).
367 - Changed index-related funx signatures to use size_t
369 - More const-correctness in Buffer "package"
370 - Bugfix in LineString::getCoordinate() failing to return
371 NULL from getCoordinat() when empty.
372 - Use unsigned int for indexes and sizes.
375 - Namespaces mapping JTS packages
376 - Renamed classes after JTS names (namespaces use made this possible
378 - Splitted headers, for build speedup and possible API reduction.
379 - Moved source/bigtest and source/test to tests/bigtest
381 - Moved C-API in it's own top-level dir capi/
382 - Reworked automake scripts to produce a static lib for each subdir
383 and then link all subsystem's libs togheter
384 - Renamed DefaultCoordinateSequence to CoordinateArraySequence.
385 - Renamed OverlayOp opcodes by prepending the 'op' prefix, and
386 given the enum a name (OpCode) for type-safety.
389 - Fixed bug causing redundant linestrings to be returned in the
390 result of overlaying polygons containing touching holes (#13)
391 - Fixed integer conversion bug
392 - Fixed PointLocator handling of LinearRings
393 - Added missing ::clone() methods for Multi* geoms
395 - (Partial) Detailed list of changes:
396 - Changed SegmentNode to contain a *real* Coordinate (not a pointer)
397 to reduce construction costs.
398 - Changed geomgraph nodeMap to use Coordinate pointers as keys
399 - Envelope destructor made non-virtual to give compiler more static
401 - Changed BufferSubgraph::computeDepths to use a set instead of a
402 vector for checking visited Edges.
403 - Made LineIntersector a concrete type
404 - Node::isIncidentEdgeInResult() method made virtual
405 - Const-correct signatures in LineMerger package
406 - Changed operation/valid/*NestedRingTester classes interface
407 to use Coordinate pointers instead of copies.
408 - Changed EdgeIntersectionList to use a set instead of a vector
409 - Changed DepthSegment to store a real Coordinate rather then a pointer.
410 - Changed SubgraphDepthLocater to store real containers rather then
412 - Changed BufferSubgraph to store a real RightmostEdgeFinder and real
413 containers rather then pointers.
414 - CoordinateSequence API changes:
415 - point index and size related functions
416 use unsigned int rather then int
417 - Changed EdgeEndStar to maintain a single container for EdgeEnds
418 - Changed PlanarGraph::addEdges to take a const vector by ref
419 rathern then a non-const vector by pointer
420 - Changed EdgeList::addAll to take a const vector by ref
421 rather then a non-const vector by pointer
422 - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *)
423 const to CoordinateSequence
424 - LineBuilder::lineEdgesList made a real vector, rather then pointer
426 - SegmentString::eiList made a real SegmentNodeList, rather then
427 a pointer (private member)
428 - Removed coordinate copies in ElevationMatrix::elevate
429 - Changed CoordinateFilter interface to have a const method
430 for filter_rw, updated interfaces using this to take
431 const CoordinateFilter (apply_rw).
436 - Added version.in.vc to distribution
440 - Support for MingW builds
441 - Bugfix in Polygonizer chocking on invalid LineString inputs
442 - CAPI: small leak removed in GEOSHasZ()
446 - Performance improvement in OverlayOp::insertUniqueEdge()
447 - CoordinateSequence copy removal in EdgeRing
448 - Minor memory allocation improvements
449 - Higher dimensions interface for CoordinateSequence
450 - Added getCoordinatesRO for Point class
452 - NEW Simplified and stabler C API
456 - Severe BUGFIX in BufferSubgraphGT and other functions used
457 as StrictWeakOrdering predicates for sort()
461 - win32/mingw build support
462 - Segfault fix in LinearRing and LineString constructors
463 - Segfault fix in Polygonizer
464 - XMLTester installed by default
465 - XMLTester code cleanup
466 - Fixed handling of collection input in GeometryFactory::buildGeometry
467 - Added shortcircuit test for Union operation
468 - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing()
469 - Performance improvements in CGAlgorithms::isOnLine()
470 - Other minor performance improvements
471 - New Node::isIncidentEdgeInResult() method
472 - OverlayOp's PointBuilder performance improvement by reduction
473 of LineIntersector calls.
474 - Optimizations in Buffer operation
475 - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert
479 - Segfault fix in Point::isEmpty
480 - Mem Leak fix in OffsetCurveBuilder::getRingCurve
481 - Bugfix in LineSegment::reverse
482 - Added multipolygon buffering test in source/test/testLeaksBig
483 - Ported JTS robustness patch for RobustLineIntersector
484 - Removed useless Coordinate copies in OverlayOp::mergeZ()
485 - Avoided throws by IsValid on invalid input
486 - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream
488 - Better support for older compilers (Polygonizer::LineStringAdder friendship)
489 - Removed useless Coordinate copies in CGAlgorithms::isOnLine()
490 - Added support for polygonize and parametrized buffer tests in XMLTester
491 - Fixed support for --includedir and --libdir
492 - Fixed Z interpolation in LineIntersector
493 - Handled NULL results from getCentroid() in XMLTester
494 - Segfault fix in (EMPTY)Geometry::getCentroid()
495 - Made polygon::getBoundary() always OGC-valid (no LinearRings)
496 - Input checking and promoting in GeometryFactory::createMultiLineString()
497 - Segfault fix in GeometryEditor::editPolygon()
502 - Fixed uninitialized Coordinate in TopologyException
503 - Added install of version.h, platform.h and timeval.h
504 - Memleak fix in PolygonizeGraph
505 - Memleak fix in OverlayOp
506 - Compiler warnings removal
508 - Z interpolation in overlay operations
509 - Debian package build scripts
514 - Added Polygonizer and LineMerger classes.
515 - python wrapper examples
516 - General cleanup / warnings removal
517 - cleaner win32 / older copilers builds
518 - Reduced heap allocations
519 - debian package builder scripts
520 - reduction of standard C lib headers dependency
521 - Z support in overlay operations.
526 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList
527 renamed to DefaultCoordinateSequence to reflect JTS changes.
528 DefaultCoordinateSequenceFactory and CoordinateSequenceFactory
529 got same interface as JTS.
530 - Added geos/version.h defining versioning infos
531 - Added geos.h for quick inclusion. It will include geos/geom.h,
532 new geos/version.h, geos/util.h geos/io.h and geos/unload.h
533 (geometry input/output, exceptions, operations).
534 - Added a geos::version() function showing GEOS and equivalent
535 JTS versions as strings.
536 - All geometry constructors take ownership of given arguments.
537 GeometryFactory provides pass-by-reference geometry creators
538 to take care of a deep-copy.
539 - GeometryFactory::createMultiPoint(const CoordinateList *)
541 GeometryFactory::createMultiPoint(const CoordinateList &)
542 to reflect copy semantic
543 - GeometryFactory: EMPTY geometry creation do now have their
544 own constructors taking no arguments.
545 - Geometry constructors taking PrecisionModel and SRID have
546 been dropped. You have to use GeometryFactory instead.
547 - WKTWriter default constructor has been dropped. You need
548 to initialize it with an explicit GeometryFactory