2
私はBoost.Geometryライブラリを使って別のリングにリングが含まれているかどうかを調べようとしています。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;
}
をしかし、それはwithin
の静的なアサーションを失敗したので、それは、(ブースト1.48.0で)コンパイルされません:
NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
それはwithin
ようですポイントが別のジオメトリ(documentationによる)内にあるかどうかのチェックのみをサポートします。
私はリングを線ストリングとして扱い、次にintersect
かどうかをチェックし、そうでない場合は、リングの最初の点が他のリング内にあるかどうかを確認します。それぞれring
をlinestring
にコピーすることを避けることができるかどうかはわかりません。
within
の機能を2つのリング(妥当なパフォーマンス)で実現する方法はありますか?
"リング"は正しい単語ですか?これらの形は、より正方形に見えます。 –
"リング"は本質的に閉じたジオメトリ(ポリゴンのような)ですが、 "穴"はありません。これらの図形は実際には正方形です。 –
私は彼らが実際に "線形のリング"を短縮するように言います、あなたは正しい - これらはリングではありません。 –