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 : 27 0 : adfGeoTransform[GEOTRSFRM_TOPLEFT_X] = 0; 28 0 : adfGeoTransform[GEOTRSFRM_WE_RES] = 1; 29 0 : adfGeoTransform[GEOTRSFRM_ROTATION_PARAM1] = 0; 30 0 : adfGeoTransform[GEOTRSFRM_TOPLEFT_Y] = 0; 31 0 : adfGeoTransform[GEOTRSFRM_ROTATION_PARAM2] = 0; 32 0 : adfGeoTransform[GEOTRSFRM_NS_RES] = 1; 33 0 : } 34 : 35 : /************************ 36 : * \brief Destructor 37 : ************************/ 38 0 : PostGISRasterTileDataset::~PostGISRasterTileDataset() 39 : { 40 0 : if (pszPKID) 41 : { 42 0 : CPLFree(pszPKID); 43 0 : pszPKID = nullptr; 44 : } 45 0 : } 46 : 47 : /******************************************************** 48 : * \brief Get the affine transformation coefficients 49 : ********************************************************/ 50 0 : CPLErr PostGISRasterTileDataset::GetGeoTransform(double *padfTransform) 51 : { 52 : // copy necessary values in supplied buffer 53 0 : padfTransform[0] = adfGeoTransform[0]; 54 0 : padfTransform[1] = adfGeoTransform[1]; 55 0 : padfTransform[2] = adfGeoTransform[2]; 56 0 : padfTransform[3] = adfGeoTransform[3]; 57 0 : padfTransform[4] = adfGeoTransform[4]; 58 0 : padfTransform[5] = adfGeoTransform[5]; 59 : 60 0 : return CE_None; 61 : } 62 : 63 : /******************************************************** 64 : * \brief Return spatial extent of tile 65 : ********************************************************/ 66 0 : void PostGISRasterTileDataset::GetExtent(double *pdfMinX, double *pdfMinY, 67 : double *pdfMaxX, double *pdfMaxY) const 68 : { 69 : // FIXME; incorrect in case of non 0 rotation terms 70 : 71 0 : double dfMinX = adfGeoTransform[GEOTRSFRM_TOPLEFT_X]; 72 0 : double dfMaxY = adfGeoTransform[GEOTRSFRM_TOPLEFT_Y]; 73 : 74 0 : double dfMaxX = adfGeoTransform[GEOTRSFRM_TOPLEFT_X] + 75 0 : nRasterXSize * adfGeoTransform[GEOTRSFRM_WE_RES] + 76 0 : nRasterYSize * adfGeoTransform[GEOTRSFRM_ROTATION_PARAM1]; 77 : 78 0 : double dfMinY = adfGeoTransform[GEOTRSFRM_TOPLEFT_Y] + 79 0 : nRasterXSize * adfGeoTransform[GEOTRSFRM_ROTATION_PARAM2] + 80 0 : nRasterYSize * adfGeoTransform[GEOTRSFRM_NS_RES]; 81 : 82 : // In case yres > 0 83 0 : if (dfMinY > dfMaxY) 84 : { 85 0 : double dfTemp = dfMinY; 86 0 : dfMinY = dfMaxY; 87 0 : dfMaxY = dfTemp; 88 : } 89 : 90 0 : *pdfMinX = dfMinX; 91 0 : *pdfMinY = dfMinY; 92 0 : *pdfMaxX = dfMaxX; 93 0 : *pdfMaxY = dfMaxY; 94 0 : }