geometry/doc/index/src/examples/rtree/quick_start.cpp
Adam Wulkiewicz 7b1e4bd601 [doc][index] Docs upgrade (mostly related to Range adaptors).
Add a tip about usage of Boost.Range adaptors with the rtree.
Add an example of usage of Boost.Range adaptors.
Replace invalid main(void) with main() in examples.
Fix MSVC type conversion warnings in examples.
2014-10-07 14:52:08 +02:00

90 lines
2.5 KiB
C++

// Boost.Geometry Index
//
// Quickbook Examples
//
// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
//
// 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)
//[rtree_quickstart
//[rtree_quickstart_include
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/index/rtree.hpp>
// to store queries results
#include <vector>
// just for output
#include <iostream>
#include <boost/foreach.hpp>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
//]
int main()
{
//[rtree_quickstart_valuetype
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef std::pair<box, unsigned> value;
//]
//[rtree_quickstart_create
// create the rtree using default constructor
bgi::rtree< value, bgi::quadratic<16> > rtree;
//]
//[rtree_quickstart_insert
// create some values
for ( unsigned i = 0 ; i < 10 ; ++i )
{
// create a box
box b(point(i + 0.0f, i + 0.0f), point(i + 0.5f, i + 0.5f));
// insert new value
rtree.insert(std::make_pair(b, i));
}
//]
//[rtree_quickstart_spatial_query
// find values intersecting some area defined by a box
box query_box(point(0, 0), point(5, 5));
std::vector<value> result_s;
rtree.query(bgi::intersects(query_box), std::back_inserter(result_s));
//]
//[rtree_quickstart_nearest_query
// find 5 nearest values to a point
std::vector<value> result_n;
rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n));
//]
// note: in Boost.Geometry WKT representation of a box is polygon
//[rtree_quickstart_output
// display results
std::cout << "spatial query box:" << std::endl;
std::cout << bg::wkt<box>(query_box) << std::endl;
std::cout << "spatial query result:" << std::endl;
BOOST_FOREACH(value const& v, result_s)
std::cout << bg::wkt<box>(v.first) << " - " << v.second << std::endl;
std::cout << "knn query point:" << std::endl;
std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
std::cout << "knn query result:" << std::endl;
BOOST_FOREACH(value const& v, result_n)
std::cout << bg::wkt<box>(v.first) << " - " << v.second << std::endl;
//]
return 0;
}
//]