#include #include #include #include "gdal/gdal_priv.h" #include #include #include #include #include #include /* class HeightMap { public: float* data; int x_size; int y_size; HeightMap(int x_size, int y_size); }; HeightMap::HeightMap(int x_size, int y_size, char* filepath) { this->x_size = x_size; this->y_size = y_size; this->data = (float *) CPLMalloc(sizeof(GDT_Float32)*x_size*y_size); } */ int main(int argc, const char* argv[]) { if (argc != 2) { return EINVAL; } const char* pszFilename = argv[1]; GDALDatasetUniquePtr poDataset; GDALAllRegister(); const GDALAccess eAccess = GA_ReadOnly; poDataset = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen( pszFilename, eAccess ))); if( !poDataset ) { std::cout << "Error :/"; // handle error } std::cout << poDataset->GetDriverName(); double adfGeoTransform[6]; printf( "Driver: %s/%s\n", poDataset->GetDriver()->GetDescription(), poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) ); printf( "Size is %dx%dx%d\n", poDataset->GetRasterXSize(), poDataset->GetRasterYSize(), poDataset->GetRasterCount() ); if( poDataset->GetProjectionRef() != NULL ) printf( "Projection is `%s'\n", poDataset->GetProjectionRef() ); if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) { printf( "Origin = (%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3] ); printf( "Pixel Size = (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5] ); } float *buffer; auto poBand = poDataset->GetBands()[0]; int x_size = poBand->GetXSize(); int y_size = poBand->GetYSize(); buffer = (float *) CPLMalloc(sizeof(GDT_Float32)*x_size*y_size); poBand->RasterIO( GF_Read, 0, 0, x_size, y_size, buffer, x_size, y_size, GDT_Float32, 0, 0 ); for (int i = 0; i < x_size*y_size; i++) { buffer+=sizeof(GDT_Float32); if (*buffer) { std::cout << *buffer<<" "<