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