Line data Source code
1 : /*********************************************************************** 2 : * File : postgisrastertools.cpp 3 : * Project: PostGIS Raster driver 4 : * Purpose: Tools for PostGIS Raster driver 5 : * Author: Jorge Arevalo, jorge.arevalo@deimos-space.com 6 : * jorgearevalo@libregis.org 7 : * 8 : * Author: David Zwarg, dzwarg@azavea.com 9 : * 10 : * 11 : *********************************************************************** 12 : * Copyright (c) 2009 - 2013, Jorge Arevalo, David Zwarg 13 : * 14 : * SPDX-License-Identifier: MIT 15 : **********************************************************************/ 16 : #include "postgisraster.h" 17 : 18 : /********************************************************************** 19 : * \brief Replace the quotes by single quotes in the input string 20 : * 21 : * Needed in the 'where' part of the input string 22 : **********************************************************************/ 23 0 : char *ReplaceQuotes(const char *pszInput, int nLength) 24 : { 25 : int i; 26 0 : char *pszOutput = nullptr; 27 : 28 0 : if (nLength == -1) 29 0 : nLength = static_cast<int>(strlen(pszInput)); 30 : 31 0 : pszOutput = static_cast<char *>(CPLCalloc(nLength + 1, sizeof(char))); 32 : 33 0 : for (i = 0; i < nLength; i++) 34 : { 35 0 : if (pszInput[i] == '"') 36 0 : pszOutput[i] = '\''; 37 : else 38 0 : pszOutput[i] = pszInput[i]; 39 : } 40 : 41 0 : return pszOutput; 42 : } 43 : 44 : /*********************************************************************** 45 : * \brief Translate a PostGIS Raster datatype string in a valid 46 : * GDALDataType object. 47 : **********************************************************************/ 48 0 : GBool TranslateDataType(const char *pszDataType, 49 : GDALDataType *poDataType = nullptr, 50 : int *pnBitsDepth = nullptr) 51 : { 52 0 : if (!pszDataType) 53 0 : return false; 54 : 55 0 : if (EQUAL(pszDataType, "1BB")) 56 : { 57 0 : if (pnBitsDepth) 58 0 : *pnBitsDepth = 1; 59 0 : if (poDataType) 60 0 : *poDataType = GDT_Byte; 61 : } 62 : 63 0 : else if (EQUAL(pszDataType, "2BUI")) 64 : { 65 0 : if (pnBitsDepth) 66 0 : *pnBitsDepth = 2; 67 0 : if (poDataType) 68 0 : *poDataType = GDT_Byte; 69 : } 70 : 71 0 : else if (EQUAL(pszDataType, "4BUI")) 72 : { 73 0 : if (pnBitsDepth) 74 0 : *pnBitsDepth = 4; 75 0 : if (poDataType) 76 0 : *poDataType = GDT_Byte; 77 : } 78 : 79 0 : else if (EQUAL(pszDataType, "8BUI")) 80 : { 81 0 : if (pnBitsDepth) 82 0 : *pnBitsDepth = 8; 83 0 : if (poDataType) 84 0 : *poDataType = GDT_Byte; 85 : } 86 : 87 0 : else if (EQUAL(pszDataType, "8BSI")) 88 : { 89 0 : if (pnBitsDepth) 90 0 : *pnBitsDepth = 8; 91 0 : if (poDataType) 92 0 : *poDataType = GDT_Int8; 93 : } 94 0 : else if (EQUAL(pszDataType, "16BSI")) 95 : { 96 0 : if (pnBitsDepth) 97 0 : *pnBitsDepth = 16; 98 0 : if (poDataType) 99 0 : *poDataType = GDT_Int16; 100 : } 101 : 102 0 : else if (EQUAL(pszDataType, "16BUI")) 103 : { 104 0 : if (pnBitsDepth) 105 0 : *pnBitsDepth = 16; 106 0 : if (poDataType) 107 0 : *poDataType = GDT_UInt16; 108 : } 109 : 110 0 : else if (EQUAL(pszDataType, "32BSI")) 111 : { 112 0 : if (pnBitsDepth) 113 0 : *pnBitsDepth = 32; 114 0 : if (poDataType) 115 0 : *poDataType = GDT_Int32; 116 : } 117 : 118 0 : else if (EQUAL(pszDataType, "32BUI")) 119 : { 120 0 : if (pnBitsDepth) 121 0 : *pnBitsDepth = 32; 122 0 : if (poDataType) 123 0 : *poDataType = GDT_UInt32; 124 : } 125 : 126 0 : else if (EQUAL(pszDataType, "32BF")) 127 : { 128 0 : if (pnBitsDepth) 129 0 : *pnBitsDepth = 32; 130 0 : if (poDataType) 131 0 : *poDataType = GDT_Float32; 132 : } 133 : 134 0 : else if (EQUAL(pszDataType, "64BF")) 135 : { 136 0 : if (pnBitsDepth) 137 0 : *pnBitsDepth = 64; 138 0 : if (poDataType) 139 0 : *poDataType = GDT_Float64; 140 : } 141 : 142 : else 143 : { 144 0 : if (pnBitsDepth) 145 0 : *pnBitsDepth = -1; 146 0 : if (poDataType) 147 0 : *poDataType = GDT_Unknown; 148 : 149 0 : return false; 150 : } 151 : 152 0 : return true; 153 : }