5 - CAPI: GEOSDistanceIndexed (#795, Dan Baston)
6 - CAPI: GEOSFrechetDistance (#797, Shinichi SUGIYAMA)
11 - Bug fixes / improvements
12 - Fix GEOSSTRtree_nearest_r signature and add implementation (#796)
13 - Fix --static-clibs and --static-cclibs returns from geos-config
14 - Fix WKB representation of empty polygon (#680).
15 - Fix empty GEOSSimplify return on inner ring collapse (#741)
20 - Important / Breaking Changes:
21 - The PHP binding moved to its own repository:
22 http://git.osgeo.org/gogs/geos/php-geos (#765)
24 - CAPI: GEOSGeom_{get,set}UserData (Rashad Kanavath)
25 - CAPI: GEOSGeom_{set,get}Precision (#713)
26 - CAPI: GEOSMinimumRotatedRectangle and GEOSMinimumWidth
28 - CAPI: GEOSSTRtree_nearest (#768, Dan Baston)
29 - CAPI: GEOSMinimumClearance and GEOSMinimumClearanceLine
32 - Automatic memory management for GeometryFactory objects
40 - PHP: Geometry->normalize method
41 - GEOS_USE_ONLY_R_API macro support (#695)
42 - PHP: WKBReader->read() & WKBWriter::write() methods (Benjamin Morel)
43 - GEOSClipByRect (#699, Mika Heiskanen, Sandro Santilli)
44 - CAPI: thread-safe message handling API (#663, Pepijn Van Eeckhoudt)
46 - Speed-up intersection and difference between geometries
47 with small bounding box overlap.
48 - CAPI: add MULTILINESTRING support for GEOSisClosed (Benjamin Morel)
50 - Added no-parameter CoordinateSequenceFactory::create method (Sandro Mani)
55 - Bug fixes / improvements
56 - Use a double for PrecisionModel scale, avoiding overflows
57 should fix 32-bit regression failures (#652)
58 - isnan workaround OS detection missing NetBSD, DragonFly, Sun nuance (#650)
59 - Do not distribute platform.h and version.h, but install both (#601)
60 - Non-standard ChangeLog file in 3.4.0 and 3.4.1 releases (#654)
61 - new travis bot (#657)
62 - accept multiple Nan representations (#656)
68 - Bug fixes / improvements
69 - Assertion failure snapping line to points of rectangle
70 smaller than tolerance (#649)
71 - Can't build using cmake with tar ball (#644)
77 - Delaunay Triangulation API (#487, #565, #570, #567)
78 - Interruptibility API (C and C++)
79 - CAPI: GEOSNode (#496) - PHP: Geometry->node
80 - GeometryPrecisionReducer class (#496, #526)
81 - BufferInputLineSimplifier header exposed (#548)
82 - New Centroid class supporting mixed geometry components (#612)
83 - io::Writer::reserve() method
84 - CAPI: GEOSNearestPoints
85 - Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497)
86 - Early bail out of overlay exception if input is invalid
89 - New noding::GeometryNoder class
90 - Added BufferOp::setSingleSided
91 - Signature of most functions taking a Label changed to take it
92 by reference rather than pointer.
93 - Signature of most functions taking an IntersectionMatrix changed
94 to take it by reference rather than pointer.
95 - GraphComponent::label is now a Label value (from a pointer)
96 - NodedSegmentString takes ownership of CoordinateSenuence now
97 - io::Writer's toString() returns by const ref, write() takes a const ref
98 - Unify prototypes of WKTReader and WKBReader constructor (#310)
99 - GeometryCollection::computeEnvelopInternal and
100 GeometryCollection::compareToSameClass are marked virtual (#478)
102 - Bug fixes / improvements
103 - A point interpolated from a line does not always intersect
105 - Port ConvexHull robustness fix from JTS-1.13 (#457)
106 - Improve Overlay robustness by reducing input precision on topology
107 exception and by refusing to accept unnoded output (#459)
108 - Improve Buffer robustness by reducing input precision on topology
110 - Mismatch segment sides in OffsetCurveBuilder (#633 )
111 - Fixed Linear Referencing API to handle MultiLineStrings consistently
112 by always using the lowest possible index value, and by trimming
113 zero-length components from results (#323)
114 - Fixed CMake configuration to set correct SOVERSION (current - age)
115 - Fix EMPTY return from single-point lines and zero-length polygons (#612)
116 - CMakeLists.txt, tools/geos_svn_revision_cmake.h.in: Add
117 geos_svn_revision.h generator to CMake config (#643)
118 - Makefile.vc 'clean' step leaks obj files (#607)
123 - Bug fixes / improvements
124 - Fix OffsetCurve op in presence of duplicated vertices (#602)
125 - Fix LineSegmentVisitor copy ctor (#636)
126 - Fix area boundary return from GEOSPointOnSurface (#623)
127 - Speedup GEOSWKBReader_read (#621)
128 - Fix RobustLineIntersector handling of invalid intersection points (#622)
129 - Reduce likelyhood of invalid output from snap operation (#629, #501)
130 - Reduce memory fragmentation of prepared Polygon/Point intersection op
131 - Fix mingw64 compile (#630)
132 - Fix bug in HotPixel constructor (#635)
133 - Fix install location of linearref headers (#624)
134 - Fix multi-geometry constructor to drop SRID from components (#583)
139 - Bug fixes / improvements
140 - IsValidOp: throw proper error on nested shells (#608)
141 - Fix header guards (#617, #618, #619)
142 - WKTWriter::appendCoordinate optimisation
143 - Fix centroid computation for collections with empty components (#582)
148 - Bug fixes / improvements
149 - Fix abort in RightmostEdgeFinder (#605)
150 - Do not force precision reduction below 6 significant digits
151 while trying to obtain a valid Buffer output (#605)
152 - Fix GEOSPointOnSurface with zero-length linestring (#609)
153 - Fix EMPTY return from zero-area polygon (#613)
154 - Segfault from symdifference (#615)
157 2012-11-15 -- that's Post-GIS day !
159 - Bug fixes / improvements
160 - Add support for testing with phpunit 3.6 (not loosing support for 3.4)
161 - Segfault from intersection (#586, #598, #599)
166 - Bug fixes / improvements
167 - Correctly increment CAPI lib version from 3.3.3 (#558)
168 - Port robustness fix to CentroidArea (#559)
169 - Always return POINT from GEOSGetCentroid, even for EMPTY (#560)
170 - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561)
175 - Bug fixes / improvements
176 - Do not abort on NaN overlay input (#530)
177 - Reduce CommonBitsRemover harmful effects during overlay op (#527)
178 - Better cross-compiler support (#534)
179 - Enable overlay ops short-circuits (#542)
180 - Envelope-based short-circuit for symDifference (#543)
181 - Fix support for PHP 5.4 (#513)
182 - Fix TopologyPreservingSimplifier invalid output on closed line (#508)
183 - Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545)
188 - Bug fixes / improvements
189 - Fix simplification of collections with empty items (#519)
190 - Fix MSVC compilation of ambiguous log() call (#506)
191 - Fix CMake issues with std:: namespace detection (#493)
196 - Bug fixes / improvements
197 - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489)
198 - Missing versions update in CMake configuration (#490)
199 - Fix noding of self-intersecting lines through UnaryUnion (#482)
200 - Fix handling of collapsed edges skipping in BufferOp (#494)
201 - Print up to 18 digits of precision for TopologyException points
202 - Fix noding with reduced precision in Buffer operation (#473)
203 - Fix HotPixel original point invalidation (#498)
204 - Fix CascadedPolygonUnion to discard non-polygonal components (#499)
205 - Improve buffer robustness by reverting to non-snaprounding noder (#495)
206 - Fix C++11 build by avoiding std::pair<auto_ptr> (#491)
207 - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497)
208 - Apply shoelace formula for area calculation (#485)
209 - Fix default initialization issue for clang (#500)
210 - Improve overlay robustness by fixing areal validity on snapping (#488)
215 - Bug fixes / improvements
216 - Fix memory leak on invalid geometry in InteriorPointArea (#475)
217 - ValidOp abort in presence of 2 touching holes forming an island (#449)
218 - Enable prepared intersects operation for points
219 - Fortify suspicious code found by static analisys tools
220 - Fix for SOLARIS build (#461)
221 - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454)
222 - Fix Geometry::clone to copy SRID (#464)
223 - Fix for clang builds (#463)
224 - Fix out-of-place builds for python binding (#332) and regress testing
225 - Fix OS X framework cmake build (#385)
231 - CAPI: GEOSBufferWithParams (allows single sided buffers)
232 - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer
233 - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion
234 - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows
236 - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r
237 - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString
238 GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection
239 - CAPI: GEOSGeom_extractUniquePoints
240 - CAPI: GEOSGetGeometryN support for single geometries
241 - CAPI: GEOSPolygonize_full to return all informations computed by
243 - CAPI: GEOSOrientationIndex
244 - CAPI: GEOSSharedPaths to find shared paths and their orientation
246 - CAPI: GEOSRelatePatternMatch
247 - CAPI: GEOSCovers, GEOSCoveredBy (#396)
248 - CAPI: GEOSRelateBoundaryNodeRule (#399)
249 - CAPI: GEOSGeom_getCoordinateDimension() (#311)
250 - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292)
251 - PHP: new PHP5 bindings based on CAPI
252 - Semantic C++ API changes:
253 - Geometry inheritance chain changed to introduce Puntal, Lineal
254 and Polygonal classes (virtual inheritance introduced)
255 - Polygonizer::getInvalidRingLines retains ownership of vector elements
256 - Geometry::isWithinDistance method is now const
257 - Polygonizer::getCutEdges returns by const ref
258 - Polygonizer::getDangles returns by const ref
259 - Empty LinearRings are closed by definition
260 - Bug fixes / improvements
261 - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs
262 - Invalid compound geometries reported as valid (#333)
263 - Return up to 15 digits of precision from GEOSisValidReason_t (#329)
264 - CAPI: do not leak contexts when using the non-reentrant interface
265 - Fix duplicated dangles returned by Polygonizer
266 - Fix SnapIfNeededOverlayOp to throw the originating exception
267 - Fixed LineMerger to skip lines with only a single unique coordinate
268 - Fix NodedSegmentString to handle zero-length line segments correctly
270 - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly
271 - Added illegal state check in LineSegment::pointAlongOffset()
272 - Improved performance of RectangleIntersects by always using
273 segment-scanning and refining SegmentIntersectionTester
274 - Reduce memory use in PreparedGeometry predicates (#342)
275 - Fix infinite loop in RobustDeterminant with nan/inf input (#357)
280 - Add Single-sided buffer operation
282 - Drastically improved Buffer speed (20x for a case in testsuite)
283 - Improved EdgeList duplicate edge finding
284 - Added algorithm::distance package
285 - Added algorithm::Angle class
286 - Added algorithm::BoundaryNodeRule class
287 - IsSimpleOp can now return non-simple location coordinate
288 - DistanceOp can now check for 'within distance' predicate
290 - MultiPolygon::getBoundary always return MultiLineString, also
291 when the result is the EMPTY geometry.
292 - Various bug and leak fixes, optimizations
293 - Replace MarkupSTL with tinyXML
297 - PreparedGeometry operations for very fast predicate testing.
302 - Easier builds under MSVC and OpenSolaris
303 - Thread-safe CAPI option
304 - IsValidReason added to CAPI
305 - GEOSPolygonizer_getCutEdges added to CAPI
306 - CascadedUnion operation for fast unions of geometry sets
307 - Numerous bug fixes.
308 http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority
312 These are mostly ABI breaking changes.
313 In few cases the API also changed, but the most external one
314 (the documented one) should be unchanged.
317 - Added geom::BinaryOp class performing a binary operation
318 using different heuristics to reduce probability of robustness
319 issues. Both C-API and XMLTester now use this class for
321 - Added covers() and coveredBy() predicates to Geometry class
322 - Added overlay::overlayOp() adapter class
323 - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
325 - Added closed ring checks in IsValidOp
326 - Multi-input support in XMLTester
328 - Envelope(string) ctor
330 - New ShortCircuitedGeometryVisitor class
331 - New operation/predicate package
332 - Added CGAlgorithms::isPointInRing() version working with
333 Coordinate::ConstVect type (faster!)
334 - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence
336 - Moved GetNumGeometries() and GetGeometryN() interfaces
337 from GeometryCollection to Geometry class.
338 - New planarSubgraph class
339 - New ConnectedSubgraphFinder class.
340 - New LineSequencer class
341 - New WKTWriter::toLineString and ::toPoint convenience methods
342 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
343 - New WKTWriter::toLineString and ::toPoint convenience methods
344 - New IsValidOp::setSelfTouchingRingFormingHoleValid method
345 - New Envelope::centre()
346 - New Envelope::intersection(Envelope)
347 - New Envelope::expandBy(distance, [ydistance])
348 - New LineString::reverse()
349 - New MultiLineString::reverse()
350 - New Geometry::buffer(distance, quadSeg, endCapStyle)
351 - New SnapRounding code
352 - New size() and operator[] interfaces to CoordinateSequence
353 - New ScaledNoder class
354 - New unit tests (make check rule)
359 - Coordinate copies reduction
360 - Heap allocations reduction
361 - More classes made final
362 - Better use of standard containers
363 - Use of singletons when appropriate
364 - Removed many function calls in loops' end conditions
365 - Improved XMLTester output and user interface
366 - Improved memory use in geos::geom::util::PolygonExtractor
367 - Ported JTS-1.7 version of ConvexHull with big attention to
368 memory usage optimizations.
369 - Changed CoordinateArrayFilter to reduce memory copies
370 - Changed UniqueCoordinateArrayFilter to reduce memory copies
371 - Added rectangle-based optimizations of intersects() and
373 - Inlined all planarGraphComponent class
374 - More iterators returning methods and inlining in planargraph.
375 - Obsoleted toInternalGeometry/fromInternalGeometry
376 - Improved buffering speed and robustness by using Snap Rounding
380 - SegmentString: getCoordinates() doesn't return a clone
381 anymore, getCoordinatesRO() obsoleted.
382 - JTS packages mapped to geos:: sub-namespaces
383 - Geometry::getInteriorPoint() returns NULL if called
384 against an EMPTY geom
385 - LineString::get{Start,End}Point return NULL for
387 - GEOSException is now derived by std::runtim_exception
388 and thrown by const reference.
389 - Geometry constructors made protected, to force use
390 of a GeometryFactory.
393 - More const-correct signatures
394 - Stronger methods typing (removed some void * args).
395 - Changed index-related funx signatures to use size_t
397 - More const-correctness in Buffer "package"
398 - Bugfix in LineString::getCoordinate() failing to return
399 NULL from getCoordinat() when empty.
400 - Use unsigned int for indexes and sizes.
403 - Namespaces mapping JTS packages
404 - Renamed classes after JTS names (namespaces use made this possible
406 - Splitted headers, for build speedup and possible API reduction.
407 - Moved source/bigtest and source/test to tests/bigtest
409 - Moved C-API in it's own top-level dir capi/
410 - Reworked automake scripts to produce a static lib for each subdir
411 and then link all subsystem's libs togheter
412 - Renamed DefaultCoordinateSequence to CoordinateArraySequence.
413 - Renamed OverlayOp opcodes by prepending the 'op' prefix, and
414 given the enum a name (OpCode) for type-safety.
417 - Fixed bug causing redundant linestrings to be returned in the
418 result of overlaying polygons containing touching holes (#13)
419 - Fixed integer conversion bug
420 - Fixed PointLocator handling of LinearRings
421 - Added missing ::clone() methods for Multi* geoms
423 - (Partial) Detailed list of changes:
424 - Changed SegmentNode to contain a *real* Coordinate (not a pointer)
425 to reduce construction costs.
426 - Changed geomgraph nodeMap to use Coordinate pointers as keys
427 - Envelope destructor made non-virtual to give compiler more static
429 - Changed BufferSubgraph::computeDepths to use a set instead of a
430 vector for checking visited Edges.
431 - Made LineIntersector a concrete type
432 - Node::isIncidentEdgeInResult() method made virtual
433 - Const-correct signatures in LineMerger package
434 - Changed operation/valid/*NestedRingTester classes interface
435 to use Coordinate pointers instead of copies.
436 - Changed EdgeIntersectionList to use a set instead of a vector
437 - Changed DepthSegment to store a real Coordinate rather then a pointer.
438 - Changed SubgraphDepthLocater to store real containers rather then
440 - Changed BufferSubgraph to store a real RightmostEdgeFinder and real
441 containers rather then pointers.
442 - CoordinateSequence API changes:
443 - point index and size related functions
444 use unsigned int rather then int
445 - Changed EdgeEndStar to maintain a single container for EdgeEnds
446 - Changed PlanarGraph::addEdges to take a const vector by ref
447 rathern then a non-const vector by pointer
448 - Changed EdgeList::addAll to take a const vector by ref
449 rather then a non-const vector by pointer
450 - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *)
451 const to CoordinateSequence
452 - LineBuilder::lineEdgesList made a real vector, rather then pointer
454 - SegmentString::eiList made a real SegmentNodeList, rather then
455 a pointer (private member)
456 - Removed coordinate copies in ElevationMatrix::elevate
457 - Changed CoordinateFilter interface to have a const method
458 for filter_rw, updated interfaces using this to take
459 const CoordinateFilter (apply_rw).
464 - Added version.in.vc to distribution
468 - Support for MingW builds
469 - Bugfix in Polygonizer chocking on invalid LineString inputs
470 - CAPI: small leak removed in GEOSHasZ()
474 - Performance improvement in OverlayOp::insertUniqueEdge()
475 - CoordinateSequence copy removal in EdgeRing
476 - Minor memory allocation improvements
477 - Higher dimensions interface for CoordinateSequence
478 - Added getCoordinatesRO for Point class
480 - NEW Simplified and stabler C API
484 - Severe BUGFIX in BufferSubgraphGT and other functions used
485 as StrictWeakOrdering predicates for sort()
489 - win32/mingw build support
490 - Segfault fix in LinearRing and LineString constructors
491 - Segfault fix in Polygonizer
492 - XMLTester installed by default
493 - XMLTester code cleanup
494 - Fixed handling of collection input in GeometryFactory::buildGeometry
495 - Added shortcircuit test for Union operation
496 - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing()
497 - Performance improvements in CGAlgorithms::isOnLine()
498 - Other minor performance improvements
499 - New Node::isIncidentEdgeInResult() method
500 - OverlayOp's PointBuilder performance improvement by reduction
501 of LineIntersector calls.
502 - Optimizations in Buffer operation
503 - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert
507 - Segfault fix in Point::isEmpty
508 - Mem Leak fix in OffsetCurveBuilder::getRingCurve
509 - Bugfix in LineSegment::reverse
510 - Added multipolygon buffering test in source/test/testLeaksBig
511 - Ported JTS robustness patch for RobustLineIntersector
512 - Removed useless Coordinate copies in OverlayOp::mergeZ()
513 - Avoided throws by IsValid on invalid input
514 - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream
516 - Better support for older compilers (Polygonizer::LineStringAdder friendship)
517 - Removed useless Coordinate copies in CGAlgorithms::isOnLine()
518 - Added support for polygonize and parametrized buffer tests in XMLTester
519 - Fixed support for --includedir and --libdir
520 - Fixed Z interpolation in LineIntersector
521 - Handled NULL results from getCentroid() in XMLTester
522 - Segfault fix in (EMPTY)Geometry::getCentroid()
523 - Made polygon::getBoundary() always OGC-valid (no LinearRings)
524 - Input checking and promoting in GeometryFactory::createMultiLineString()
525 - Segfault fix in GeometryEditor::editPolygon()
530 - Fixed uninitialized Coordinate in TopologyException
531 - Added install of version.h, platform.h and timeval.h
532 - Memleak fix in PolygonizeGraph
533 - Memleak fix in OverlayOp
534 - Compiler warnings removal
536 - Z interpolation in overlay operations
537 - Debian package build scripts
542 - Added Polygonizer and LineMerger classes.
543 - python wrapper examples
544 - General cleanup / warnings removal
545 - cleaner win32 / older copilers builds
546 - Reduced heap allocations
547 - debian package builder scripts
548 - reduction of standard C lib headers dependency
549 - Z support in overlay operations.
554 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList
555 renamed to DefaultCoordinateSequence to reflect JTS changes.
556 DefaultCoordinateSequenceFactory and CoordinateSequenceFactory
557 got same interface as JTS.
558 - Added geos/version.h defining versioning infos
559 - Added geos.h for quick inclusion. It will include geos/geom.h,
560 new geos/version.h, geos/util.h geos/io.h and geos/unload.h
561 (geometry input/output, exceptions, operations).
562 - Added a geos::version() function showing GEOS and equivalent
563 JTS versions as strings.
564 - All geometry constructors take ownership of given arguments.
565 GeometryFactory provides pass-by-reference geometry creators
566 to take care of a deep-copy.
567 - GeometryFactory::createMultiPoint(const CoordinateList *)
569 GeometryFactory::createMultiPoint(const CoordinateList &)
570 to reflect copy semantic
571 - GeometryFactory: EMPTY geometry creation do now have their
572 own constructors taking no arguments.
573 - Geometry constructors taking PrecisionModel and SRID have
574 been dropped. You have to use GeometryFactory instead.
575 - WKTWriter default constructor has been dropped. You need
576 to initialize it with an explicit GeometryFactory