aboutsummaryrefslogtreecommitdiff
path: root/src/grids.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-14 00:15:27 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-14 00:15:27 +0100
commitb934fd3885fa017b0c7a5ca59083a7f52fdaafc0 (patch)
treee29421448e628a962297edaa31ab70b3275b9b62 /src/grids.cpp
parent49f8ea7ea4755144310722a927f1e6f788c39e51 (diff)
downloadPROJ-b934fd3885fa017b0c7a5ca59083a7f52fdaafc0.tar.gz
PROJ-b934fd3885fa017b0c7a5ca59083a7f52fdaafc0.zip
Grid class: add a name() method
Diffstat (limited to 'src/grids.cpp')
-rw-r--r--src/grids.cpp117
1 files changed, 68 insertions, 49 deletions
diff --git a/src/grids.cpp b/src/grids.cpp
index 090f7320..8fe6d745 100644
--- a/src/grids.cpp
+++ b/src/grids.cpp
@@ -95,8 +95,9 @@ bool ExtentAndRes::intersects(const ExtentAndRes &other) const {
// ---------------------------------------------------------------------------
-Grid::Grid(int widthIn, int heightIn, const ExtentAndRes &extentIn)
- : m_width(widthIn), m_height(heightIn), m_extent(extentIn) {}
+Grid::Grid(const std::string &name, int widthIn, int heightIn,
+ const ExtentAndRes &extentIn)
+ : m_name(name), m_width(widthIn), m_height(heightIn), m_extent(extentIn) {}
// ---------------------------------------------------------------------------
@@ -104,9 +105,9 @@ Grid::~Grid() = default;
// ---------------------------------------------------------------------------
-VerticalShiftGrid::VerticalShiftGrid(int widthIn, int heightIn,
- const ExtentAndRes &extentIn)
- : Grid(widthIn, heightIn, extentIn) {}
+VerticalShiftGrid::VerticalShiftGrid(const std::string &nameIn, int widthIn,
+ int heightIn, const ExtentAndRes &extentIn)
+ : Grid(nameIn, widthIn, heightIn, extentIn) {}
// ---------------------------------------------------------------------------
@@ -132,7 +133,7 @@ static ExtentAndRes globalExtent() {
class NullVerticalShiftGrid : public VerticalShiftGrid {
public:
- NullVerticalShiftGrid() : VerticalShiftGrid(3, 3, globalExtent()) {}
+ NullVerticalShiftGrid() : VerticalShiftGrid("null", 3, 3, globalExtent()) {}
bool isNullGrid() const override { return true; }
bool valueAt(int, int, float &out) const override;
@@ -156,17 +157,19 @@ class GTXVerticalShiftGrid : public VerticalShiftGrid {
GTXVerticalShiftGrid &operator=(const GTXVerticalShiftGrid &) = delete;
public:
- GTXVerticalShiftGrid(PJ_CONTEXT *ctx, PAFile fp, int widthIn, int heightIn,
+ GTXVerticalShiftGrid(PJ_CONTEXT *ctx, PAFile fp, const std::string &nameIn,
+ int widthIn, int heightIn,
const ExtentAndRes &extentIn)
- : VerticalShiftGrid(widthIn, heightIn, extentIn), m_ctx(ctx), m_fp(fp) {
- }
+ : VerticalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx),
+ m_fp(fp) {}
~GTXVerticalShiftGrid() override;
bool valueAt(int x, int y, float &out) const override;
bool isNodata(float val, double multiplier) const override;
- static GTXVerticalShiftGrid *open(PJ_CONTEXT *ctx, PAFile fp);
+ static GTXVerticalShiftGrid *open(PJ_CONTEXT *ctx, PAFile fp,
+ const std::string &name);
};
// ---------------------------------------------------------------------------
@@ -175,7 +178,8 @@ GTXVerticalShiftGrid::~GTXVerticalShiftGrid() { pj_ctx_fclose(m_ctx, m_fp); }
// ---------------------------------------------------------------------------
-GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, PAFile fp) {
+GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, PAFile fp,
+ const std::string &name) {
unsigned char header[40];
/* -------------------------------------------------------------------- */
@@ -231,7 +235,7 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, PAFile fp) {
extent.eastLon = (xorigin + xstep * (columns - 1)) * DEG_TO_RAD;
extent.northLat = (yorigin + ystep * (rows - 1)) * DEG_TO_RAD;
- return new GTXVerticalShiftGrid(ctx, fp, columns, rows, extent);
+ return new GTXVerticalShiftGrid(ctx, fp, name, columns, rows, extent);
}
// ---------------------------------------------------------------------------
@@ -390,9 +394,9 @@ class GTiffGrid : public Grid {
public:
GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, uint32 ifdIdx,
- int widthIn, int heightIn, const ExtentAndRes &extentIn,
- TIFFDataType dtIn, uint16 samplesPerPixelIn, uint16 planarConfig,
- bool bottomUpIn);
+ const std::string &nameIn, int widthIn, int heightIn,
+ const ExtentAndRes &extentIn, TIFFDataType dtIn,
+ uint16 samplesPerPixelIn, uint16 planarConfig, bool bottomUpIn);
~GTiffGrid() override;
@@ -410,11 +414,11 @@ class GTiffGrid : public Grid {
// ---------------------------------------------------------------------------
GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache,
- uint32 ifdIdx, int widthIn, int heightIn,
- const ExtentAndRes &extentIn, TIFFDataType dtIn,
- uint16 samplesPerPixelIn, uint16 planarConfig,
- bool bottomUpIn)
- : Grid(widthIn, heightIn, extentIn), m_ctx(ctx), m_hTIFF(hTIFF),
+ uint32 ifdIdx, const std::string &nameIn, int widthIn,
+ int heightIn, const ExtentAndRes &extentIn,
+ TIFFDataType dtIn, uint16 samplesPerPixelIn,
+ uint16 planarConfig, bool bottomUpIn)
+ : Grid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_hTIFF(hTIFF),
m_cache(cache), m_ifdIdx(ifdIdx), m_dt(dtIn),
m_samplesPerPixel(samplesPerPixelIn), m_planarConfig(planarConfig),
m_bottomUp(bottomUpIn), m_dirOffset(TIFFCurrentDirOffset(hTIFF)),
@@ -512,6 +516,11 @@ GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache,
} catch (const std::exception &) {
}
}
+
+ auto oIter = m_metadata.find(std::pair<int, std::string>(-1, "grid_name"));
+ if (oIter != m_metadata.end()) {
+ m_name += ", " + oIter->second;
+ }
}
// ---------------------------------------------------------------------------
@@ -1026,9 +1035,9 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
return nullptr;
}
- auto ret = std::unique_ptr<GTiffGrid>(
- new GTiffGrid(m_ctx, m_hTIFF, m_cache, m_ifdIdx, width, height, extent,
- dt, samplesPerPixel, planarConfig, vRes < 0));
+ auto ret = std::unique_ptr<GTiffGrid>(new GTiffGrid(
+ m_ctx, m_hTIFF, m_cache, m_ifdIdx, m_filename, width, height, extent,
+ dt, samplesPerPixel, planarConfig, vRes < 0));
m_ifdIdx++;
m_hasNextGrid = TIFFReadDirectory(m_hTIFF) != 0;
m_nextDirOffset = TIFFCurrentDirOffset(m_hTIFF);
@@ -1149,7 +1158,8 @@ GTiffVGridShiftSet::~GTiffVGridShiftSet() = default;
// ---------------------------------------------------------------------------
GTiffVGrid::GTiffVGrid(std::unique_ptr<GTiffGrid> &&grid, uint16 idxSample)
- : VerticalShiftGrid(grid->width(), grid->height(), grid->extentAndRes()),
+ : VerticalShiftGrid(grid->name(), grid->width(), grid->height(),
+ grid->extentAndRes()),
m_grid(std::move(grid)), m_idxSample(idxSample) {}
// ---------------------------------------------------------------------------
@@ -1289,7 +1299,7 @@ VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
return nullptr;
}
if (ends_with(filename, "gtx") || ends_with(filename, "GTX")) {
- auto grid = GTXVerticalShiftGrid::open(ctx, fp);
+ auto grid = GTXVerticalShiftGrid::open(ctx, fp, filename);
if (!grid) {
pj_ctx_fclose(ctx, fp);
return nullptr;
@@ -1321,7 +1331,8 @@ VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
#else
- pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_log(ctx, PJ_LOG_ERROR,
+ "TIFF grid, but TIFF support disabled in this build");
pj_ctx_fclose(ctx, fp);
return nullptr;
#endif
@@ -1366,9 +1377,10 @@ const VerticalShiftGrid *VerticalShiftGridSet::gridAt(double lon,
// ---------------------------------------------------------------------------
-HorizontalShiftGrid::HorizontalShiftGrid(int widthIn, int heightIn,
+HorizontalShiftGrid::HorizontalShiftGrid(const std::string &nameIn, int widthIn,
+ int heightIn,
const ExtentAndRes &extentIn)
- : Grid(widthIn, heightIn, extentIn) {}
+ : Grid(nameIn, widthIn, heightIn, extentIn) {}
// ---------------------------------------------------------------------------
@@ -1387,7 +1399,8 @@ HorizontalShiftGridSet::~HorizontalShiftGridSet() = default;
class NullHorizontalShiftGrid : public HorizontalShiftGrid {
public:
- NullHorizontalShiftGrid() : HorizontalShiftGrid(3, 3, globalExtent()) {}
+ NullHorizontalShiftGrid()
+ : HorizontalShiftGrid("null", 3, 3, globalExtent()) {}
bool isNullGrid() const override { return true; }
@@ -1421,9 +1434,9 @@ class NTv1Grid : public HorizontalShiftGrid {
NTv1Grid &operator=(const NTv1Grid &) = delete;
public:
- NTv1Grid(PJ_CONTEXT *ctx, PAFile fp, int widthIn, int heightIn,
- const ExtentAndRes &extentIn)
- : HorizontalShiftGrid(widthIn, heightIn, extentIn), m_ctx(ctx),
+ NTv1Grid(PJ_CONTEXT *ctx, PAFile fp, const std::string &nameIn, int widthIn,
+ int heightIn, const ExtentAndRes &extentIn)
+ : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx),
m_fp(fp) {}
~NTv1Grid() override;
@@ -1496,7 +1509,7 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, PAFile fp,
const int rows = static_cast<int>(
fabs((extent.northLat - extent.southLat) / extent.resLat + 0.5) + 1);
- return new NTv1Grid(ctx, fp, columns, rows, extent);
+ return new NTv1Grid(ctx, fp, filename, columns, rows, extent);
}
// ---------------------------------------------------------------------------
@@ -1535,9 +1548,9 @@ class CTable2Grid : public HorizontalShiftGrid {
CTable2Grid &operator=(const CTable2Grid &) = delete;
public:
- CTable2Grid(PJ_CONTEXT *ctx, PAFile fp, int widthIn, int heightIn,
- const ExtentAndRes &extentIn)
- : HorizontalShiftGrid(widthIn, heightIn, extentIn), m_ctx(ctx),
+ CTable2Grid(PJ_CONTEXT *ctx, PAFile fp, const std::string &nameIn,
+ int widthIn, int heightIn, const ExtentAndRes &extentIn)
+ : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx),
m_fp(fp) {}
~CTable2Grid() override;
@@ -1602,7 +1615,7 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, PAFile fp,
extent.eastLon = extent.westLon + (width - 1) * extent.resLon;
extent.northLat = extent.southLat + (height - 1) * extent.resLon;
- return new CTable2Grid(ctx, fp, width, height, extent);
+ return new CTable2Grid(ctx, fp, filename, width, height, extent);
}
// ---------------------------------------------------------------------------
@@ -1665,8 +1678,9 @@ class NTv2Grid : public HorizontalShiftGrid {
NTv2Grid(const std::string &nameIn, PJ_CONTEXT *ctx, PAFile fp,
unsigned long long offsetIn, bool mustSwapIn, int widthIn,
int heightIn, const ExtentAndRes &extentIn)
- : HorizontalShiftGrid(widthIn, heightIn, extentIn), m_name(nameIn),
- m_ctx(ctx), m_fp(fp), m_offset(offsetIn), m_mustSwap(mustSwapIn) {}
+ : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn),
+ m_name(nameIn), m_ctx(ctx), m_fp(fp), m_offset(offsetIn),
+ m_mustSwap(mustSwapIn) {}
bool valueAt(int, int, float &lonShift, float &latShift) const override;
};
@@ -1811,8 +1825,9 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, PAFile fp,
}
auto offset = pj_ctx_ftell(ctx, fp);
- auto grid = std::unique_ptr<NTv2Grid>(new NTv2Grid(
- gridName, ctx, fp, offset, must_swap, columns, rows, extent));
+ auto grid = std::unique_ptr<NTv2Grid>(
+ new NTv2Grid(filename + ", " + gridName, ctx, fp, offset, must_swap,
+ columns, rows, extent));
std::string parentName;
parentName.assign(header + 24, 8);
auto iter = mapGrids.find(parentName);
@@ -1881,7 +1896,8 @@ GTiffHGridShiftSet::~GTiffHGridShiftSet() = default;
GTiffHGrid::GTiffHGrid(std::unique_ptr<GTiffGrid> &&grid, uint16 idxLatShift,
uint16 idxLonShift, double convFactorToRadian,
bool positiveEast)
- : HorizontalShiftGrid(grid->width(), grid->height(), grid->extentAndRes()),
+ : HorizontalShiftGrid(grid->name(), grid->width(), grid->height(),
+ grid->extentAndRes()),
m_grid(std::move(grid)), m_idxLatShift(idxLatShift),
m_idxLonShift(idxLonShift), m_convFactorToRadian(convFactorToRadian),
m_positiveEast(positiveEast) {}
@@ -2174,7 +2190,8 @@ HorizontalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
#else
- pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_log(ctx, PJ_LOG_ERROR,
+ "TIFF grid, but TIFF support disabled in this build");
pj_ctx_fclose(ctx, fp);
return nullptr;
#endif
@@ -2284,7 +2301,8 @@ GTiffGenericGridShiftSet::~GTiffGenericGridShiftSet() = default;
// ---------------------------------------------------------------------------
GTiffGenericGrid::GTiffGenericGrid(std::unique_ptr<GTiffGrid> &&grid)
- : GenericShiftGrid(grid->width(), grid->height(), grid->extentAndRes()),
+ : GenericShiftGrid(grid->name(), grid->width(), grid->height(),
+ grid->extentAndRes()),
m_grid(std::move(grid)) {}
// ---------------------------------------------------------------------------
@@ -2329,7 +2347,7 @@ void GTiffGenericGrid::insertGrid(PJ_CONTEXT *ctx,
class NullGenericShiftGrid : public GenericShiftGrid {
public:
- NullGenericShiftGrid() : GenericShiftGrid(3, 3, globalExtent()) {}
+ NullGenericShiftGrid() : GenericShiftGrid("null", 3, 3, globalExtent()) {}
bool isNullGrid() const override { return true; }
bool valueAt(int, int, int, float &out) const override;
@@ -2404,9 +2422,9 @@ GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, PAFile fp,
// ---------------------------------------------------------------------------
-GenericShiftGrid::GenericShiftGrid(int widthIn, int heightIn,
- const ExtentAndRes &extentIn)
- : Grid(widthIn, heightIn, extentIn) {}
+GenericShiftGrid::GenericShiftGrid(const std::string &nameIn, int widthIn,
+ int heightIn, const ExtentAndRes &extentIn)
+ : Grid(nameIn, widthIn, heightIn, extentIn) {}
// ---------------------------------------------------------------------------
@@ -2459,7 +2477,8 @@ GenericShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
#else
- pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_log(ctx, PJ_LOG_ERROR,
+ "TIFF grid, but TIFF support disabled in this build");
pj_ctx_fclose(ctx, fp);
return nullptr;
#endif