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 : * Last changes: $Id$ 9 : * 10 : *********************************************************************** 11 : * Copyright (c) 2013, Jorge Arevalo 12 : * Copyright (c) 2013, Even Rouault 13 : * 14 : * SPDX-License-Identifier: MIT 15 : ************************************************************************/ 16 : #include "postgisraster.h" 17 : 18 : /************************ 19 : * \brief Constructor 20 : ************************/ 21 0 : PostGISRasterTileDataset::PostGISRasterTileDataset( 22 0 : PostGISRasterDataset *poRDSIn, int nXSize, int nYSize) 23 0 : : poRDS(poRDSIn), pszPKID(nullptr) 24 : { 25 0 : nRasterXSize = nXSize; 26 0 : nRasterYSize = nYSize; 27 : 28 0 : adfGeoTransform[GEOTRSFRM_TOPLEFT_X] = 0; 29 0 : adfGeoTransform[GEOTRSFRM_WE_RES] = 1; 30 0 : adfGeoTransform[GEOTRSFRM_ROTATION_PARAM1] = 0; 31 0 : adfGeoTransform[GEOTRSFRM_TOPLEFT_Y] = 0; 32 0 : adfGeoTransform[GEOTRSFRM_ROTATION_PARAM2] = 0; 33 0 : adfGeoTransform[GEOTRSFRM_NS_RES] = 1; 34 0 : } 35 : 36 : /************************ 37 : * \brief Destructor 38 : ************************/ 39 0 : PostGISRasterTileDataset::~PostGISRasterTileDataset() 40 : { 41 0 : if (pszPKID) 42 : { 43 0 : CPLFree(pszPKID); 44 0 : pszPKID = nullptr; 45 : } 46 0 : } 47 : 48 : /******************************************************** 49 : * \brief Get the affine transformation coefficients 50 : ********************************************************/ 51 0 : CPLErr PostGISRasterTileDataset::GetGeoTransform(double *padfTransform) 52 : { 53 : // copy necessary values in supplied buffer 54 0 : padfTransform[0] = adfGeoTransform[0]; 55 0 : padfTransform[1] = adfGeoTransform[1]; 56 0 : padfTransform[2] = adfGeoTransform[2]; 57 0 : padfTransform[3] = adfGeoTransform[3]; 58 0 : padfTransform[4] = adfGeoTransform[4]; 59 0 : padfTransform[5] = adfGeoTransform[5]; 60 : 61 0 : return CE_None; 62 : } 63 : 64 : /******************************************************** 65 : * \brief Return spatial extent of tile 66 : ********************************************************/ 67 0 : void PostGISRasterTileDataset::GetExtent(double *pdfMinX, double *pdfMinY, 68 : double *pdfMaxX, double *pdfMaxY) const 69 : { 70 : // FIXME; incorrect in case of non 0 rotation terms 71 : 72 0 : double dfMinX = adfGeoTransform[GEOTRSFRM_TOPLEFT_X]; 73 0 : double dfMaxY = adfGeoTransform[GEOTRSFRM_TOPLEFT_Y]; 74 : 75 0 : double dfMaxX = adfGeoTransform[GEOTRSFRM_TOPLEFT_X] + 76 0 : nRasterXSize * adfGeoTransform[GEOTRSFRM_WE_RES] + 77 0 : nRasterYSize * adfGeoTransform[GEOTRSFRM_ROTATION_PARAM1]; 78 : 79 0 : double dfMinY = adfGeoTransform[GEOTRSFRM_TOPLEFT_Y] + 80 0 : nRasterXSize * adfGeoTransform[GEOTRSFRM_ROTATION_PARAM2] + 81 0 : nRasterYSize * adfGeoTransform[GEOTRSFRM_NS_RES]; 82 : 83 : // In case yres > 0 84 0 : if (dfMinY > dfMaxY) 85 : { 86 0 : double dfTemp = dfMinY; 87 0 : dfMinY = dfMaxY; 88 0 : dfMaxY = dfTemp; 89 : } 90 : 91 0 : *pdfMinX = dfMinX; 92 0 : *pdfMinY = dfMinY; 93 0 : *pdfMaxX = dfMaxX; 94 0 : *pdfMaxY = dfMaxY; 95 0 : }