123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- // Boost.Geometry (aka GGL, Generic Geometry Library)
- //
- // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
- // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
- // Use, modification and distribution is subject to the Boost Software License,
- // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #ifndef _DOXYGEN_EXAMPLES_HPP
- #define _DOXYGEN_EXAMPLES_HPP
- /*!
- \example 01_point_example.cpp
- In most cases the documentation gives small examples of how to use the algorithms or classes.
- The point example is a slightly larger example giving an idea of how to use different
- algorithms from the library, related to points. It shows
- - the usage of include files
- - how to declare points, using different coordinate types
- - how to construct points, specifying coordinates, initializing to zero or to infinite
- - how to compare points to each other
- - how points can be streamed as OGC text
- - calculating the distance from point to point
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example 02_linestring_example.cpp
- The linestring example shows how linestrings can be declared and used and shows some more algorithms.
- One of the important concepts of the Generic Geometry Library is that it is totally built upon the standard
- library, using the standard containers such as std::vector.
- A linestring is, as explained elsewhere in this documentation, not much more than a vector of points.
- Most algorithms run on linestrings, but can also run on any iterator pair. And all algorithms
- on std::vector can be used on geometry::linestring.
- The sample shows this, shows some algorithms:
- - geometry::envelope
- - geometry::length
- - geometry::distance
- - geometry::simplify
- - geometry::for_each
- - geometry::intersection
- This documentation illustrates the simplify algorithm and the intersection algorithm with some pictures.
- The simplify algorithm simplifies a linestring. Simplification means that the less important points
- are removed from the line and that the points that are most important for the shape of a line are
- kept. Simplification is done using the well known Douglas Peucker algorithm. The library user can
- specify the distance or tolerance, which indicates how much the linestring should be simplified.
- The image below shows the original and simplified linestring:
- \image html simplify_linestring.png
- The blue line is the original linestring; the red line is the simplified line which has one point less.
- In geographical applications simplification can reduce a linestring to its basic form containing only
- 10% of its original points.
- The intersection algorithm intersects two geometries which each other, delivering a third geometry.
- In the case of the example a linestring is intersected with a box. Intersection with a box is often
- called a clip. The image below illustrates the intersection.
- \image html clip_linestring.png
- The yellow line is intersected with the blue box.
- The intersection result, painted in red, contains three linestrings.
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example 03_polygon_example.cpp
- The polygon example shows some examples of what can be done with polygons in the Generic Geometry Library:
- * the outer ring and the inner rings
- * how to calculate the area of a polygon
- * how to get the centroid, and how to get an often more interesting label point
- * how to correct the polygon such that it is clockwise and closed
- * within: the well-known point in polygon algorithm
- * how to use polygons which use another container, or which use different containers for points and for inner rings
- * how polygons can be intersected, or clipped, using a clipping box
- The illustrations below show the usage of the within algorithm and the intersection algorithm.
- The within algorithm results in true if a point lies completly within a polygon. If it lies exactly
- on a border it is not considered as within and if it is inside a hole it is also not within the
- polygon. This is illustrated below, where only the point in the middle is within the polygon.
- \image html within_polygon.png
- The clipping algorithm, called intersection, is illustrated below:
- \image html clip_polygon.png
- The yellow polygon, containing a hole, is clipped with the blue rectangle, resulting in a
- multi_polygon of three polygons, drawn in red. The hole is vanished.
- include polygon_example.cpp
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example 06_a_transformation_example.cpp
- This sample demonstrates the usage of transformations in the Generic Geometry Library.
- Behind the screens this is done using with the uBLAS matrix/vector library.
- \example 06_b_transformation_example.cpp
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example 07_a_graph_route_example.cpp
- The graph route example shows how GGL can be combined with Boost.Graph. The sample does the following things:
- - it reads roads (included in the distribution, stored on disk in the form of a text file containing geometries and names)
- - it reads cities
- - it creates a graph from the roads
- - it connects each city to the nearest vertex in the graph
- - it calculates the shortest route between each pair of cities
- - it outputs the distance over the road, and also of the air
- - it creates an SVG image with the roads, the cities, and the first calculated route
- Note that this example is useful, but it is only an example. It could be built in many different ways.
- For example:
- - the roads/cities could be read from a database using SOCI, or from a shapefile using shapelib
- - it could support oneway roads and roads on different levels (disconnected bridges)
- - it currently uses tuples but that could be anything
- - etc
- The SVG looks like:
- \image html 07_graph_route_example_svg.png
- The output screen looks like:
- \image html 07_graph_route_example_text.png
- \example 07_b_graph_route_example.cpp
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c01_custom_point_example.cpp
- This sample demonstrates that custom points can be made as well. This sample contains many points, derived
- from boost::tuple, created from scratch, read only points, legacy points, etc.
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c02_custom_box_example.cpp
- Besides custom points, custom boxes are possible as shown in this example.
- */
- //---------------------------------------------------------------------------------------------------
- /*
- \example c03_custom_linestring_example.cpp
- GPS tracks are shown in this example: a custom linestring with GPS points
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c04_a_custom_triangle_example.cpp
- The \b custom triangle \b example goes even further and implements a custom ring, where the area calculation
- algorithm is optimized for a triangle
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c04_b_custom_triangle_example.cpp
- This second custom triangle example shows an alternative implementation for a custom shape, showing a
- partial specialization for the area calculation.
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c05_custom_point_pointer_example.cpp
- This example shows how GGL can be used to adapt a pointer-to-a-point, used e.g. in a linestring
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example c06_custom_polygon_example.cpp
- Showing a custom polygon (asked on the list during Formal Review)
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example x01_qt_example.cpp
- This sample demonstrates that by usage of concepts, external geometries can be handled
- by GGL, just calling by a one-line registration macro. In this case for the Qt Widget Library.
- The example, code shown below, results in this window-output:
- \image html x01_qt_example_output.png
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example x03_a_soci_example.cpp
- First example showing how to get spatial data from a database using SOCI and put them into GGL
- */
- //---------------------------------------------------------------------------------------------------
- /*!
- \example x03_b_soci_example.cpp
- Second example showing how to get polygons from a database using SOCI and put them into GGL, using WKT.
- */
- //---------------------------------------------------------------------------------------------------
- /*
- \example x03_c_soci_example.cpp
- Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
- */
- //---------------------------------------------------------------------------------------------------
- /*
- \example x03_d_soci_example.cpp
- Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
- */
- #endif // _DOXYGEN_EXAMPLES_HPP
|