Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: TIGER/Line Translator 4 : * Purpose: Implements OGRTigerDriver 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 1999, Frank Warmerdam 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_tiger.h" 14 : #include "cpl_conv.h" 15 : 16 : /************************************************************************/ 17 : /* Open() */ 18 : /************************************************************************/ 19 : 20 33031 : static GDALDataset *OGRTigerDriverOpen(GDALOpenInfo *poOpenInfo) 21 : 22 : { 23 33031 : if (!poOpenInfo->bStatOK) 24 30776 : return nullptr; 25 2255 : char **papszSiblingFiles = poOpenInfo->GetSiblingFiles(); 26 2255 : if (papszSiblingFiles != nullptr) 27 : { 28 1510 : bool bFoundCompatibleFile = false; 29 44290 : for (int i = 0; papszSiblingFiles[i] != nullptr; i++) 30 : { 31 42793 : int nLen = (int)strlen(papszSiblingFiles[i]); 32 42793 : if (nLen > 4 && papszSiblingFiles[i][nLen - 4] == '.' && 33 25161 : papszSiblingFiles[i][nLen - 1] == '1') 34 : { 35 13 : bFoundCompatibleFile = true; 36 13 : break; 37 : } 38 : } 39 1510 : if (!bFoundCompatibleFile) 40 1497 : return nullptr; 41 : } 42 : 43 758 : OGRTigerDataSource *poDS = new OGRTigerDataSource; 44 : 45 758 : if (!poDS->Open(poOpenInfo->pszFilename, TRUE)) 46 : { 47 758 : delete poDS; 48 758 : poDS = nullptr; 49 : } 50 : 51 758 : if (poDS != nullptr && poOpenInfo->eAccess == GA_Update) 52 : { 53 0 : CPLError(CE_Failure, CPLE_OpenFailed, 54 : "Tiger Driver doesn't support update."); 55 0 : delete poDS; 56 0 : poDS = nullptr; 57 : } 58 : 59 758 : return poDS; 60 : } 61 : 62 : /************************************************************************/ 63 : /* RegisterOGRTiger() */ 64 : /************************************************************************/ 65 : 66 2138 : void RegisterOGRTiger() 67 : 68 : { 69 2138 : if (GDALGetDriverByName("TIGER") != nullptr) 70 263 : return; 71 : 72 1875 : GDALDriver *poDriver = new GDALDriver(); 73 : 74 1875 : poDriver->SetDescription("TIGER"); 75 1875 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 76 1875 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "U.S. Census TIGER/Line"); 77 1875 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/tiger.html"); 78 1875 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 79 1875 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 80 : 81 1875 : poDriver->pfnOpen = OGRTigerDriverOpen; 82 : 83 1875 : GetGDALDriverManager()->RegisterDriver(poDriver); 84 : }