Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: WCS Client Driver 4 : * Purpose: Implementation of Dataset and RasterBand classes for WCS. 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2006, Frank Warmerdam 9 : * Copyright (c) 2008-2013, Even Rouault <even dot rouault at spatialys.com> 10 : * 11 : * Permission is hereby granted, free of charge, to any person obtaining a 12 : * copy of this software and associated documentation files (the "Software"), 13 : * to deal in the Software without restriction, including without limitation 14 : * the rights to use, copy, modify, merge, publish, distribute, sublicense, 15 : * and/or sell copies of the Software, and to permit persons to whom the 16 : * Software is furnished to do so, subject to the following conditions: 17 : * 18 : * The above copyright notice and this permission notice shall be included 19 : * in all copies or substantial portions of the Software. 20 : * 21 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22 : * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 : * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 27 : * DEALINGS IN THE SOFTWARE. 28 : ****************************************************************************/ 29 : 30 : #include "wcsdrivercore.h" 31 : 32 : /************************************************************************/ 33 : /* WCSDriverIdentify() */ 34 : /************************************************************************/ 35 : 36 50747 : int WCSDriverIdentify(GDALOpenInfo *poOpenInfo) 37 : 38 : { 39 : /* -------------------------------------------------------------------- */ 40 : /* Filename is WCS:URL */ 41 : /* */ 42 : /* -------------------------------------------------------------------- */ 43 50747 : if (poOpenInfo->nHeaderBytes == 0 && 44 46234 : STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, "WCS:")) 45 192 : return TRUE; 46 : 47 : /* -------------------------------------------------------------------- */ 48 : /* Is this a WCS_GDAL service description file or "in url" */ 49 : /* equivalent? */ 50 : /* -------------------------------------------------------------------- */ 51 50555 : if (poOpenInfo->nHeaderBytes == 0 && 52 46043 : STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, "<WCS_GDAL>")) 53 0 : return TRUE; 54 : 55 50555 : else if (poOpenInfo->nHeaderBytes >= 10 && 56 4355 : STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "<WCS_GDAL>")) 57 2 : return TRUE; 58 : 59 : /* -------------------------------------------------------------------- */ 60 : /* Is this apparently a WCS subdataset reference? */ 61 : /* -------------------------------------------------------------------- */ 62 50553 : else if (STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, 63 0 : "WCS_SDS:") && 64 0 : poOpenInfo->nHeaderBytes == 0) 65 0 : return TRUE; 66 : 67 : else 68 50553 : return FALSE; 69 : } 70 : 71 : /************************************************************************/ 72 : /* WCSDriverSetCommonMetadata() */ 73 : /************************************************************************/ 74 : 75 1219 : void WCSDriverSetCommonMetadata(GDALDriver *poDriver) 76 : { 77 1219 : poDriver->SetDescription(DRIVER_NAME); 78 1219 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 79 1219 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "OGC Web Coverage Service"); 80 1219 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/wcs.html"); 81 1219 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 82 1219 : poDriver->SetMetadataItem(GDAL_DMD_SUBDATASETS, "YES"); 83 : 84 1219 : poDriver->pfnIdentify = WCSDriverIdentify; 85 1219 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 86 1219 : } 87 : 88 : /************************************************************************/ 89 : /* DeclareDeferredWCSPlugin() */ 90 : /************************************************************************/ 91 : 92 : #ifdef PLUGIN_FILENAME 93 : void DeclareDeferredWCSPlugin() 94 : { 95 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 96 : { 97 : return; 98 : } 99 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 100 : #ifdef PLUGIN_INSTALLATION_MESSAGE 101 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 102 : PLUGIN_INSTALLATION_MESSAGE); 103 : #endif 104 : WCSDriverSetCommonMetadata(poDriver); 105 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 106 : } 107 : #endif