Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: EDIGEO Translator 4 : * Purpose: Implements OGREDIGEODriver. 5 : * Author: Even Rouault, even dot rouault at spatialys.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2011, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_edigeo.h" 14 : #include "cpl_conv.h" 15 : 16 : extern "C" void RegisterOGREDIGEO(); 17 : 18 : // g++ -fPIC -g -Wall ogr/ogrsf_frmts/edigeo/*.cpp -shared -o ogr_EDIGEO.so 19 : // -Iport -Igcore -Iogr -Iogr/ogrsf_frmts -Iogr/ogrsf_frmts/generic 20 : // -Iogr/ogrsf_frmts/edigeo -L. -lgdal 21 : 22 : /************************************************************************/ 23 : /* OGREDIGEODriverIdentify() */ 24 : /************************************************************************/ 25 : 26 45224 : static int OGREDIGEODriverIdentify(GDALOpenInfo *poOpenInfo) 27 : 28 : { 29 47769 : return poOpenInfo->fpL != nullptr && 30 47769 : EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "thf"); 31 : } 32 : 33 : /************************************************************************/ 34 : /* Open() */ 35 : /************************************************************************/ 36 : 37 0 : static GDALDataset *OGREDIGEODriverOpen(GDALOpenInfo *poOpenInfo) 38 : 39 : { 40 0 : if (poOpenInfo->eAccess == GA_Update || 41 0 : !OGREDIGEODriverIdentify(poOpenInfo)) 42 0 : return nullptr; 43 : 44 0 : OGREDIGEODataSource *poDS = new OGREDIGEODataSource(); 45 : 46 0 : if (!poDS->Open(poOpenInfo->pszFilename)) 47 : { 48 0 : delete poDS; 49 0 : poDS = nullptr; 50 : } 51 : 52 0 : return poDS; 53 : } 54 : 55 : /************************************************************************/ 56 : /* RegisterOGREDIGEO() */ 57 : /************************************************************************/ 58 : 59 1595 : void RegisterOGREDIGEO() 60 : 61 : { 62 1595 : if (GDALGetDriverByName("EDIGEO") != nullptr) 63 302 : return; 64 : 65 1293 : GDALDriver *poDriver = new GDALDriver(); 66 : 67 1293 : poDriver->SetDescription("EDIGEO"); 68 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 69 1293 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 70 1293 : "French EDIGEO exchange format"); 71 1293 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "thf"); 72 1293 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/edigeo.html"); 73 : 74 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 75 1293 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES, "YES"); 76 1293 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES_READ, "YES"); 77 1293 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 78 1293 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 79 : 80 1293 : poDriver->pfnOpen = OGREDIGEODriverOpen; 81 1293 : poDriver->pfnIdentify = OGREDIGEODriverIdentify; 82 : 83 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 84 : }