Improvements

Add correct() overload taking area strategy

Add is_convex() overload taking side strategy

Add missing relational operations (covered_by, crosses, equals, etc.) for
MultiPoint/AnyGeometry
Solved issues

12410
Lack of support of geographic coordinate system in correct()

13035
Wrong result of noncartesian intersection strategies for segments near
poles.

13057
Wrong result of intersects() for linestrings caused by numerical issue
in disjoint() for boxes.
Bugfixes

Fix is_valid which could return false for multipolygons where an interior
ring touches another interior ring

Fix is_valid which could return false for multipolygons where a polygon
was located in an interior ring, all touching each other

Fix union which could produce invalid results (for some cases, this needs
to define BOOST_GEOMETRY_INCLUDE_SELF_TURNS)

Fix intersection (idem), but some cases are still not yet valid

Fix difference (idem), but some cases are still not yet valid

Fix propagation of area strategy into the internals of various algorithms
from intersection strategy

Fix uninitialized variable in relate and reference to temporary in overlay

Fix error in disjoint for geographic Segment/Box

Fix handling of noncartesian geometries in various algorithms
Improvements

matrix transformation is now based on Boost.QVM instead of Boost.Ublas
Breaking changes

ublas_transformer is renamed to matrix_transformer

explicit modifier is added to constructors of rtree index::dynamic_* parameters

strategy::area::huiller replaced by strategy::area::spherical
Solved issues

363
Missing includes in geometry/index/parameters.hpp

364
within(Linear, Areal) compilation error when arguments use different point
types

370
Buffer Seg Faults with Ring as Input
Solved tickets

11899
boost::geometry::equals doesn't handle open polygons

11930
Inaccuracy of area::huiller strategy

11931
Wrong spherical area with pole encircling polygons

12566
Ambiguous template instantiation in equal_to<> when pair value contains
raw pointer

12861
Segmentation fault in stdlibc++ (gcc 4.8.2) affecting rtree

12885
Use BOOST_THROW_EXCEPTION instead of throw
Bugfixes

Fix distance_measure in get_turn_info
Improvements

Intersection: take care that output is valid (work in progres, not yet
finished  but more is valid)
Solved tickets

12289
Avoid warning/compilation error for std::cout

12412
Invalid result of covered_by() with geographic Points and Boxes

12413
rtree::remove() not working properly with geographic Points
Improvements

Union: take care that output is valid (with some exceptions), also with
selftangent polygons or shared edges

SVG: support boost::variant of geometries

SVG: coordinates are now written as double (by default) to svg

Rename namespace concept to concepts to avoid conflicts with the newest
compilers

New spherical intersection strategy used in relational and set operations
for spherical and geographic Geometries (previously cartesian intersection
strategy was used for all coordinate systems).
Solved tickets

12189
Relational operations not compiling when point types of inputs are different
(cartesian, affecting rtree)

12287
Invalid result of rtree.query() for contains() predicate

12342
Relational operations not compiling when point types of inputs are different
(geographic, affecting rtree)
Additional functionality

Support within and covered_by for Box/Box in spherical and geographic coordinate
systems.
Improvements

Overlay: handle_tangencies replaced by clusters, fixing many cases with
colocated turns
Solved tickets

9162
Invalid result of relational operations for noncartesian Point/Areal.

10866
union_ doesn't work in 1.56 and 1.57.

11018
Invalid geometry intersection

11576
Intersection gives wrong results.

11637
Unused parameter warning.

11725
union_ fails to create holes

11789
Assertion failure or invalid result of set operations for spherical_equatorial
coordinate system.

11917
Andoyer distance strategy returns 0 for antipodal points (default geographic
distance).

11928
Improvement of the accuracy of surveyor area strategy.

11966
Compilation error in svg() for box and nonint coordinate type.

11984
union_() generates selfintersecting polygon

11987
rtree::remove() not compiling for geographic CS.

12000
Uninitialized reference in (unused) constructor of relate's mask_handler.

12106
Invalid assertion failure in envelope() for noncartesian very short segments.
Bugfixes

Fix intersects and disjoint for Segment/Box in cartesian coordinate system
when Segment is parallel to Box's face.

Fix relation operations for Point/Areal in spherical and geographic coordinate
systems for edge cases.

Fix intersects and disjoint for Point/Box and Box/Box in spherical and
geographic coordinate systems for some cases.

Fix within and covered_by for Point/Box in spherical and geographic coordinate
systems for some cases.
Solved tickets

