Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Interlis 1 Translator 4 : * Purpose: Implements OGRILI1Layer class. 5 : * Author: Pirmin Kalberer, Sourcepole AG 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "cpl_conv.h" 14 : #include "ogr_ili1.h" 15 : #include "ogrsf_frmts.h" 16 : 17 : /************************************************************************/ 18 : /* Open() */ 19 : /************************************************************************/ 20 : 21 27132 : static GDALDataset *OGRILI1DriverOpen(GDALOpenInfo *poOpenInfo) 22 : 23 : { 24 27132 : if (poOpenInfo->eAccess == GA_Update || 25 26329 : (!poOpenInfo->bStatOK && 26 22399 : strchr(poOpenInfo->pszFilename, ',') == nullptr)) 27 23138 : return nullptr; 28 : 29 3994 : if (poOpenInfo->pabyHeader != nullptr) 30 : { 31 3439 : if (strstr((const char *)poOpenInfo->pabyHeader, "SCNT") == nullptr) 32 : { 33 3439 : return nullptr; 34 : } 35 : } 36 555 : else if (poOpenInfo->bIsDirectory) 37 488 : return nullptr; 38 : 39 67 : OGRILI1DataSource *poDS = new OGRILI1DataSource(); 40 : 41 67 : if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions, 42 80 : TRUE) || 43 13 : poDS->GetLayerCount() == 0) 44 : { 45 54 : delete poDS; 46 54 : return nullptr; 47 : } 48 : 49 13 : return poDS; 50 : } 51 : 52 : /************************************************************************/ 53 : /* RegisterOGRILI1() */ 54 : /************************************************************************/ 55 : 56 1686 : void RegisterOGRILI1() 57 : { 58 1686 : if (GDALGetDriverByName("Interlis 1") != nullptr) 59 302 : return; 60 : 61 1384 : GDALDriver *poDriver = new GDALDriver(); 62 : 63 1384 : poDriver->SetDescription("Interlis 1"); 64 1384 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 65 1384 : poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES"); 66 1384 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 67 1384 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Interlis 1"); 68 1384 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/ili.html"); 69 1384 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "itf ili"); 70 1384 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 71 1384 : poDriver->SetMetadataItem( 72 : GDAL_DMD_OPENOPTIONLIST, 73 : "<OpenOptionList>" 74 : " <Option name='MODEL' type='string' description='Filename of the " 75 : "model in IlisMeta format (.imd)'/>" 76 1384 : "</OpenOptionList>"); 77 1384 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 78 : 79 1384 : poDriver->pfnOpen = OGRILI1DriverOpen; 80 : 81 1384 : GetGDALDriverManager()->RegisterDriver(poDriver); 82 : }