updates add some missing ticket items and add ticket numbers where missing
[geos.git] / NEWS
bloba3356e88abbd37b17c35b5d7cbd18bd1f0987abc
1 Changes in 3.4.0
2 2013-08-??
4 - New things:
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
16 - C++ API changes:
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)
29   
30 - Bug fixes / improvements
31   - A point interpolated from a line does not always intersect 
32     the same line (#323) 
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
37     exception (#605)
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)
44   
45 Changes in 3.3.8
46 2013-02-28
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)
54 Changes in 3.3.7
55 2013-01-22 
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)
65 Changes in 3.3.6
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)
72 Changes in 3.3.5
73 2012-06-25
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)
81 Changes in 3.3.4
82 2012-05-31
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)
94 Changes in 3.3.3
95 2012-04-01
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)
102 Changes in 3.3.2
103 2012-01-05
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)
121 Changes in 3.3.1
122 2011-09-27
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)
136 Changes in 3.3.0
137 2011-05-30
139 - New things:
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
144           passing flags.
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
151           the polygonizer
152   - CAPI: GEOSOrientationIndex
153   - CAPI: GEOSSharedPaths to find shared paths and their orientation
154   - CAPI: GEOSSnap 
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
178     (via safeOctant)
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)
186 Changes in 3.2.0 
187 2009-12-14
189 - Add Single-sided buffer operation
190 - JTS-1.10 sync ...
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
198     (earlier exit)
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
204 Changes in 3.1.0
206 - PreparedGeometry operations for very fast predicate testing.
207   - Intersects()
208   - Covers() 
209   - CoveredBy()
210   - ContainsProperly()
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
219 Changes in 3.0.0
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.
225 - New things:
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
229           binary operations.
230         - Added covers() and coveredBy() predicates to Geometry class
231         - Added overlay::overlayOp() adapter class
232         - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
233           to the C API
234         - Added closed ring checks in IsValidOp
235         - Multi-input support in XMLTester 
236         - HEXWKB I/O
237         - Envelope(string) ctor
238         - Ruby interface
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
244           class.
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)
265 - Optimizations:
266         - WKT parser speedup
267         - Function inlining
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
281           contains() ops
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
287 - Semantic changes
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
295           EMPTY geoms
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.
301 - Correctness:
302         - More const-correct signatures
303         - Stronger methods typing (removed some void * args).
304         - Changed index-related funx signatures to use size_t
305           rather then int
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.
311 - Layout changes:
312         - Namespaces mapping JTS packages
313         - Renamed classes after JTS names (namespaces use made this possible
314           w/out name clashes)
315         - Splitted headers, for build speedup and possible API reduction.
316         - Moved source/bigtest and source/test to tests/bigtest
317           and test/xmltester
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.
325 - Bug fixes:
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
337           binding options.
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
348           pointers.
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
362           (private member)
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).
371 Changes in 2.2.4
373         - Added version.in.vc to distribution
375 Changes in 2.2.1
377 - Support for MingW builds
378 - Bugfix in Polygonizer chocking on invalid LineString inputs
379 - CAPI: small leak removed in GEOSHasZ() 
381 Changes in 2.2.0
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
388 - NEW WKB IO
389 - NEW Simplified and stabler C API 
391 Changes in 2.1.4
393 - Severe BUGFIX in BufferSubgraphGT and other functions used
394   as StrictWeakOrdering predicates for sort()
396 Changes in 2.1.3
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
414 Changes in 2.1.2
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
424   instead of sprintf)
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()
437 Changes in 2.1.1
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
444 - Cleaner w32 build
445 - Z interpolation in overlay operations
446 - Debian package build scripts
449 Changes in 2.1.0
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.
461 Changes in 2.0.0
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 *)
477   has been renamed to
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