10803
Union algorithm returning invalid geometry

11522
Namespace clash in buffer for traits::detail

11533
Assert failure in rtree caused by a bug in remove() if min elements number
is 1

11607
Private geometry::exception::what()

11709
is_simple segfault

11710
is_simple  empty geometry logic

11711
is_simple and is_valid  Points that are NaN or Infinity
Bugfixes

Fix colocations of touching interior ring / exterior ring, where it also
touches another polygon

Fix removing values from an empty rtree  no effect and 0 returned instead
of assertion failure

Fix segfault in centroid for multi geometries containing empty single geometries
(thanks to Jiri Drbalek)

Fix liang_barsky strategy for integral coordinates (thanks to Dane Springmeyer)
Additional functionality

Added rtree const_iterator, begin(), end() and the support for Boost.Range.

The support for C++11
std::initializer_list
in geometries models.

Disjoint and intersects support the following geometry combinations: multipoint/linestring,
multipoint/multilinestring.

Added relate() and relation() algorithms.

Intersection has been implemented for combinations of pointlike and linear
geometries

Added implementation for difference(pointlike, linear)

New algorithm is_empty, returning true if the geometry represents the empty
set

The envelope algorithm supports pointlike and linear geometries in the
spherical equatorial coordinate system

The envelope algorithm supports pointlike geometries in the geographic
coordinate system
Improvements

Upgraded rtree const_query_iterator category to ForwardIterator.

Buffer performance of buffers around multipoints is improved significantly
Breaking changes

buffer side strategy now returns error_code instead of bool. If you have
your own custom side strategy, it should be adapted
Solved tickets

11113
Support easy enumeration of all elements with BOOST_FOREACH

11232
Feature request  relate()

11236
Invalid result of centroid() for integer coordinate type

11268
Regression in boost::geometry::intersection interface with multi_linestring
and box  does not compile on 1.57 VS 1.55

11332
Assertion failure in buffer for extreme coordinate differences

11346
Segment iterator does not work with ranges returning values instead of
references

11436
sym_difference(py1, py2, mpy) returns invalid multipolygon
Bugfixes

Buffer: use a more robust way to calculate the side of an intersection,
this fixes several errors in buffer generation

Fix in selection of segment to which calculate from IP from, in intersection
of two segments. Now is selected the one close to a segmentpoint point,
or else the one on the shortest segment. This avoids (rarely occuring)
generation of tiny triangles making output polygons invalid

In rescaling round instead of truncate to the integer grid (this fix and
the previous mentioned can have some impact on output geometries)

Fix potential infinite loop in detail::has_spikes (the loop can happen
if the points passed have NaN coordinates)
Additional functionality

New algorithm num_segments, returning the number of segments of a geometry

New overload for is_valid algorithm, that takes a string reference as a
second argument and fills it with a message related to the validity or
invalidity of the geometry

New overload for is_valid algorithm, that takes an enum reference as a
second argument and fills it with a value related to the validity or invalidity
of the geometry

Disjoint and intersects support the following geometry combinations: point/multipoint,
multipoint/multipoint, multipoint/segment, multipoint/box
Improvements

Buffer now supports flatends for linestrings with a bend close to the
start (such that buffered segment crosses flatend).

Buffer performance is improved significantly

Partition performance is improved significantly for polygons, potentially
enhancing all overlay operations
Solved tickets

8379
Invalid comparison of the result of determinant

10108
Error in overlay operations in specific cases where geometries touch at
one point

10201
Suggestion to use different function to compare coordinates [wontfix]

10467
Template parameter name coliding with B0 macro name defined in termios.h

10640
Invalid result of buffer() for CCW Polygons.

10666
MSVC compiler warning C4127: conditional expression is constant

10747
Error in rescaling causing errors in areal/areal set operations

10770
Buffer fails for large distances, or rough round joins, where concavities
where not intersected properly

10658
sym_difference yields bad result for int polygons

10835
Difference of multilinestring and polygon yields wrong result

10861
Rtree failing to compile for Value being a pair or a tuple containing pointer
to Geometry and the default equal_to<> used

10863
Template parameter name coliding with B0 macro name defined in termios.h
(duplicate of 10467)

10887
Invalid result of within() and relate() for Linear/MultiPolygon

10890
Invalid result of disjoint() for Point/Segment.

10904
Invalid calculation of most significant Dimension of a segment in relate_cartesian_segments
strategy

