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