Line data Source code
1 : /****************************************************************************** 2 : * Project: OGR 3 : * Purpose: OGRGMLASDriver implementation 4 : * Author: Even Rouault, <even dot rouault at spatialys dot com> 5 : * 6 : * Initial development funded by the European Earth observation programme 7 : * Copernicus 8 : * 9 : ****************************************************************************** 10 : * Copyright (c) 2016, Even Rouault, <even dot rouault at spatialys dot com> 11 : * 12 : * Permission is hereby granted, free of charge, to any person obtaining a 13 : * copy of this software and associated documentation files (the "Software"), 14 : * to deal in the Software without restriction, including without limitation 15 : * the rights to use, copy, modify, merge, publish, distribute, sublicense, 16 : * and/or sell copies of the Software, and to permit persons to whom the 17 : * Software is furnished to do so, subject to the following conditions: 18 : * 19 : * The above copyright notice and this permission notice shall be included 20 : * in all copies or substantial portions of the Software. 21 : * 22 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 23 : * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 25 : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 : * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 : * DEALINGS IN THE SOFTWARE. 29 : ****************************************************************************/ 30 : 31 : #include "ogr_gmlas.h" 32 : 33 : /************************************************************************/ 34 : /* GetTypeFromString() */ 35 : /************************************************************************/ 36 : 37 195559 : GMLASFieldType GMLASField::GetTypeFromString(const CPLString &osType) 38 : { 39 405277 : if (osType == szXS_STRING || osType == szXS_TOKEN || 40 204814 : osType == szXS_NMTOKEN || osType == szXS_NCNAME || 41 405250 : osType == szXS_QNAME || osType == szXS_IDREF) 42 : { 43 : // token has special processing by XML processor: all leading/trailing 44 : // white space is removed 45 127332 : return GMLAS_FT_STRING; 46 : } 47 68227 : else if (osType == szXS_ID) 48 6826 : return GMLAS_FT_ID; 49 61401 : else if (osType == szXS_BOOLEAN) 50 973 : return GMLAS_FT_BOOLEAN; 51 60428 : else if (osType == szXS_SHORT) 52 50 : return GMLAS_FT_SHORT; 53 60378 : else if (osType == szXS_INT) 54 801 : return GMLAS_FT_INT32; 55 177479 : else if (osType == szXS_BYTE || osType == szXS_INTEGER || 56 116750 : osType == szXS_NEGATIVE_INTEGER || 57 116668 : osType == szXS_NON_NEGATIVE_INTEGER || 58 116586 : osType == szXS_NON_POSITIVE_INTEGER || 59 174773 : osType == szXS_POSITIVE_INTEGER || osType == szXS_UNSIGNED_BYTE || 60 177344 : osType == szXS_UNSIGNED_SHORT || 61 58240 : osType == szXS_UNSIGNED_INT) // FIXME ? 62 1337 : return GMLAS_FT_INT32; 63 58240 : else if (osType == szXS_LONG || osType == szXS_UNSIGNED_LONG) 64 22297 : return GMLAS_FT_INT64; 65 35943 : else if (osType == szXS_FLOAT) 66 100 : return GMLAS_FT_FLOAT; 67 35843 : else if (osType == szXS_DOUBLE) 68 29662 : return GMLAS_FT_DOUBLE; 69 6181 : else if (osType == szXS_DECIMAL) 70 55 : return GMLAS_FT_DECIMAL; 71 6126 : else if (osType == szXS_DATE) 72 56 : return GMLAS_FT_DATE; 73 6070 : else if (osType == szXS_GYEAR) 74 0 : return GMLAS_FT_GYEAR; 75 6070 : else if (osType == szXS_GYEAR_MONTH) 76 0 : return GMLAS_FT_GYEAR_MONTH; 77 6070 : else if (osType == szXS_TIME) 78 50 : return GMLAS_FT_TIME; 79 6020 : else if (osType == szXS_DATETIME) 80 422 : return GMLAS_FT_DATETIME; 81 5598 : else if (osType == szXS_ANY_URI) 82 2375 : return GMLAS_FT_ANYURI; 83 3223 : else if (osType == szXS_ANY_TYPE) 84 16 : return GMLAS_FT_ANYTYPE; 85 3207 : else if (osType == szXS_ANY_SIMPLE_TYPE) 86 3105 : return GMLAS_FT_ANYSIMPLETYPE; 87 102 : else if (osType == szXS_DURATION) 88 2 : return GMLAS_FT_STRING; 89 100 : else if (osType == szXS_BASE64BINARY) 90 50 : return GMLAS_FT_BASE64BINARY; 91 50 : else if (osType == szXS_HEXBINARY) 92 50 : return GMLAS_FT_HEXBINARY; 93 : else 94 : { 95 0 : CPLError(CE_Warning, CPLE_AppDefined, "Unhandled type: %s", 96 : osType.c_str()); 97 0 : return GMLAS_FT_STRING; 98 : } 99 : } 100 : 101 : /************************************************************************/ 102 : /* SetType() */ 103 : /************************************************************************/ 104 : 105 204615 : void GMLASField::SetType(GMLASFieldType eType, const char *pszTypeName) 106 : { 107 204615 : m_eType = eType; 108 204615 : m_osTypeName = pszTypeName; 109 204615 : } 110 : 111 : /************************************************************************/ 112 : /* SetName() */ 113 : /************************************************************************/ 114 : 115 57778 : void GMLASFeatureClass::SetName(const CPLString &osName) 116 : { 117 57778 : m_osName = osName; 118 57778 : } 119 : 120 : /************************************************************************/ 121 : /* SetXPath() */ 122 : /************************************************************************/ 123 : 124 41429 : void GMLASFeatureClass::SetXPath(const CPLString &osXPath) 125 : { 126 41429 : m_osXPath = osXPath; 127 41429 : } 128 : 129 : /************************************************************************/ 130 : /* AddField() */ 131 : /************************************************************************/ 132 : 133 313617 : void GMLASFeatureClass::AddField(const GMLASField &oField) 134 : { 135 313617 : m_aoFields.push_back(oField); 136 313617 : } 137 : 138 : /************************************************************************/ 139 : /* PrependFields() */ 140 : /************************************************************************/ 141 : 142 3913 : void GMLASFeatureClass::PrependFields(const std::vector<GMLASField> &aoFields) 143 : { 144 3913 : m_aoFields.insert(m_aoFields.begin(), aoFields.begin(), aoFields.end()); 145 3913 : } 146 : 147 : /************************************************************************/ 148 : /* AppendFields() */ 149 : /************************************************************************/ 150 : 151 40163 : void GMLASFeatureClass::AppendFields(const std::vector<GMLASField> &aoFields) 152 : { 153 40163 : m_aoFields.insert(m_aoFields.end(), aoFields.begin(), aoFields.end()); 154 40163 : } 155 : 156 : /************************************************************************/ 157 : /* AddNestedClass() */ 158 : /************************************************************************/ 159 : 160 7541 : void GMLASFeatureClass::AddNestedClass(const GMLASFeatureClass &oNestedClass) 161 : { 162 7541 : m_aoNestedClasses.push_back(oNestedClass); 163 7541 : }