10912
Invalid result of within() and relate() for Areal/Areal

10951
Tests failing on windows with intel compiler due to lack of /bigobj flag.

10957
Assertion failure and invalid results of various relational operations.

10958
Invalid results of disjoint() L/L and L/A.

10959
Assertion failure in get_turns() used with no_rescale_policy.

10960
Invalid result of get_turns() for L/A, missing turn.

10961
Invalid result of get_turns() for L/A, invalid turn for a Linear spike.

11112
Compilation failure on Solaris due to a CS name clash (used for a macro
on this platform)

11121
Invalid result of difference() for integral coordinates
Bugfixes

Bug in multipoint/polygon multipoint/multipolygon distance computation
(wrong detection of points inside the areal geometry)

Bug in flatten_iterator's assignment operator causing an access violation

Bug in Cartesian segmentsegment intersection strategy when one segment
degenerates to a point and is collinear to the other nondegenerate segment

Bug in centroid(), nondeterministic result if calculated for e.g. a Polygon
with zeroarea.

Bug in buffers for joins with a limited number of points

Bug in buffers for round joins with limited number of points around sharp
corners

Bug in buffers for joins with large buffer distances

Bug in buffers for round ends with an odd number of points

Bug in buffers for flat ends with large buffer distances

Bug in buffers for interior rings with large negative buffer distances

Bug in closing_iterator not working properly when the input range is empty

Bug in is_simple, not handling properly closed simple linestrings within
multilinestrings

Bug in rtree constructors taking a pair of Iterators or a Range (packing
algorithm), the use of reference to destroyed temporary when Iterator's
reference is not true reference, e.g. for some of the Range Adaptors. It
also affects distance() and comparable_distance(). This bug may cause unexpected
behavior of the rtree or distance() algorithm, e.g. an assertion failure
or a SEGFAULT.

Bug in rtree count() member function, the use of reference to destroyed
temporary when object of type convertible but not the same as value_type
or indexable_type is passed. If this happens, wrong result may be returned,
in most cases 0.

Bugs related to the handling of Ranges, preventing compilation of Geometries
using nonContainer Ranges in some algorithms (thanks to Samuel Debionne)
Improvements

The support of parameters convertible to value_type in rtree insert(),
remove() and count() functions

Support for counterclockwise input/output in algorithm buffer

Support for opengeometry input in algorithm buffer (open output not yet
supported)

Support for degenerate input (pointlike linestrings, polygons) in algorithm
buffer
Solved tickets

6443
Wrong degenerated hulls returned by convex_hull().

8402
Implicit conversion warnings

9354
Bug in winding strategy affecting within() and covered_by() for noncartesian
coordinate systems

10177
Missing include

10345
Distance fails to compile for some coordinate types

10398
Wrong neighbour check in buffer, calculating turns

10421
Invalid PointBox distance for spherical CS

10562
Invalid number of Points in the result of convex_hull() for open output

10615
Rtree constructor feature request

10643
Invalid point_on_surface() result for big coordinates

10647
Invalid result of disjoint() in some cases when polygon is inside inner
ring of other polygon

10668
Implicit conversion warnings (duplicated 8402)
Bugfixes

Several fixes of bugs in algorithm buffer

Bug in point_on_surface() for CCW Polygons (extreme_points()) and numerical
issue (thanks to Matt Amos)

Bug in disjoint() for A/A fixed by replacement of point_on_surface() with
point_on_border() (thanks to Matt Amos)

The result of convex_hull(), duplicated Point in open output, too small
number of Points for 1 and 2Point input

Imprecision for big coordinates in centroid(), fixed by Points translation
(related with ticket 10643)

for_each_segment() not taking into account the last segment of open Geometry
Additional functionality

New algorithm buffer for inflating/deflating geometries (buffer itself
already existed but that was only to enlarge a box)

New algorithm remove_spikes, algorithm to remove spikes from a ring, polygon
or multi_polygon

New algorithm point_on_surface, generating a point lying on the surface
(interior) of the polygon

New algorithm is_simple, returning true if a geometry is simple according
to the OGC standard

New algorithm is_valid, returning true if a geometry is valid according
to the OGC standard

New algorithm crosses for checking this spatial relation according to the
OGC standard

The set operation algorithms (difference, intersection, sym_difference
and union_) now support as input pairs of pointlike or linear geometries

The distance and comparable_distance algorithms now support all pairs of
geometry combinations

The spatial relations which didn't support it (covered_by, touches, within,
etc.) now support as input linear and/or areal geometries

