boost::geometry::index::rtree.remove() with Geographic coordinate system can fail
example code:
#include <boost\config\compiler\visualc.hpp>
#include <boost/geometry/index/rtree.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/geometries.hpp>
namespace bgi = boost::geometry::index;
namespace bg = boost::geometry;
typedef bg::model::point<double, 2, bg::cs::geographic<bg::degree> > Geo2DPoint;
typedef std::pair< Geo2DPoint, unsigned > RTreeValue;
typedef bgi::rtree<RTreeValue, bgi::quadratic<5> > rtree_t;
typedef boost::geometry::model::box< Geo2DPoint > GeoBox;
int main()
{
rtree_t rtree;
Geo2DPoint p;
p.set<0>( -1.558444 );
p.set<1>( 52.38664 );
rtree.insert( std::make_pair( p, 792) );
p.set<0>( -1.558444 );
p.set<1>( 52.38664 );
rtree.insert( std::make_pair( p, 793 ) );
p.set<0>( -2.088824 );
p.set<1>( 51.907406 );
rtree.insert( std::make_pair( p, 800 ) );
p.set<0>( -1.576363 );
p.set<1>( 53.784089 );
rtree.insert( std::make_pair( p, 799 ) );
p.set<0>( -77.038816 );
p.set<1>( 38.897282 );
rtree.insert( std::make_pair( p, 801 ) );
p.set<0>( -1.558444 );
p.set<1>( 52.38664 );
rtree.insert( std::make_pair( p, 794 ) );
p.set<0>( -0.141588 );
p.set<1>( 51.501009 );
rtree.insert( std::make_pair( p, 797 ) );
p.set<0>( -118.410468 );
p.set<1>( 34.103003 );
rtree.insert( std::make_pair( p, 798 ) );
p.set<0>( -0.127592 );
p.set<1>( 51.503407 );
rtree.insert( std::make_pair( p, 796 ) );
size_t num_removed = rtree.remove( std::make_pair( p, 796 ) ); // Here, num_removed should be 1 but it is 0
return 0;
}
as the comment says, num_removed should be 1 but it is 0
Change History
(3)
Component: |
None → geometry
|
Owner: |
set to Barend Gehrels
|
Milestone: |
To Be Determined → Boost 1.62.0
|
Resolution: |
→ fixed
|
Status: |
new → closed
|
Milestone: |
Boost 1.62.0 → Boost 1.63.0
|
Thanks!
Related to: https://svn.boost.org/trac/boost/ticket/12412
Fix: https://github.com/boostorg/geometry/commit/0fb9e297acc77912255e22fbfd16ac2f18e25c57