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