The support for boost::variants as input geometries in various algorithms

The rtree support for indexing segments

The rtree nearest() predicate support for arbitrary geometries
Improvements

The rtree packcreation algorithm optimization (thanks to Lu Wang)
Solved tickets

8310
Wrong results with overlapping polygons (fixed using point_on_surface for
disjoint)

8375
sym_difference of nonclosed polygons returns closed polygon

8376
difference of nonclosed polygons returns closed polygon

9081
Booleans create selfintersecting polygons from nonselfintersecting polygons

9245
Check for process errors in make_qbk.py

9563
(Sym)difference not successful, fixed by rescaling to robust type

9628
Wrong result of within() due to the winding strategy not working correctly
for nearlyhorizontal segments

9828
boost::geometry::union_(...) creates redundant closing point

9871
Remove spike in polygon with only a spike

9941
Add support for touches(box, box)

9947
Missing info about WKT in documentation

9759
Invalid results of Rtree knn queries for noncartesian coordinate systems

10019
Difference of Linestring and Box returns their intersection

10077
Wrong types in concept checks in boost/geometry/arithmetic/arithmetic.hpp

10234
Wrong results of covered_by() for nearlyhorizontal segments
Bugfixes

intersects(polygon) could return a selfintersectionpoint for its closing
point, fixed

equals() could return invalid results for nonsimple linear geometries
according to the OGC standard, fixed

touches() didn't work properly for CCW areal geomtries, fixed

rtree nearest queries returned wrong elements for noncartesian coordinate
systems, fixed

rtree crashed in some cases when used with Interprocess allocator, fixed
Additional functionality

Added centroid for segment type

Added intersects() and disjoints() for SegmentBox and LinestringBox

Added rtree creation using packing algorithm

Added contains() and covers() spatial query predicates

Added iterative queries
Documentation
Bugfixes

In some cases .back() or .clear() was called, violating the usage of Concepts.
Fixed for the reported cases

Use consistent side information in cart_intersect and get_turn_info and
handle_tangencies and enrich_intersection_info. This is done by switching
to integer (if necessary) for the specific 6 points only, zooming in on
the 4 or 3 segments
Solved tickets

6958
Intersection generates selfintersection. Caused by spike, fixed

8364
Invalid input exception, caused by spikes in previous steps, fixed

8365
Invalid input exception, caused by spikes in previous steps, fixed

8969
boost::geometry::model::point single argument constructor should be explicit

8825
Patch adding member variable documentation to doxygen_xml2qbk

8652
Intersection fails for triangletriangle intersection. Caused by spike,
fixed

9047
Boost files that include themselves (strategies/intersection.hpp), fixed
Internal changes

Adapted projected_point<> distance strategy, pointtype in template
is replaced by calculationtype

Adapted transform strategies, they have points now as membertemplate,
and calculationtype as template. Similar to what was done for projected_point
distance

Spikes (could be generated in difference) in integerbased overlays are
now avoided during generation

Cleanup, removed old MSVC2005 project files

R*tree balancing algorithm optimized
Additional functionality

added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. The
spatial index was originally started by Federico J. Fernandez during the
Google Summer of Code 2008 program, mentored by Hartmut Kaiser.

added SVGoutput, this was already in extensions for several years
Documentation

small fixes of missing words

fixes in doc of template parameters (convex_hull, exterior_ring, return_buffer)
Bugfixes

collinear opposite segments did sometimes (in circles) have a robustness
issue, fixed

fixed insertion of false intersection point (found by buffer)

applied patch of Vladimir Petrovic for debugging traversals
Solved tickets

7462
degenerate union result for float, fixed

7465
wrong construtors access type in scale_transformer class, fixed

7802
cart_intersect.hpp unused parameter warnings, fixed

8254
faulty intersection, fixed

8393
polygon model doesn't adhere to stated Polygon concept rules, doc updated.

8403
silenced compiler warning C4127: conditional expression is constant

8405
silenced compiler warning C4189: '...' : local variable is initialized
but not referenced
Internal changes

Made several algorithms variantaware (append, area, clear, convert, equals,
length, num_points)
Bugfixes

avoid generating output polygons with interior rings below minimum size
(e.g. one or two points)

geometry::disjoint
for degenerate segments (patched
by Karsten Ahnert)

problem in
geometry::difference
for missing handling tangency,
reported by H2

fixed
geometry::for_each
for use with Lambda's

