用于位置搜索的C / C ++库

时间:2014-07-05 07:11:11

标签: c++ c boost

我有一套经纬度来描绘这个地方。伦敦的纬度和经度集合如下(形式(纬度,长度)):

(36.47606,-119.44318),(43.63457,-123.09285),(36.48091,-119.44401),(10.36389,-66.73333),( - 24.81667,31.05),( - 24.76667,30.86667),( - 24.3,30.58333 )。

现在我想在上面给出的点之外创建一个区域:这样给定另一组(lat,long)点 - 我可以找出这两点是否存在:

  1. 是否相交。
  2. 一组点是否在另一组点内。
  3. 我尝试使用Boost的R树库 - 但是这个库只允许我指定一个矩形,而我想用点形成一个多边形。 C / c ++中是否有一些库可以让我获得所需的功能。如果是,有人可以借助示例来说明相同的内容。或者如果我在使用Boost的某个地方出错 - 那么有人可以帮我纠正它。

1 个答案:

答案 0 :(得分:3)

http://www.boost.org/doc/libs/1_53_0/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_2_two_geometries.html有一个使用Boost几何来检测多边形交集的示例,函数为:

template<typename Geometry1, typename Geometry2>
bool intersects(Geometry1 const & geometry1, Geometry2 const & geometry2)

他们的例子可以概括为:

boost::geometry::read_wkt("linestring(1 1,2 2,3 3)", line1);
boost::geometry::read_wkt("linestring(2 1,1 2,4 0)", line2);

bool b = boost::geometry::intersects(line1, line2);

std::cout << "Intersects: " << (b ? "YES" : "NO") << std::endl;

对于检测一组点是否在另一组点内的第二个问题,http://www.boost.org/doc/libs/1_54_0/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html似乎是对其内部函数的相关参考:

template<typename Geometry1, typename Geometry2>
bool within(Geometry1 const & geometry1, Geometry2 const & geometry2)

在这种情况下,他们的例子是:

polygon_type 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.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly);

point_type p(4, 1);

std::cout << "within: " << (boost::geometry::within(p, poly) ? "yes" : "no") << std::endl;

阅读最新文档以检查当前支持的几何形状的限制 - 目前看来内部几何体只能是一个点或框