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