status

# Status, previews and formal review

# Introduction

Boost.Geometry is accepted by Boost (http://permalink.gmane.org/gmane.comp.lib.boost.announce/246) after formal review (http://permalink.gmane.org/gmane.comp.lib.boost.announce/239)

The first preview was a template 2D geometry library providing its own geometries and algorithms working on those geometries. Those geometries are still provided but not essential anymore.

The second preview didn't asume points with .x() and .y() anymore. It provided strategies, operating on specific point types. So point_xy (cartesian points) were handled different from point_ll (latlong points). That is still the case (now using a coordinate system meta-function)

The third preview introducted the point concept, library users could use their own points with the algorithms provided by the library.

The fourth preview implemented concepts for all geometries. Besides that tag dispatching was introduced internally. All algorithms were made generic.

The Formal Review continued with the design of the fourth preview, made it more consistent (apply everywhere, all implementation within struct's, structs used as building blocks for multi-implementations, etc). Things were made more conform Boost standards (template parameters, no tabs, etc).

# Changes since preview 3

- there are now typedefs for the more common geometries, such as point_2d or ring_ll_deg

- all geometries are optional, everything is working with concepts

- the convex hull algorithm has been added and can be calculated for linestrings (ranges, point sequences), polygons

- map projections (92 !) have been added, they are converted to C++ template classes from PROJ4

- transformations have been added, to go from one coordinate system to another

- conversions have been added, to go from one geometry type to another (e.g. BOX to POLYGON)

- edit functionality have been added, to edit coordinate values or to add points

- parsing of latitude longitude coordinate values have been added

- the "selected" algorithm have been added

- many examples have been added

- many tests have been added

Breaking changes Because the library was in preview, and it still is, there are some major changes which might influence library user's code. Although there are many changes internally, the changes for users should be relatively small:

- all algorithms accepting linestrings are now modified to get the linestring itself. In the previous version .begin(), end() had to be specified, This is not necessary anymore, because the Boost Range Library is used internally, and tag dispatching is used to distinguish different geometries

- the "grow" utility is now splitted into buffer (growing a box with a value was in fact a buffer) and a expand.

- there was a generic "get" function with a const ref and a non const ref. This is splitted into "get" and "set"

- there might be more changes, please contact if anything is unclear

# Changes since preview 4

There are the following changes:

- implementation of spatial set relations (intersection, union)

- implementation of some spatial boolean relations (disjoint, equal, intersects, overlaps)

- move of GIS-specific code to extension/gis

- move of map projections to extensions/gis/projections

- implementation of SVG in extensions/SVG

- review of all code, conform Boost code guidelines, no tabs, template parameters, etc.

- other small changes.

Breaking changes

- there is now distinction between functions using an output iterator, and functions resulting in modifying geometries. Functions using an output iterator are called _inserter, so convex_hull_inserter inserts points (the hull) into something.

- many headerfiles are moved and/or renamed

- strategies now define a method apply, in previous versions this was operator() this only influences your code if you've made strategies yourself

- ...

# Changes since formal review

- namespace changes

- intersection: fixed Access Violoation which could occur at wrongly oriented input

- intersection: fixed omitting outer polygon if it was equal

- intersection: performance improvement, non quadratic behaviour on monotonic sections

- intersection: now supporting GMP and CLN number types (there are still some comparisons causing implicit casts to double, which will be removed)

- intersection: support of input consisting of pointer-types

- small other changes (strategies transform and intersection do now have apply instead of operator() and relate)

If people are interested in helping with the library, be it by coding, by testing, by commenting or otherwise, they are very welcome.

# History

Geodan started in 1995 with a Geographic Library, called geolib or also GGL (Geodan Geographic Library). Since then hundreds of projects have been done using this geolib, and the geolib have been extended to fit the needs of its users. Geolib can be used in different environments: in Windows applications, as a DLL (ggl32.dll), in Web Map Servers (SclMapServer), Web Feature Servers or more specific programs.

In 2007-2009 the Geometry part has been revised and completely templatized. From 2008 Bruno Lalande, already a Boost contributor, joined and helped to make the library more generic and to define clear concepts. It was later now called Generic Geometry Library (GGL). From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities, joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system (http://trac.osgeo.org/ggl)

The library is now called Boost.Geometry (formerly: Generic Geometry Library, abbreviated to GGL). Boost.Geometry is Open Source and is accepted by Boost libraries.