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