28 Şubat 2018 Çarşamba

geometry area metodu

Giriş
Şu satırı dahil ederiz.
#include <boost/geometry/algorithms/area.hpp>
2 boyutlu noktlar için çalışır, 3  boyutlular için çalışmaz.

area - multi_polygon
Örnek
Şöyle yaparız.
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;


multipolygon_type out = ...İ
std::cout << bg::area(out) << " " << bg::wkt(out) << std::endl;
Örnek
Elimizde iki polgon olsun. İkisnin kesişimini bulup toplam alanı hesaplamak için şöyle yaparız.
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/io/io.hpp>
#include <boost/geometry/algorithms/area.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>

namespace bg = boost::geometry;
namespace bgm = bg::model;
typedef bgm::polygon<bgm::d2::point_xy<double> > polygon;

int main() {
  polygon poly1, poly2;
  bg::read<bg::format_wkt>(poly1, "POLYGON((...))");
  bg::read<bg::format_wkt>(poly2, "POLYGON((...))");

  std::cout << bg::wkt(poly1) << "\n";
  std::cout << bg::wkt(poly2) << "\n";
  std::deque<polygon> output;
  bg::intersection(poly1, poly2, output);

  double area = 0;
  for (auto& p : output)
    area += bg::area(p);
}



Hiç yorum yok:

Yorum Gönder