3#ifndef BOAT_GEOMETRY_RASTER_HPP
4#define BOAT_GEOMETRY_RASTER_HPP
7#include <boat/geometry/detail/fibonacci.hpp>
9#include <boost/qvm/map_vec_mat.hpp>
24 auto sentinel = [&](
auto& ll) {
26 return !xy || !boost::geometry::covered_by(
32 std::ranges::to<geographic::multi_point>())
35 for (
auto fib : fibonacci_levels) {
36 auto indices = std::unordered_set<size_t>{};
37 for (
auto& p : points)
38 for (
auto i : fib.nearests(p, sentinel)) {
39 if (!indices.insert(i).second)
41 if (indices.size() > points.size() * 2)
46 auto& lvl = ret[numbers::earth::sqrt_area / std::sqrt(fib.num_points)];
47 lvl.resize(indices.size());
48 for (
auto [i, j] : indices | std::views::enumerate)
57 namespace qvm = boost::qvm;
58 auto const& [a, b] = mid_pixel;
59 auto scale = boost::geometry::distance(a, b);
60 return qvm::translation_mat(qvm::vec{{a.x(), a.y()}}) *
61 qvm::rotz_mat<3>(.5 * numbers::pi - boost::geometry::azimuth(a, b)) *
62 qvm::diag_mat(qvm::vec{{scale, -scale, 1.}}) *
63 qvm::translation_mat(-qvm::vec{{width * .5, height * .5}});
Definition transform.hpp:28
Definition algorithm.hpp:10
bool transform(T1 const &geom1, T2 &geom2, Strategy const &strategy)
Definition transform.hpp:95
geographic::grid geographic_interpolate(int width, int height, matrix const &mat, srs_spec auto const &crs, size_t num_points)
Approximates a raster footprint with points from a fixed global grid.
Definition raster.hpp:14
auto mat_inverse(matrix const &v)
Definition transform.hpp:89
boost::geometry::strategy::transform::matrix_transformer< double, 2, 2 > mat_forward
Definition transform.hpp:86
matrix affine(int width, int height, cartesian::segment const &mid_pixel)
Maps pixel coordinates to spatial coordinates.
Definition raster.hpp:55
auto srs_forward(T const &v)
Definition transform.hpp:75
auto transformation(srs_spec auto const &a, srs_spec auto const &b)
Definition transform.hpp:58
d2< boost::geometry::cs::cartesian > cartesian
Definition vocabulary.hpp:97
auto srs_inverse(T const &v)
Definition transform.hpp:81
auto box_area_interpolate(T const &mbr, size_t num_points)
Definition algorithm.hpp:13
boost::qvm::mat< double, 3, 3 > matrix
Definition vocabulary.hpp:99
model::multi_point< point > multi_point
Definition vocabulary.hpp:63
model::segment< point > segment
Definition vocabulary.hpp:67
std::map< double, multi_point > grid
Definition vocabulary.hpp:68
model::box< point > box
Definition vocabulary.hpp:66