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