Reduce CommonBitsRemover harmful effects during overlay op (#527)
[geos.git] / NEWS
blobc748b0c50c8abbd41678a53e0b031c620b778a25
1 Changes in 3.3.4
2 2012-??-??
4 - Bug fixes / improvements
5     - Reduce CommonBitsRemover harmful effects during overlay op (#527)
7 Changes in 3.3.3
8 2012-04-01
10 - Bug fixes / improvements
11     - Fix simplification of collections with empty items (#519)
12     - Fix MSVC compilation of ambiguous log() call (#506)
13     - Fix CMake issues with std:: namespace detection (#493)
15 Changes in 3.3.2
16 2012-01-05
18 - Bug fixes / improvements
19     - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489)
20     - Missing versions update in CMake configuration (#490)
21     - Fix noding of self-intersecting lines through UnaryUnion (#482)
22     - Fix handling of collapsed edges skipping in BufferOp (#494)
23     - Print up to 18 digits of precision for TopologyException points
24     - Fix noding with reduced precision in Buffer operation (#473)
25     - Fix HotPixel original point invalidation (#498)
26     - Fix CascadedPolygonUnion to discard non-polygonal components (#499)
27     - Improve buffer robustness by reverting to non-snaprounding noder (#495)
28     - Fix C++11 build by avoiding std::pair<auto_ptr> (#491)
29     - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497)
30     - Apply shoelace formula for area calculation (#485)
31     - Fix default initialization issue for clang (#500)
32     - Improve overlay robustness by fixing areal validity on snapping (#488)
34 Changes in 3.3.1
35 2011-09-27
37 - Bug fixes / improvements
38   - Fix memory leak on invalid geometry in InteriorPointArea (#475)
39   - ValidOp abort in presence of 2 touching holes forming an island (#449)
40   - Enable prepared intersects operation for points
41   - Fortify suspicious code found by static analisys tools
42   - Fix for SOLARIS build (#461)
43   - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454)
44   - Fix Geometry::clone to copy SRID (#464)
45   - Fix for clang builds (#463)
46   - Fix out-of-place builds for python binding (#332) and regress testing
47   - Fix OS X framework cmake build (#385)
49 Changes in 3.3.0
50 2011-05-30
52 - New things:
53   - CAPI: GEOSBufferWithParams (allows single sided buffers)
54   - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer
55   - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion
56   - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows
57           passing flags.
58   - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r
59   - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString
60           GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection
61   - CAPI: GEOSGeom_extractUniquePoints
62   - CAPI: GEOSGetGeometryN support for single geometries
63   - CAPI: GEOSPolygonize_full to return all informations computed by
64           the polygonizer
65   - CAPI: GEOSOrientationIndex
66   - CAPI: GEOSSharedPaths to find shared paths and their orientation
67   - CAPI: GEOSSnap 
68   - CAPI: GEOSRelatePatternMatch 
69   - CAPI: GEOSCovers, GEOSCoveredBy (#396) 
70   - CAPI: GEOSRelateBoundaryNodeRule (#399) 
71   - CAPI: GEOSGeom_getCoordinateDimension() (#311)
72   - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292)
73   -  PHP: new PHP5 bindings based on CAPI
74 - Semantic C++ API changes:
75   - Geometry inheritance chain changed to introduce Puntal, Lineal
76     and Polygonal classes (virtual inheritance introduced)
77   - Polygonizer::getInvalidRingLines retains ownership of vector elements
78   - Geometry::isWithinDistance method is now const
79   - Polygonizer::getCutEdges returns by const ref
80   - Polygonizer::getDangles returns by const ref
81   - Empty LinearRings are closed by definition
82 - Bug fixes / improvements
83   - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs
84   - Invalid compound geometries reported as valid (#333)
85   - Return up to 15 digits of precision from GEOSisValidReason_t (#329)
86   - CAPI: do not leak contexts when using the non-reentrant interface
87   - Fix duplicated dangles returned by Polygonizer
88   - Fix SnapIfNeededOverlayOp to throw the originating exception
89   - Fixed LineMerger to skip lines with only a single unique coordinate
90   - Fix NodedSegmentString to handle zero-length line segments correctly
91     (via safeOctant)
92   - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly
93   - Added illegal state check in LineSegment::pointAlongOffset() 
94   - Improved performance of RectangleIntersects by always using
95     segment-scanning and refining SegmentIntersectionTester
96   - Reduce memory use in PreparedGeometry predicates (#342)
97   - Fix infinite loop in RobustDeterminant with nan/inf input (#357)
99 Changes in 3.2.0 
100 2009-12-14
102 - Add Single-sided buffer operation
103 - JTS-1.10 sync ...
104   - Drastically improved Buffer speed (20x for a case in testsuite)
105   - Improved EdgeList duplicate edge finding
106   - Added algorithm::distance package
107   - Added algorithm::Angle class
108   - Added algorithm::BoundaryNodeRule class
109   - IsSimpleOp can now return non-simple location coordinate
110   - DistanceOp can now check for 'within distance' predicate
111     (earlier exit)
112   - MultiPolygon::getBoundary always return MultiLineString, also
113     when the result is the EMPTY geometry.
114 - Various bug and leak fixes, optimizations
115 - Replace MarkupSTL with tinyXML
117 Changes in 3.1.0
119 - PreparedGeometry operations for very fast predicate testing.
120   - Intersects()
121   - Covers() 
122   - CoveredBy()
123   - ContainsProperly()
124 - Easier builds under MSVC and OpenSolaris
125 - Thread-safe CAPI option
126 - IsValidReason added to CAPI
127 - GEOSPolygonizer_getCutEdges added to CAPI
128 - CascadedUnion operation for fast unions of geometry sets
129 - Numerous bug fixes.
130   http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority
132 Changes in 3.0.0
134    These are mostly ABI breaking changes.
135    In few cases the API also changed, but the most external one
136    (the documented one) should be unchanged.
138 - New things:
139         - Added geom::BinaryOp class performing a binary operation
140           using different heuristics to reduce probability of robustness
141           issues. Both C-API and XMLTester now use this class for
142           binary operations.
143         - Added covers() and coveredBy() predicates to Geometry class
144         - Added overlay::overlayOp() adapter class
145         - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
146           to the C API
147         - Added closed ring checks in IsValidOp
148         - Multi-input support in XMLTester 
149         - HEXWKB I/O
150         - Envelope(string) ctor
151         - Ruby interface
152         - New ShortCircuitedGeometryVisitor class
153         - New operation/predicate package
154         - Added CGAlgorithms::isPointInRing() version working with
155           Coordinate::ConstVect type (faster!)
156         - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence
157           class.
158         - Moved GetNumGeometries() and GetGeometryN() interfaces
159           from GeometryCollection to Geometry class.
160         - New planarSubgraph class
161         - New ConnectedSubgraphFinder class.
162         - New LineSequencer class
163         - New WKTWriter::toLineString and ::toPoint convenience methods
164         - New IsValidOp::setSelfTouchingRingFormingHoleValid method
165         - New WKTWriter::toLineString and ::toPoint convenience methods
166         - New IsValidOp::setSelfTouchingRingFormingHoleValid method
167         - New Envelope::centre()
168         - New Envelope::intersection(Envelope)
169         - New Envelope::expandBy(distance, [ydistance])
170         - New LineString::reverse()
171         - New MultiLineString::reverse()
172         - New Geometry::buffer(distance, quadSeg, endCapStyle)
173         - New SnapRounding code
174         - New size() and operator[] interfaces to CoordinateSequence
175         - New ScaledNoder class
176         - New unit tests (make check rule)
178 - Optimizations:
179         - WKT parser speedup
180         - Function inlining
181         - Coordinate copies reduction
182         - Heap allocations reduction
183         - More classes made final
184         - Better use of standard containers
185         - Use of singletons when appropriate
186         - Removed many function calls in loops' end conditions
187         - Improved XMLTester output and user interface
188         - Improved memory use in geos::geom::util::PolygonExtractor
189         - Ported JTS-1.7 version of ConvexHull with big attention to
190           memory usage optimizations.
191         - Changed CoordinateArrayFilter to reduce memory copies
192         - Changed UniqueCoordinateArrayFilter to reduce memory copies
193         - Added rectangle-based optimizations of intersects() and
194           contains() ops
195         - Inlined all planarGraphComponent class
196         - More iterators returning methods and inlining in planargraph.
197         - Obsoleted toInternalGeometry/fromInternalGeometry 
198         - Improved buffering speed and robustness by using Snap Rounding
200 - Semantic changes
202         - SegmentString: getCoordinates() doesn't return a clone
203           anymore, getCoordinatesRO() obsoleted.
204         - JTS packages mapped to geos:: sub-namespaces
205         - Geometry::getInteriorPoint() returns NULL if called
206           against an EMPTY geom
207         - LineString::get{Start,End}Point return NULL for
208           EMPTY geoms
209         - GEOSException is now derived by std::runtim_exception
210           and thrown by const reference.
211         - Geometry constructors made protected, to force use
212           of a GeometryFactory.
214 - Correctness:
215         - More const-correct signatures
216         - Stronger methods typing (removed some void * args).
217         - Changed index-related funx signatures to use size_t
218           rather then int
219         - More const-correctness in Buffer "package"
220         - Bugfix in LineString::getCoordinate() failing to return
221           NULL from getCoordinat() when empty.
222         - Use unsigned int for indexes and sizes.
224 - Layout changes:
225         - Namespaces mapping JTS packages
226         - Renamed classes after JTS names (namespaces use made this possible
227           w/out name clashes)
228         - Splitted headers, for build speedup and possible API reduction.
229         - Moved source/bigtest and source/test to tests/bigtest
230           and test/xmltester
231         - Moved C-API in it's own top-level dir capi/
232         - Reworked automake scripts to produce a static lib for each subdir
233           and then link all subsystem's libs togheter
234         - Renamed DefaultCoordinateSequence to CoordinateArraySequence.
235         - Renamed OverlayOp opcodes by prepending the 'op' prefix, and
236           given the enum a name (OpCode) for type-safety.
238 - Bug fixes:
239         - Fixed bug causing redundant linestrings to be returned in the
240           result of overlaying polygons containing touching holes (#13)
241         - Fixed integer conversion bug
242         - Fixed PointLocator handling of LinearRings
243         - Added missing ::clone() methods for Multi* geoms 
245 - (Partial) Detailed list of changes:
246         - Changed SegmentNode to contain a *real* Coordinate (not a pointer)
247           to reduce construction costs.
248         - Changed geomgraph nodeMap to use Coordinate pointers as keys
249         - Envelope destructor made non-virtual to give compiler more static
250           binding options.
251         - Changed BufferSubgraph::computeDepths to use a set instead of a
252           vector for checking visited Edges.
253         - Made LineIntersector a concrete type
254         - Node::isIncidentEdgeInResult() method made virtual
255         - Const-correct signatures in LineMerger package
256         - Changed operation/valid/*NestedRingTester classes interface
257           to use Coordinate pointers instead of copies.
258         - Changed EdgeIntersectionList to use a set instead of a vector
259         - Changed DepthSegment to store a real Coordinate rather then a pointer.
260         - Changed SubgraphDepthLocater to store real containers rather then
261           pointers.
262         - Changed BufferSubgraph to store a real RightmostEdgeFinder and real
263           containers rather then pointers.
264         - CoordinateSequence API changes:
265                 - point index and size related functions
266                   use unsigned int rather then int
267         - Changed EdgeEndStar to maintain a single container for EdgeEnds 
268         - Changed PlanarGraph::addEdges to take a const vector by ref
269           rathern then a non-const vector by pointer
270         - Changed EdgeList::addAll to take a const vector by ref
271           rather then a non-const vector by pointer
272         - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *)
273           const to CoordinateSequence
274         - LineBuilder::lineEdgesList made a real vector, rather then pointer
275           (private member)
276         - SegmentString::eiList made a real SegmentNodeList, rather then
277           a pointer (private member)
278         - Removed coordinate copies in ElevationMatrix::elevate
279         - Changed CoordinateFilter interface to have a const method
280           for filter_rw, updated interfaces using this to take
281           const CoordinateFilter (apply_rw).
284 Changes in 2.2.4
286         - Added version.in.vc to distribution
288 Changes in 2.2.1
290 - Support for MingW builds
291 - Bugfix in Polygonizer chocking on invalid LineString inputs
292 - CAPI: small leak removed in GEOSHasZ() 
294 Changes in 2.2.0
296 - Performance improvement in OverlayOp::insertUniqueEdge()
297 - CoordinateSequence copy removal in EdgeRing
298 - Minor memory allocation improvements 
299 - Higher dimensions interface for CoordinateSequence
300 - Added getCoordinatesRO for Point class
301 - NEW WKB IO
302 - NEW Simplified and stabler C API 
304 Changes in 2.1.4
306 - Severe BUGFIX in BufferSubgraphGT and other functions used
307   as StrictWeakOrdering predicates for sort()
309 Changes in 2.1.3
311 - win32/mingw build support
312 - Segfault fix in LinearRing and LineString constructors
313 - Segfault fix in Polygonizer
314 - XMLTester installed by default
315 - XMLTester code cleanup
316 - Fixed handling of collection input in GeometryFactory::buildGeometry
317 - Added shortcircuit test for Union operation
318 - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing()
319 - Performance improvements in CGAlgorithms::isOnLine()
320 - Other minor performance improvements
321 - New Node::isIncidentEdgeInResult() method
322 - OverlayOp's PointBuilder performance improvement by reduction
323   of LineIntersector calls.
324 - Optimizations in Buffer operation
325 - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert
327 Changes in 2.1.2
329 - Segfault fix in Point::isEmpty
330 - Mem Leak fix in OffsetCurveBuilder::getRingCurve
331 - Bugfix in LineSegment::reverse
332 - Added multipolygon buffering test in source/test/testLeaksBig
333 - Ported JTS robustness patch for RobustLineIntersector
334 - Removed useless Coordinate copies in OverlayOp::mergeZ()
335 - Avoided throws by IsValid on invalid input
336 - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream
337   instead of sprintf)
338 - Better support for older compilers (Polygonizer::LineStringAdder friendship)
339 - Removed useless Coordinate copies in CGAlgorithms::isOnLine()
340 - Added support for polygonize and parametrized buffer tests in XMLTester
341 - Fixed support for --includedir and --libdir
342 - Fixed Z interpolation in LineIntersector
343 - Handled NULL results from getCentroid() in XMLTester
344 - Segfault fix in (EMPTY)Geometry::getCentroid()
345 - Made polygon::getBoundary() always OGC-valid (no LinearRings)
346 - Input checking and promoting in GeometryFactory::createMultiLineString()
347 - Segfault fix in GeometryEditor::editPolygon()
350 Changes in 2.1.1
352 - Fixed uninitialized Coordinate in TopologyException
353 - Added install of version.h, platform.h and timeval.h
354 - Memleak fix in PolygonizeGraph
355 - Memleak fix in OverlayOp
356 - Compiler warnings removal
357 - Cleaner w32 build
358 - Z interpolation in overlay operations
359 - Debian package build scripts
362 Changes in 2.1.0
364 - Added Polygonizer and LineMerger classes.
365 - python wrapper examples
366 - General cleanup / warnings removal
367 - cleaner win32 / older copilers builds
368 - Reduced heap allocations
369 - debian package builder scripts
370 - reduction of standard C lib headers dependency
371 - Z support in overlay operations.
374 Changes in 2.0.0
376 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList
377   renamed to DefaultCoordinateSequence to reflect JTS changes.
378   DefaultCoordinateSequenceFactory and CoordinateSequenceFactory
379   got same interface as JTS.
380 - Added geos/version.h defining versioning infos
381 - Added geos.h for quick inclusion. It will include geos/geom.h,
382   new geos/version.h, geos/util.h geos/io.h and geos/unload.h
383   (geometry input/output, exceptions, operations).
384 - Added a geos::version() function showing GEOS and equivalent
385   JTS versions as strings.
386 - All geometry constructors take ownership of given arguments.
387   GeometryFactory provides pass-by-reference geometry creators
388   to take care of a deep-copy.
389 - GeometryFactory::createMultiPoint(const CoordinateList *)
390   has been renamed to
391   GeometryFactory::createMultiPoint(const CoordinateList &)
392   to reflect copy semantic
393 - GeometryFactory: EMPTY geometry creation do now have their
394   own constructors taking no arguments.
395 - Geometry constructors taking PrecisionModel and SRID have
396   been dropped. You have to use GeometryFactory instead.
397 - WKTWriter default constructor has been dropped. You need
398   to initialize it with an explicit GeometryFactory