Program Listing for File lola_dem.h¶
↰ Return to documentation for file (interfaces/lola_dem.h)
#pragma once
#include <filesystem>
#include <string>
#include <vector>
#include "lupnt/core/definitions.h"
namespace lupnt {
struct LolaSite {
std::string id;
std::string name;
double lat_deg;
double lon_deg;
};
const std::vector<LolaSite>& GetLolaSites();
const LolaSite& SelectLolaSite(double lat_deg, double lon_deg);
std::string LolaDemUrl(const std::string& site_id);
std::filesystem::path DownloadLolaDem(const std::string& site_id);
class LunarDem {
public:
LunarDem() = default;
LunarDem(const MatXd& x, const MatXd& y, const MatXd& elev, const LolaSite& site);
double GetElevation(double x, double y) const;
double GetElevationLatLon(double lat_deg, double lon_deg) const;
const MatXd& x() const { return x_; }
const MatXd& y() const { return y_; }
const MatXd& elevation() const { return elev_; }
const LolaSite& site() const { return site_; }
int rows() const { return static_cast<int>(elev_.rows()); }
int cols() const { return static_cast<int>(elev_.cols()); }
double x_min() const { return std::min(x_left_, x_right_); }
double x_max() const { return std::max(x_left_, x_right_); }
double y_min() const { return std::min(y_top_, y_bottom_); }
double y_max() const { return std::max(y_top_, y_bottom_); }
double center_x() const { return 0.5 * (x_left_ + x_right_); }
double center_y() const { return 0.5 * (y_top_ + y_bottom_); }
private:
MatXd x_, y_, elev_;
LolaSite site_;
// Regular-grid parameters cached for fast bilinear lookup. Columns increase in x,
// rows increase in y (dy_ is typically negative for a north-up raster).
double x0_ = 0.0, y0_ = 0.0; // coordinate of pixel-center (row 0, col 0)
double dx_ = 1.0, dy_ = 1.0; // per-column / per-row coordinate step [m]
int nx_ = 0, ny_ = 0;
double x_left_ = 0.0, x_right_ = 0.0, y_top_ = 0.0, y_bottom_ = 0.0;
};
LunarDem LoadLolaDem(double lat_deg, double lon_deg, double half_width_m = 5000.0,
double max_res = 20.0, const std::filesystem::path& dem_file = {});
} // namespace lupnt