Calculate statistics for a square moving window
The following example opens a raster dataset and calculates the mean value of a surrounding circular window for each cell. For larger maps, the computational cost is proportional to the size of the raster multiplied by the radius.
// example_7.cpp
#include <pronto/raster/io.h>
#include <pronto/raster/moving_window_indicator.h>
#include <pronto/raster/plot_raster.h>
#include <pronto/raster/indicator/mean.h>
namespace pr = pronto::raster;
int main()
{
  auto in = pr::create_temp<int>(5, 6);
  int i = 0;
  for (auto&& v : in) {
    i = (i + 3) % 7;
    v = i;
  }
  auto window = pr::circle(2);
  auto indicator = pr::mean_generator<int>{};
  auto out = pr::moving_window_indicator(in, window, indicator);
  plot_raster(in);
  plot_raster(out);
  return 0;
}
Output:
Rows: 5, Cols: 6, Value type: class std::optional<double>
3       3.125   3.44444 4.11111 2.75    3.5
2.875   3       3.16667 3.25    3.90909 2.75
2.55556 2.83333 3       3.30769 3.25    4.11111
1.875   2.54545 2.83333 2.91667 3.45455 3.5
3.16667 1.875   2.55556 3.22222 3.25    3.66667