mirror of
https://gitlab.com/Trygve/contour-creator.git
synced 2024-11-21 23:00:18 +00:00
Moved HeightMap into h and cpp files
This commit is contained in:
parent
b0e9910e93
commit
6f001d23f8
@ -3,9 +3,9 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
|
|
||||||
find_package(GDAL CONFIG REQUIRED)
|
find_package(GDAL CONFIG REQUIRED)
|
||||||
|
|
||||||
set(EXAMPLE_NAME read_tiff)
|
set(EXAMPLE_NAME marching_squares)
|
||||||
add_executable(${EXAMPLE_NAME}
|
add_executable(${EXAMPLE_NAME}
|
||||||
read_tiff.cpp
|
main.cpp HeightMap.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
39
HeightMap.cpp
Normal file
39
HeightMap.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include <gdal/gdal.h>
|
||||||
|
#include "gdal/gdal_priv.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <stdfloat>
|
||||||
|
|
||||||
|
#include "HeightMap.hh"
|
||||||
|
|
||||||
|
HeightMap::HeightMap(const char* filepath)
|
||||||
|
{
|
||||||
|
// Open the file with some gdal nonsense:
|
||||||
|
const GDALAccess eAccess = GA_ReadOnly;
|
||||||
|
GDALDatasetUniquePtr file;
|
||||||
|
GDALAllRegister();
|
||||||
|
file = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen( filepath, eAccess )));
|
||||||
|
if( !file )
|
||||||
|
{
|
||||||
|
std::cout << "Could not open tiff file!"; // handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
// The heigthmap only has one band
|
||||||
|
auto band = file->GetBands()[0];
|
||||||
|
// write the attrributes
|
||||||
|
this->x_size = band->GetXSize();
|
||||||
|
this->y_size = band->GetYSize();
|
||||||
|
|
||||||
|
this->data = (float *) CPLMalloc(sizeof(float)*x_size*y_size);
|
||||||
|
band->RasterIO( GF_Read, 0, 0, x_size, y_size,
|
||||||
|
this->data, x_size, y_size, GDT_Float32,
|
||||||
|
0, 0 );
|
||||||
|
|
||||||
|
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->x_size * y) + x);
|
||||||
|
return *(this->data + offset);
|
||||||
|
}
|
19
HeightMap.hh
Normal file
19
HeightMap.hh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <gdal/gdal.h>
|
||||||
|
#include "gdal/gdal_priv.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <stdfloat>
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief stores the contents of a tif file with float32 values
|
||||||
|
*/
|
||||||
|
class HeightMap
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float* data;
|
||||||
|
int x_size; //!< x dimension in pixels
|
||||||
|
int y_size; //!< y dimension in pixels
|
||||||
|
|
||||||
|
HeightMap(const char* filepath);
|
||||||
|
float get_pixel(int x,int y);
|
||||||
|
};
|
17
main.cpp
Normal file
17
main.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "HeightMap.hh"
|
||||||
|
|
||||||
|
int main(int argc, const char* argv[])
|
||||||
|
{
|
||||||
|
const char* filepath = argv[1];
|
||||||
|
HeightMap map(filepath);
|
||||||
|
std::cout << "x: " << map.x_size << " y: " << map.y_size << "\n";
|
||||||
|
for (int y = 0; y < map.y_size; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < map.x_size; x++)
|
||||||
|
{
|
||||||
|
std::cout << map.get_pixel(x, y) << " ";
|
||||||
|
}
|
||||||
|
std::cout << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
130
read_tiff.cpp
130
read_tiff.cpp
@ -1,130 +0,0 @@
|
|||||||
#include <array>
|
|
||||||
#include <cstddef>
|
|
||||||
#include <gdal/gdal.h>
|
|
||||||
#include "gdal/gdal_priv.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iterator>
|
|
||||||
|
|
||||||
#include <stdfloat>
|
|
||||||
#include <thread>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class HeightMap
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
float* data;
|
|
||||||
int x_size;
|
|
||||||
int y_size;
|
|
||||||
|
|
||||||
HeightMap(const char* filepath);
|
|
||||||
float get_pixel(int x,int y);
|
|
||||||
};
|
|
||||||
|
|
||||||
HeightMap::HeightMap(const char* filepath)
|
|
||||||
{
|
|
||||||
// Open the file with some gdal nonsense:
|
|
||||||
const GDALAccess eAccess = GA_ReadOnly;
|
|
||||||
GDALDatasetUniquePtr file;
|
|
||||||
GDALAllRegister();
|
|
||||||
file = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen( filepath, eAccess )));
|
|
||||||
if( !file )
|
|
||||||
{
|
|
||||||
std::cout << "Could not open tiff file!"; // handle error
|
|
||||||
}
|
|
||||||
|
|
||||||
// The heigthmap only has one band
|
|
||||||
auto band = file->GetBands()[0];
|
|
||||||
// write the attrributes
|
|
||||||
this->x_size = band->GetXSize();
|
|
||||||
this->y_size = band->GetYSize();
|
|
||||||
|
|
||||||
this->data = (float *) CPLMalloc(sizeof(GDT_Float32)*x_size*y_size);
|
|
||||||
band->RasterIO( GF_Read, 0, 0, x_size, y_size,
|
|
||||||
this->data, x_size, y_size, GDT_Float32,
|
|
||||||
0, 0 );
|
|
||||||
}
|
|
||||||
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->x_size * y + x) * sizeof(GDT_Float32);
|
|
||||||
return *(this->data + offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, const char* argv[])
|
|
||||||
{
|
|
||||||
const char* filepath = argv[1];
|
|
||||||
HeightMap map(filepath);
|
|
||||||
std::cout << map.get_pixel(0, 0);
|
|
||||||
/*
|
|
||||||
for (int i = 0; i < map.x_size*map.y_size; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
map.data+=sizeof(GDT_Float32);
|
|
||||||
if (*map.data)
|
|
||||||
{
|
|
||||||
std::cout << *map.data<<" "<<i<<"\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
int oldmain(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 )
|
|
||||||
{poDataset
|
|
||||||
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<<" "<<i<<"\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::cout << "🤡"<<*buffer;
|
|
||||||
}
|
|
||||||
*/
|
|
Loading…
Reference in New Issue
Block a user