123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- OBSOLETE
- // 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)
- //
- // Doxygen Examples, referred to from the sources
- #include <boost/tuple/tuple.hpp>
- #if defined(_MSC_VER)
- // We deliberately mix float/double's here so turn off warning
- #pragma warning( disable : 4244 )
- #endif // defined(_MSC_VER)
- #include <boost/geometry/geometry.hpp>
- #include <boost/geometry/geometries/register/point.hpp>
- #include <boost/geometry/geometries/geometries.hpp>
- #include <boost/geometry/io/wkt/wkt.hpp>
- // All functions below are referred to in the documentation of Boost.Geometry
- // Don't rename them.
- void example_area_polygon()
- {
- //[area_polygon
- //` Calculate the area of a polygon
- boost::geometry::polygon<boost::geometry::point_xy<double> > poly; /*< Declare >*/
- boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly); /*< Fill, in this case with WKT >*/
- double area = boost::geometry::area(poly); /*< Calculate area >*/
- //]
- //[area_polygon_spherical
- //` Calculate the area of a *spherical* polygon
- namespace bg = boost::geometry;
- bg::polygon<bg::point<float, 2, bg::cs::spherical<bg::degree> > > sph_poly;
- bg::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
- double area = bg::area(sph_poly);
- //]
- }
- void example_as_wkt_point()
- {
- typedef boost::geometry::point_xy<double> P;
- P p(5.12, 6.34);
- // Points can be streamed like this:
- std::cout << boost::geometry::dsv<P>(p) << std::endl;
- // or like this:
- std::cout << boost::geometry::dsv(p) << std::endl;
- // or (with extension) like this:
- std::cout << boost::geometry::wkt(p) << std::endl;
- }
- void example_as_wkt_vector()
- {
- std::vector<boost::geometry::point_xy<int> > v;
- boost::geometry::read_wkt<boost::geometry::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
- std::cout << boost::geometry::dsv(std::make_pair(v.begin(), v.end())) << std::endl;
- }
- void example_centroid_polygon()
- {
- boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
- boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
- // Center of polygon might have different type than points of polygon
- boost::geometry::point_xy<float> center;
- boost::geometry::centroid(poly, center);
- std::cout << "Centroid: " << boost::geometry::dsv(center) << std::endl;
- }
- void example_distance_point_point()
- {
- boost::geometry::point_xy<double> p1(1, 1);
- boost::geometry::point_xy<double> p2(2, 3);
- std::cout << "Distance p1-p2 is "
- << boost::geometry::distance(p1, p2)
- << " units" << std::endl;
- /*
- Extension, other coordinate system:
- // Read 2 Dutch cities from WKT texts (in decimal degrees)
- boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > a, r;
- boost::geometry::read_wkt("POINT(4.89222 52.3731)", a);
- boost::geometry::read_wkt("POINT(4.47917 51.9308)", r);
- std::cout << "Distance Amsterdam-Rotterdam is "
- << boost::geometry::distance(a, r) / 1000.0
- << " kilometers " << std::endl;
- */
- }
- void example_distance_point_point_strategy()
- {
- /*
- Extension, other coordinate system:
- typedef boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
- LL a, r;
- boost::geometry::read_wkt("POINT(4.89222 52.3731)", a);
- boost::geometry::read_wkt("POINT(4.47917 51.9308)", r);
- std::cout << "Distance Amsterdam-Rotterdam is "
- << boost::geometry::distance(a, r,
- boost::geometry::strategy::distance::vincenty<LL>() )
- / 1000.0
- << " kilometers " << std::endl;
- */
- }
- void example_from_wkt_point()
- {
- boost::geometry::point_xy<int> point;
- boost::geometry::read_wkt("Point(1 2)", point);
- std::cout << point.x() << "," << point.y() << std::endl;
- }
- void example_from_wkt_output_iterator()
- {
- std::vector<boost::geometry::point_xy<int> > v;
- boost::geometry::read_wkt<boost::geometry::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
- std::cout << "vector has " << v.size() << " coordinates" << std::endl;
- }
- void example_from_wkt_linestring()
- {
- boost::geometry::linestring<boost::geometry::point_xy<double> > line;
- boost::geometry::read_wkt("linestring(1 1,2 2,3 3,4 4)", line);
- std::cout << "linestring has " << line.size() << " coordinates" << std::endl;
- }
- void example_from_wkt_polygon()
- {
- boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
- boost::geometry::read_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", poly);
- std::cout << "Polygon has " << poly.outer().size() << " coordinates in outer ring" << std::endl;
- }
- void example_point_ll_convert()
- {
- /*
- Extension, other coordinate system:
- boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > deg(boost::geometry::latitude<>(33.0), boost::geometry::longitude<>(-118.0));
- boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::radian> > rad;
- boost::geometry::transform(deg, rad);
- std::cout << "point in radians: " << rad << std::endl;
- */
- }
- void example_clip_linestring1()
- {
- typedef boost::geometry::point_xy<double> P;
- boost::geometry::linestring<P> line;
- boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
- boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
- std::cout << "Clipped linestring(s) " << std::endl;
- std::vector<boost::geometry::linestring<P> > intersection;
- boost::geometry::intersection_inserter<boost::geometry::linestring<P> >(cb, line, std::back_inserter(intersection));
- }
- void example_clip_linestring2()
- {
- typedef boost::geometry::point_xy<double> P;
- std::vector<P> vector_in;
- boost::geometry::read_wkt<P>("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)",
- std::back_inserter(vector_in));
- boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
- typedef std::vector<std::vector<P> > VV;
- VV vector_out;
- boost::geometry::intersection_inserter<std::vector<P> >(cb, vector_in, std::back_inserter(vector_out));
- std::cout << "Clipped vector(s) " << std::endl;
- for (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
- {
- std::copy(it->begin(), it->end(), std::ostream_iterator<P>(std::cout, " "));
- std::cout << std::endl;
- }
- }
- void example_intersection_polygon1()
- {
- typedef boost::geometry::point_xy<double> P;
- typedef std::vector<boost::geometry::polygon<P> > PV;
- boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
- boost::geometry::polygon<P> poly;
- boost::geometry::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
- ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))", poly);
- PV v;
- boost::geometry::intersection_inserter<boost::geometry::polygon<P> >(cb, poly, std::back_inserter(v));
- std::cout << "Clipped polygon(s) " << std::endl;
- for (PV::const_iterator it = v.begin(); it != v.end(); it++)
- {
- std::cout << boost::geometry::dsv(*it) << std::endl;
- }
- }
- void example_simplify_linestring1()
- {
- //[simplify
- //` Simplify a linestring
- boost::geometry::linestring<boost::geometry::point_xy<double> > line, simplified;
- boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
- boost::geometry::simplify(line, simplified, 0.5); /*< Simplify it, using distance of 0.5 units >*/
- std::cout
- << " original line: " << boost::geometry::dsv(line) << std::endl
- << "simplified line: " << boost::geometry::dsv(simplified) << std::endl;
- //]
- }
- void example_simplify_linestring2()
- {
- //[simplify_inserter
- //` Simplify a linestring using an output iterator
- typedef boost::geometry::point_xy<double> P;
- typedef boost::geometry::linestring<P> L;
- L line;
- boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
- typedef boost::geometry::strategy::distance::projected_point<P, P> DS;
- typedef boost::geometry::strategy::simplify::douglas_peucker<P, DS> simplification;
- boost::geometry::simplify_inserter(line, std::ostream_iterator<P>(std::cout, "\n"), 0.5, simplification());
- //]
- }
- void example_within()
- {
- boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
- boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
- boost::geometry::point_xy<float> point(3, 3);
- std::cout << "Point is "
- << (boost::geometry::within(point, poly) ? "IN" : "NOT in")
- << " polygon"
- << std::endl;
- }
- /*
- void example_within_strategy()
- {
- // TO BE UPDATED/FINISHED
- typedef boost::geometry::point_xy<double> P;
- typedef boost::geometry::polygon<P> POLY;
- P p;
- std::cout << within(p, poly, strategy::within::cross_count<P>) << std::endl;
- }
- */
- void example_length_linestring()
- {
- using namespace boost::geometry;
- linestring<point_xy<double> > line;
- read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
- std::cout << "linestring length is "
- << length(line)
- << " units" << std::endl;
- /*
- Extension, other coordinate system:
- // Linestring in latlong, filled with
- // explicit degree-minute-second values
- typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
- linestring<LL> line_ll;
- line_ll.push_back(LL(
- latitude<float>(dms<north, float>(52, 22, 23)),
- longitude<float>(dms<east, float>(4, 53, 32))));
- line_ll.push_back(LL(
- latitude<float>(dms<north, float>(51, 55, 51)),
- longitude<float>(dms<east, float>(4, 28, 45))));
- line_ll.push_back(LL(
- latitude<float>(dms<north, float>(52, 4, 48)),
- longitude<float>(dms<east, float>(4, 18, 0))));
- std::cout << "linestring length is "
- << length(line_ll) / 1000
- << " kilometers " << std::endl;
- */
- }
- void example_length_linestring_iterators1()
- {
- boost::geometry::linestring<boost::geometry::point_xy<double> > line;
- boost::geometry::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
- std::cout << "linestring length is "
- << boost::geometry::length(line)
- << " units" << std::endl;
- }
- void example_length_linestring_iterators2()
- {
- std::vector<boost::geometry::point_xy<double> > line;
- boost::geometry::read_wkt<boost::geometry::point_xy<double> >("linestring(0 0,1 1,4 8,3 2)", std::back_inserter(line));
- std::cout << "linestring length is "
- << boost::geometry::length(line)
- << " units" << std::endl;
- }
- void example_length_linestring_iterators3()
- {
- /*
- Extension, other coordinate system:
- using namespace boost::geometry;
- typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
- std::deque<LL> line;
- boost::geometry::read_wkt<LL>("linestring(0 51,1 51,2 52)", std::back_inserter(line));
- std::cout << "linestring length is "
- << 0.001 * boost::geometry::length(line, boost::geometry::strategy::distance::vincenty<LL>())
- << " kilometers" << std::endl;
- */
- }
- void example_length_linestring_strategy()
- {
- /*
- Extension, other coordinate system:
- using namespace boost::geometry;
- typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
- linestring<LL> line_ll;
- line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 22, 23)), longitude<float>(dms<east, float>(4, 53, 32))));
- line_ll.push_back(LL(latitude<float>(dms<north, float>(51, 55, 51)), longitude<float>(dms<east, float>(4, 28, 45))));
- line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 4, 48)), longitude<float>(dms<east, float>(4, 18, 0))));
- std::cout << "linestring length is "
- << length(line_ll, strategy::distance::vincenty<LL, LL>() )/(1000)
- << " kilometers " << std::endl;
- */
- }
- void example_envelope_linestring()
- {
- boost::geometry::linestring<boost::geometry::point_xy<double> > line;
- boost::geometry::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
- boost::geometry::box<boost::geometry::point_xy<double> > box;
- boost::geometry::envelope(line, box);
- std::cout << "envelope is " << boost::geometry::dsv(box) << std::endl;
- }
- void example_envelope_polygon()
- {
- /*
- Extension, other coordinate system:
- using namespace boost::geometry;
- typedef point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
- // Wrangel island, 180 meridian crossing island above Siberia.
- polygon<LL> wrangel;
- wrangel.outer().push_back(LL(latitude<>(dms<north>(70, 47, 7)), longitude<>(dms<west>(178, 47, 9))));
- wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 14, 0)), longitude<>(dms<east>(177, 28, 33))));
- wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 34, 24)), longitude<>(dms<east>(179, 44, 37))));
- // Close it
- wrangel.outer().push_back(wrangel.outer().front());
- boost::geometry::box<LL> box;
- boost::geometry::envelope(wrangel, box);
- dms<cd_lat> minlat(box.min_corner().lat());
- dms<cd_lon> minlon(box.min_corner().lon());
- dms<cd_lat> maxlat(box.max_corner().lat());
- dms<cd_lon> maxlon(box.max_corner().lon());
- std::cout << wrangel << std::endl;
- std::cout << "min: " << minlat.get_dms() << " , " << minlon.get_dms() << std::endl;
- std::cout << "max: " << maxlat.get_dms() << " , " << maxlon.get_dms() << std::endl;
- */
- }
- void example_dms()
- {
- /*
- Extension, other coordinate system:
- // Construction with degree/minute/seconds
- boost::geometry::dms<boost::geometry::east> d1(4, 53, 32.5);
- // Explicit conversion to double.
- std::cout << d1.as_value() << std::endl;
- // Conversion to string, with optional strings
- std::cout << d1.get_dms(" deg ", " min ", " sec") << std::endl;
- // Combination with latitude/longitude and cardinal directions
- {
- using namespace boost::geometry;
- point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > canberra(
- latitude<>(dms<south>(35, 18, 27)),
- longitude<>(dms<east>(149, 7, 27.9)));
- std::cout << canberra << std::endl;
- }
- */
- }
- void example_point_ll_construct()
- {
- /*
- Extension, other coordinate system:
- using namespace boost::geometry;
- typedef point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > ll;
- // Constructions in both orders possible
- ll juneau(
- latitude<>(dms<north>(58, 21, 5)),
- longitude<>(dms<west>(134, 30, 42)));
- ll wladiwostok(
- longitude<>(dms<east>(131, 54)),
- latitude<>(dms<north>(43, 8))
- );
- */
- }
- int main(void)
- {
- example_area_polygon();
- example_centroid_polygon();
- example_distance_point_point();
- example_distance_point_point_strategy();
- example_from_wkt_point();
- example_from_wkt_output_iterator();
- example_from_wkt_linestring();
- example_from_wkt_polygon();
- example_as_wkt_point();
- example_clip_linestring1();
- example_clip_linestring2();
- example_intersection_polygon1();
- example_simplify_linestring1();
- example_simplify_linestring2();
- example_length_linestring();
- example_length_linestring_iterators1();
- example_length_linestring_iterators2();
- example_length_linestring_iterators3();
- example_length_linestring_strategy();
- example_envelope_linestring();
- example_envelope_polygon();
- example_within();
- example_point_ll_convert();
- example_point_ll_construct();
- example_dms();
- return 0;
- }
|