17 Haziran 2017 Cumartesi

geometry is_valid metodu

Giriş
Eğer geometrik şekil hatalı ise bg::correct() çağrısı ile düzeltilebilir.

is_valid metodu - polygon + string
Örnek
Elimizde bir polygon olsun
typedef double base_type;
typedef bgm::d2::point_xy<base_type> point_type;
typedef bgm::polygon<point_type> polygon_type;
typedef bgm::multi_polygon<polygon_type> multipolygon_type;

polygon_type in = ...; 
Şöyle yaparız.
std::string reason;
cout << (bg::is_valid(in, reason)?"valid ":"invalid ") << reason << endl;
Hata varsa şu çıktıyı alırız.
invalid Geometry has invalid self-intersections. A self-intersection point was
  found at ...
is_valid metodu - multipolygon
Polygon veya Multi Polygon için kullanılabilir. Şöyle yaparız.
MultiPolygonType multipolygon = ...;

std::cout << boost::geometry::is_valid (multipolygon) << std::endl;
is_valid metodu - multipolygon + validity_failure_type
Şöyle yaparız.
MultiPolygonType multipolygon;
...

boost::geometry::validity_failure_type failure_type;
if(!boost::geometry::is_valid (multipolygon, failure_type)) {  ...
}
Şöyle yaparız.
template <typename TPolygon>
void printValidity (const TPolygon& polygons)
{
  boost::geometry::validity_failure_type failure;
  bool valid = boost::geometry::is_valid(polygons, failure);

  if(!valid) {
    std::cout << "not valid: " << failure << std::endl;
  }
  else {
    std::cout << "valid." << std::endl;
  }
}

Hiç yorum yok:

Yorum Gönder