Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GRIB Driver 4 : * Purpose: GDALDataset driver for GRIB translator for read support 5 : * Author: Bas Retsios, retsios@itc.nl 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2007, ITC 9 : * Copyright (c) 2008-2017, Even Rouault <even dot rouault at spatialys dot com> 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #include "gribdrivercore.h" 15 : 16 : /************************************************************************/ 17 : /* GRIBDriverIdentify() */ 18 : /************************************************************************/ 19 : 20 59911 : int GRIBDriverIdentify(GDALOpenInfo *poOpenInfo) 21 : 22 : { 23 59911 : if (poOpenInfo->nHeaderBytes < 8) 24 54657 : return FALSE; 25 : 26 5254 : const char *pasHeader = reinterpret_cast<char *>(poOpenInfo->pabyHeader); 27 : // Does a part of what ReadSECT0(), but in a thread-safe way. 28 5112180 : for (int i = 0; i < poOpenInfo->nHeaderBytes - 3; i++) 29 : { 30 5107420 : if (STARTS_WITH_CI(pasHeader + i, "GRIB") 31 : #ifdef ENABLE_TDLP 32 : || STARTS_WITH_CI(pasHeader + i, "TDLP") 33 : #endif 34 : ) 35 500 : return TRUE; 36 : } 37 : 38 4754 : return FALSE; 39 : } 40 : 41 : /************************************************************************/ 42 : /* GRIBDriverSetCommonMetadata() */ 43 : /************************************************************************/ 44 : 45 1607 : void GRIBDriverSetCommonMetadata(GDALDriver *poDriver) 46 : { 47 1607 : poDriver->SetDescription(DRIVER_NAME); 48 1607 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 49 1607 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIDIM_RASTER, "YES"); 50 1607 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 51 1607 : "GRIdded Binary (.grb, .grb2)"); 52 1607 : poDriver->SetMetadataItem(GDAL_DMD_OPENOPTIONLIST, 53 : "<OpenOptionList>" 54 : " <Option name='USE_IDX' type='boolean' " 55 : "description='Load metadata from " 56 : "wgrib2 index file if available' default='YES'/>" 57 1607 : "</OpenOptionList>"); 58 1607 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/grib.html"); 59 1607 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "grb grb2 grib2"); 60 1607 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 61 1607 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_SUBDATASETS, "YES"); 62 : 63 1607 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, 64 : "Byte UInt16 Int16 UInt32 Int32 Float32 " 65 1607 : "Float64"); 66 : 67 1607 : poDriver->pfnIdentify = GRIBDriverIdentify; 68 1607 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 69 1607 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 70 1607 : } 71 : 72 : /************************************************************************/ 73 : /* DeclareDeferredGRIBPlugin() */ 74 : /************************************************************************/ 75 : 76 : #ifdef PLUGIN_FILENAME 77 : void DeclareDeferredGRIBPlugin() 78 : { 79 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 80 : { 81 : return; 82 : } 83 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 84 : #ifdef PLUGIN_INSTALLATION_MESSAGE 85 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 86 : PLUGIN_INSTALLATION_MESSAGE); 87 : #endif 88 : GRIBDriverSetCommonMetadata(poDriver); 89 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 90 : } 91 : #endif