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