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