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
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
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)
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
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
49 - CAPI: GEOSOrientationIndex
50 - CAPI: GEOSSharedPaths to find shared paths and their orientation
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
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)
86 - Add Single-sided buffer operation
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
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
103 - PreparedGeometry operations for very fast predicate testing.
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
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.
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
127 - Added covers() and coveredBy() predicates to Geometry class
128 - Added overlay::overlayOp() adapter class
129 - Added GEOSSimplify() and GEOSTopologyPreserveSimplify()
131 - Added closed ring checks in IsValidOp
132 - Multi-input support in XMLTester
134 - Envelope(string) ctor
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
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)
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
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
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
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.
199 - More const-correct signatures
200 - Stronger methods typing (removed some void * args).
201 - Changed index-related funx signatures to use size_t
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.
209 - Namespaces mapping JTS packages
210 - Renamed classes after JTS names (namespaces use made this possible
212 - Splitted headers, for build speedup and possible API reduction.
213 - Moved source/bigtest and source/test to tests/bigtest
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.
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
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
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
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).
270 - Added version.in.vc to distribution
274 - Support for MingW builds
275 - Bugfix in Polygonizer chocking on invalid LineString inputs
276 - CAPI: small leak removed in GEOSHasZ()
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
286 - NEW Simplified and stabler C API
290 - Severe BUGFIX in BufferSubgraphGT and other functions used
291 as StrictWeakOrdering predicates for sort()
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
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
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()
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
342 - Z interpolation in overlay operations
343 - Debian package build scripts
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.
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 *)
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