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