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