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