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