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