fixed
geometry::comparable_distance
pointlinestring
(and range, polygon)
Additional functionality

combinations for
geometry::disjoint
:
point/ring, point/polygon, point/multi_polygon

combinations for
geometry::intersects
:
point/ring, point/polygon, point/multi_polygon
Internal changes

updates in specializations/not_implemented for various algorithms (as in
an earlier version, these changes are still going on; they take care for
simplified structs, better error reporting, and automatized documentation)

fixes in unit tests
Breaking changes

points accessed through a pointer (e.g. in a linestring) should now be
specialized without the pointer. In previous versions a type
my_point
used like linestring<my_point*>
had to be specalized like: template<>
struct tag<my_point*>
. Now the library itself removes the
pointer before calling the traits class, so now it should be like: template<>
struct tag<my_point>
Bugfixes

intersection was sometimes wrong for integer points, fixed

documentation, order of parameters in simplify was wrong, fixed
Solved tickets

7030
spherical distance, fixed (by patch of Karsten Ahnert)
Bugfixes

the return type of comparable projected point strategy for integer points
was wrong (integer), fixed

several robustness issues in intersection of segments and polygons, fixed

invalid intersection output is filtered out

disjoint for multi_polygon's might incorrectly return true, fixed
Solved tickets

6585
patch for alternative syntax multipoint, applied

6584
patch for bug in distance, applied

5730
same issue as 6584, fixed

6166
patch for missing transformation, applied

6696
invalid intersection output, was (by chance) already fixed in Trunk before
reported
Additional functionality

added algorithm "touches" (OGC SF compliant) for *polygon/*polygon
Breaking changes

point_xy was accidentally included in one of the headerfiles. If the point_xy
class is used, it should be included explicitly now.
Bugfixes

bugfix: distance for multigeometries ignored specified distance strategy.
Fixed

bugfix: difference for polygon/multi_polygon (reported 2011/10/24 on GGLlist)

bugfix: raise exception for calculation of distances of multigeometrie(s)
where one of them is empty

bugfix: multi DSV did not correctly use settings, fixed

bugfix: selfintersections could sometimes be missed (introduced in 1.48),
fixed

bugfix: convex hull crashed on empty range (e.g. empty multi point), fixed

bugfix: area/centroid/side/intersection/distance did not work for "int"
type filled with large (but not overflowing) integers. Fixed.

bugfix: disjoint/intersect did not work for degenerate linestrings. Fixed.

bugfix: covered_by did not compile for a ring. Fixed.
Solved tickets

6019
convex_hull / area, fixed.

6021
convex_hull / append (multipoint), fixed.

6028
Documentation: closure, fixed.

6178
Missing headerfile, fixed.
Additional functionality

support for line/polygon intersections and differences

support for convert of segment/box of different point types

support for append for multi point

the scalar function distance now throws an empty_input_exception on empty
input
Documentation

updated support status in several algorithms

updated conformance to OGC or std

other updates and fixes
Internal changes

updates in specializations/not_implemented for distance/convert/assign/area/with/covered_by

move of wkt/dsv to io folder, making domains redundant

warnings: strategy concepts assigned to zero to avoid clang warnings (patched
by Vishnu)

warnings: there were several unused parameters, for which gcc/clang warned
(patched by Christophe)
Bugfixes

Robustness issue, in some circumstances the union failed to output. Fixed.

Robustness issue, in some circumstances the calculated intersection point
was outside the segment. Fixed.

Concept issue, cartesian intersect didn't understand segments other than
the provided one. Fixed.

Sometimes selfintersections in linestrings were missed. Fixed.

The fusion coordinate system was not registered correctly. Fixed.
Solved tickets

5726
Segment intersection algorithm still assumes 'first', 'second' members

5744
Mistake in fusion adapt example

5748
Needed to include <boost/foreach.hpp>

5954
distance_pythagoras skips sqrt() step
Improvements on algorithms

Checking selfintersections is now not done automatically, this can blast
performance.

Besides that, checking selfintersections is made faster.

Intersections now avoid outputting duplicate points. So they output the
minimal set.
Additional algorithms

covered_by: within is defined as "within, not on boundary". covered_by
is "within or on boundary"
Additional functionality

within: strategies can now be specified for within<point, box> and
within<box, box>

convert: a much broader range of conversions is supported

assign: idem, (currently partly) synonym for convert (but reversed arguments)
Additional coordinate types

Basic (limited) support for Boost.Rational
Original release