Throw an exception rather than aborting on NaN overlay input (#530)
[geos.git] / NEWS
blob920cb4c4e215a8e366508aae001906f243a6f565
1 Changes in 3.3.4
2 2012-??-??
4 - Bug fixes / improvements
5     - Do not abort on NaN overlay input (#530)
6     - Reduce CommonBitsRemover harmful effects during overlay op (#527)
8 Changes in 3.3.3
9 2012-04-01
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)
16 Changes in 3.3.2
17 2012-01-05
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)
35 Changes in 3.3.1
36 2011-09-27
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)
50 Changes in 3.3.0
51 2011-05-30
53 - New things:
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
58           passing flags.
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
65           the polygonizer
66   - CAPI: GEOSOrientationIndex
67   - CAPI: GEOSSharedPaths to find shared paths and their orientation
68   - CAPI: GEOSSnap 
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
92     (via safeOctant)
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)
100 Changes in 3.2.0 
101 2009-12-14
103 - Add Single-sided buffer operation
104 - JTS-1.10 sync ...
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
112     (earlier exit)
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
118 Changes in 3.1.0
120 - PreparedGeometry operations for very fast predicate testing.
121   - Intersects()
122   - Covers() 
123   - CoveredBy()
124   - ContainsProperly()
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
133 Changes in 3.0.0
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.
139 - New things:
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
143           binary operations.
144         - Added covers() and coveredBy() predicates to Geometry class
145         - Added overlay::overlayOp() adapter class
146         - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
147           to the C API
148         - Added closed ring checks in IsValidOp
149         - Multi-input support in XMLTester 
150         - HEXWKB I/O
151         - Envelope(string) ctor
152         - Ruby interface
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
158           class.
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)
179 - Optimizations:
180         - WKT parser speedup
181         - Function inlining
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
195           contains() ops
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
201 - Semantic changes
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
209           EMPTY geoms
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.
215 - Correctness:
216         - More const-correct signatures
217         - Stronger methods typing (removed some void * args).
218         - Changed index-related funx signatures to use size_t
219           rather then int
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.
225 - Layout changes:
226         - Namespaces mapping JTS packages
227         - Renamed classes after JTS names (namespaces use made this possible
228           w/out name clashes)
229         - Splitted headers, for build speedup and possible API reduction.
230         - Moved source/bigtest and source/test to tests/bigtest
231           and test/xmltester
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.
239 - Bug fixes:
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
251           binding options.
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
262           pointers.
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
276           (private member)
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).
285 Changes in 2.2.4
287         - Added version.in.vc to distribution
289 Changes in 2.2.1
291 - Support for MingW builds
292 - Bugfix in Polygonizer chocking on invalid LineString inputs
293 - CAPI: small leak removed in GEOSHasZ() 
295 Changes in 2.2.0
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
302 - NEW WKB IO
303 - NEW Simplified and stabler C API 
305 Changes in 2.1.4
307 - Severe BUGFIX in BufferSubgraphGT and other functions used
308   as StrictWeakOrdering predicates for sort()
310 Changes in 2.1.3
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
328 Changes in 2.1.2
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
338   instead of sprintf)
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()
351 Changes in 2.1.1
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
358 - Cleaner w32 build
359 - Z interpolation in overlay operations
360 - Debian package build scripts
363 Changes in 2.1.0
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.
375 Changes in 2.0.0
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 *)
391   has been renamed to
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