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