#include #include #include #include "gdal/gdal_priv.h" #include #include "contour_creator.hh" HeightMap::HeightMap(const char* filepath) { // Open the file with gdal: const GDALAccess eAccess = GA_ReadOnly; GDALDatasetUniquePtr file; GDALRegister_GTiff(); file = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen( filepath, eAccess ))); if( !file ) { throw std::runtime_error("Could not open tif file!"); } // The heigthmap only has one band auto band = file->GetBands()[0]; // write the attrributes this->width = band->GetXSize(); this->height = band->GetYSize(); this->min = band->GetMinimum(); this->max = band-> GetMaximum(); this->reference_system = *(file->GetSpatialRef()); this->data = (float *) CPLMalloc(sizeof(float)*width*height); CPLErr error = band->RasterIO( GF_Read, 0, 0, width, height, this->data, width, height, GDT_Float32, 0, 0 ); if (error) { throw std::runtime_error("Could not read tif file!"); } band->FlushCache(); } float HeightMap::get_pixel(int x, int y) { // all the pixels are in an array of floats from left to right, top to bottom int offset = ((this->width * y) + x); //std::cout << " offset: " << offset << " " << x << ","<< y; return *(this->data + offset); }