Program Listing for File GdalRaster.hpp

Return to documentation for file (optional/gdal/src/navtk/geospatial/GdalRaster.hpp)

#pragma once

#include <array>
#include <map>
#include <memory>
#include <string>
#include <utility>

#include <navtk/aspn.hpp>
#include <navtk/geospatial/Raster.hpp>

namespace navtk {
namespace geospatial {

class GdalRaster : public Raster {
public:
    GdalRaster(const std::string& filename, const std::string& undulation_path = "WW15MGH.GRD");

    ~GdalRaster() = default;

    void scan_tile();

    bool is_valid() const;

    int get_width() const override;

    int get_height() const override;

    std::pair<double, double> wgs84_to_pixel(double latitude, double longitude) const override;

    std::pair<double, double> pixel_to_wgs84(double x_pixel, double y_pixel) const;

    double read_pixel(size_t idx_x, size_t idx_y) override;

    std::string get_name() const override;

    bool is_valid_data(double data) const override;

    void unload() override;

private:
    GdalRaster(const GdalRaster&)            = delete;
    GdalRaster& operator=(const GdalRaster&) = delete;
    GdalRaster(GdalRaster&&)                 = delete;
    GdalRaster& operator=(GdalRaster&&)      = delete;

    void transform_tile(AspnMeasurementAltitudeReference prev_ref,
                        AspnMeasurementAltitudeReference new_ref);

    std::string filename;
    bool valid = false;

    size_t size_x;
    size_t size_y;

    std::vector<double> cached_tile;
    bool cached = false;

    std::array<double, 6> pixel_transform;

    std::unique_ptr<OGRCoordinateTransformation, detail::TransformDelete>
        wgs84_to_map_transformation;
    std::unique_ptr<OGRCoordinateTransformation, detail::TransformDelete>
        map_to_wgs84_transformation;

    std::string undulation_path;
};
}  // namespace geospatial
}  // namespace navtk