Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: FITS Driver 4 : * Purpose: Implement FITS raster read/write support 5 : * Author: Simon Perkins, s.perkins@lanl.gov 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2001, Simon Perkins 9 : * Copyright (c) 2008-2020, Even Rouault <even dot rouault at spatialys.com> 10 : * Copyright (c) 2018, Chiara Marmo <chiara dot marmo at u-psud dot fr> 11 : * 12 : * SPDX-License-Identifier: MIT 13 : ****************************************************************************/ 14 : 15 : #include "gdal_frmts.h" 16 : #include "gdalplugindriverproxy.h" 17 : 18 : #include "fitsdrivercore.h" 19 : 20 : /************************************************************************/ 21 : /* FITSDriverIdentify() */ 22 : /************************************************************************/ 23 : 24 73864 : int FITSDriverIdentify(GDALOpenInfo *poOpenInfo) 25 : 26 : { 27 73864 : if (STARTS_WITH(poOpenInfo->pszFilename, "FITS:")) 28 18 : return true; 29 : 30 73846 : const char *fitsID = "SIMPLE = T"; // Spaces important! 31 73846 : const size_t fitsIDLen = strlen(fitsID); // Should be 30 chars long 32 : 33 73846 : if (static_cast<size_t>(poOpenInfo->nHeaderBytes) < fitsIDLen) 34 59157 : return false; 35 14689 : if (memcmp(poOpenInfo->pabyHeader, fitsID, fitsIDLen) != 0) 36 14577 : return false; 37 112 : return true; 38 : } 39 : 40 : /************************************************************************/ 41 : /* FITSDriverSetCommonMetadata() */ 42 : /************************************************************************/ 43 : 44 1767 : void FITSDriverSetCommonMetadata(GDALDriver *poDriver) 45 : { 46 1767 : poDriver->SetDescription(DRIVER_NAME); 47 1767 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 48 1767 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 49 1767 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 50 1767 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES"); 51 1767 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 52 1767 : "Flexible Image Transport System"); 53 1767 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/fits.html"); 54 1767 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, 55 1767 : "Byte UInt16 Int16 UInt32 Int32 Float32 Float64"); 56 1767 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "fits"); 57 : 58 1767 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONFIELDDATATYPES, 59 : "Integer Integer64 Real String IntegerList " 60 1767 : "Integer64List RealList"); 61 1767 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONFIELDDATASUBTYPES, 62 1767 : "Boolean Int16 Float32"); 63 : 64 1767 : poDriver->SetMetadataItem( 65 : GDAL_DS_LAYER_CREATIONOPTIONLIST, 66 : "<LayerCreationOptionList>" 67 : " <Option name='REPEAT_*' type='int' description='Repeat value for " 68 : "fields of type List'/>" 69 : " <Option name='COMPUTE_REPEAT' type='string-select' " 70 : "description='Determine when the repeat value for fields is computed'>" 71 : " <Value>AT_FIELD_CREATION</Value>" 72 : " <Value>AT_FIRST_FEATURE_CREATION</Value>" 73 : " </Option>" 74 1767 : "</LayerCreationOptionList>"); 75 : 76 1767 : poDriver->pfnIdentify = FITSDriverIdentify; 77 1767 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 78 1767 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 79 1767 : } 80 : 81 : /************************************************************************/ 82 : /* DeclareDeferredFITSPlugin() */ 83 : /************************************************************************/ 84 : 85 : #ifdef PLUGIN_FILENAME 86 2038 : void DeclareDeferredFITSPlugin() 87 : { 88 2038 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 89 : { 90 283 : return; 91 : } 92 1755 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 93 : #ifdef PLUGIN_INSTALLATION_MESSAGE 94 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 95 : PLUGIN_INSTALLATION_MESSAGE); 96 : #endif 97 1755 : FITSDriverSetCommonMetadata(poDriver); 98 1755 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 99 : } 100 : #endif