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