Line data Source code
1 : /*********************************************************************** 2 : * File : postgisrastertiledataset.cpp 3 : * Project: PostGIS Raster driver 4 : * Purpose: GDAL Dataset implementation for PostGIS Raster tile 5 : * Author: Jorge Arevalo, jorge.arevalo@deimos-space.com 6 : * jorgearevalo@libregis.org 7 : * 8 : * 9 : *********************************************************************** 10 : * Copyright (c) 2013, Jorge Arevalo 11 : * Copyright (c) 2013, Even Rouault 12 : * 13 : * SPDX-License-Identifier: MIT 14 : ************************************************************************/ 15 : #include "postgisraster.h" 16 : 17 : /************************ 18 : * \brief Constructor 19 : ************************/ 20 0 : PostGISRasterTileDataset::PostGISRasterTileDataset( 21 0 : PostGISRasterDataset *poRDSIn, int nXSize, int nYSize) 22 0 : : poRDS(poRDSIn), pszPKID(nullptr) 23 : { 24 0 : nRasterXSize = nXSize; 25 0 : nRasterYSize = nYSize; 26 0 : } 27 : 28 : /************************ 29 : * \brief Destructor 30 : ************************/ 31 0 : PostGISRasterTileDataset::~PostGISRasterTileDataset() 32 : { 33 0 : if (pszPKID) 34 : { 35 0 : CPLFree(pszPKID); 36 0 : pszPKID = nullptr; 37 : } 38 0 : } 39 : 40 : /******************************************************** 41 : * \brief Get the affine transformation coefficients 42 : ********************************************************/ 43 0 : CPLErr PostGISRasterTileDataset::GetGeoTransform(GDALGeoTransform >) const 44 : { 45 0 : gt = m_gt; 46 0 : return CE_None; 47 : } 48 : 49 : /******************************************************** 50 : * \brief Return spatial extent of tile 51 : ********************************************************/ 52 0 : void PostGISRasterTileDataset::GetNativeExtent(double *pdfMinX, double *pdfMinY, 53 : double *pdfMaxX, 54 : double *pdfMaxY) const 55 : { 56 : // FIXME; incorrect in case of non 0 rotation terms 57 : 58 0 : double dfMinX = m_gt[GEOTRSFRM_TOPLEFT_X]; 59 0 : double dfMaxY = m_gt[GEOTRSFRM_TOPLEFT_Y]; 60 : 61 0 : double dfMaxX = m_gt[GEOTRSFRM_TOPLEFT_X] + 62 0 : nRasterXSize * m_gt[GEOTRSFRM_WE_RES] + 63 0 : nRasterYSize * m_gt[GEOTRSFRM_ROTATION_PARAM1]; 64 : 65 0 : double dfMinY = m_gt[GEOTRSFRM_TOPLEFT_Y] + 66 0 : nRasterXSize * m_gt[GEOTRSFRM_ROTATION_PARAM2] + 67 0 : nRasterYSize * m_gt[GEOTRSFRM_NS_RES]; 68 : 69 : // In case yres > 0 70 0 : if (dfMinY > dfMaxY) 71 : { 72 0 : double dfTemp = dfMinY; 73 0 : dfMinY = dfMaxY; 74 0 : dfMaxY = dfTemp; 75 : } 76 : 77 0 : *pdfMinX = dfMinX; 78 0 : *pdfMinY = dfMinY; 79 0 : *pdfMaxX = dfMaxX; 80 0 : *pdfMaxY = dfMaxY; 81 0 : }