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 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #include "wcsdrivercore.h" 15 : #include "gdal_frmts.h" 16 : #include "gdalplugindriverproxy.h" 17 : 18 : /************************************************************************/ 19 : /* WCSDriverIdentify() */ 20 : /************************************************************************/ 21 : 22 60781 : int WCSDriverIdentify(GDALOpenInfo *poOpenInfo) 23 : 24 : { 25 : /* -------------------------------------------------------------------- */ 26 : /* Filename is WCS:URL */ 27 : /* */ 28 : /* -------------------------------------------------------------------- */ 29 60781 : if (poOpenInfo->nHeaderBytes == 0 && 30 55992 : STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, "WCS:")) 31 192 : return TRUE; 32 : 33 : /* -------------------------------------------------------------------- */ 34 : /* Is this a WCS_GDAL service description file or "in url" */ 35 : /* equivalent? */ 36 : /* -------------------------------------------------------------------- */ 37 60589 : if (poOpenInfo->nHeaderBytes == 0 && 38 55799 : STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, "<WCS_GDAL>")) 39 0 : return TRUE; 40 : 41 60589 : else if (poOpenInfo->nHeaderBytes >= 10 && 42 4647 : STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "<WCS_GDAL>")) 43 2 : return TRUE; 44 : 45 : /* -------------------------------------------------------------------- */ 46 : /* Is this apparently a WCS subdataset reference? */ 47 : /* -------------------------------------------------------------------- */ 48 60587 : else if (STARTS_WITH_CI((const char *)poOpenInfo->pszFilename, 49 0 : "WCS_SDS:") && 50 0 : poOpenInfo->nHeaderBytes == 0) 51 0 : return TRUE; 52 : 53 : else 54 60587 : return FALSE; 55 : } 56 : 57 : /************************************************************************/ 58 : /* WCSDriverSetCommonMetadata() */ 59 : /************************************************************************/ 60 : 61 1755 : void WCSDriverSetCommonMetadata(GDALDriver *poDriver) 62 : { 63 1755 : poDriver->SetDescription(DRIVER_NAME); 64 1755 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 65 1755 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "OGC Web Coverage Service"); 66 1755 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/wcs.html"); 67 1755 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 68 1755 : poDriver->SetMetadataItem(GDAL_DMD_SUBDATASETS, "YES"); 69 : 70 1755 : poDriver->pfnIdentify = WCSDriverIdentify; 71 1755 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 72 1755 : } 73 : 74 : /************************************************************************/ 75 : /* DeclareDeferredWCSPlugin() */ 76 : /************************************************************************/ 77 : 78 : #ifdef PLUGIN_FILENAME 79 : void DeclareDeferredWCSPlugin() 80 : { 81 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 82 : { 83 : return; 84 : } 85 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 86 : #ifdef PLUGIN_INSTALLATION_MESSAGE 87 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 88 : PLUGIN_INSTALLATION_MESSAGE); 89 : #endif 90 : WCSDriverSetCommonMetadata(poDriver); 91 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 92 : } 93 : #endif