Boost.Geometry ライブラリを使用して、リングが別のリングに含まれているかどうかを判断しようとしています。
次のコードを書きました。
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/geometries.hpp>
using namespace boost::geometry;
int main (int argc, const char * argv[])
{
typedef model::d2::point_xy<double> P;
model::ring<P> ring1, ring2;
read_wkt("polygon((0 0,0 3,3 3,3 0,0 0))", ring1);
read_wkt("polygon((1 1,1 2,2 2,2 1,1 1))", ring2);
bool b = within(ring1, ring2);
std::cout << "Within: " << (b ? "YES" : "NO") << std::endl;
return 0;
}
ただし、次の静的アサーションに失敗するため、(Boost 1.48.0 では) コンパイルされませんwithin
。
NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
within
ポイントが別のジオメトリ内にあるかどうかのチェックのみをサポートしているようです(ドキュメントによると)。
リングをラインストリングとして扱うことを考えていたので、intersect
リングの最初のポイントが他のリング内にあるかどうかを確認します ring
しかし、それぞれを a にコピーすることを避けることができるかどうかはわかりませんlinestring
。
within
for two ringの機能を (妥当なパフォーマンスで) 達成する方法はありますか?