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