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 22048 : static GDALDataset *OGRTigerDriverOpen(GDALOpenInfo *poOpenInfo) 21 : 22 : { 23 22048 : if (!poOpenInfo->bStatOK) 24 20946 : return nullptr; 25 1102 : char **papszSiblingFiles = poOpenInfo->GetSiblingFiles(); 26 1102 : if (papszSiblingFiles != nullptr) 27 : { 28 604 : bool bFoundCompatibleFile = false; 29 20393 : for (int i = 0; papszSiblingFiles[i] != nullptr; i++) 30 : { 31 19801 : int nLen = (int)strlen(papszSiblingFiles[i]); 32 19801 : if (nLen > 4 && papszSiblingFiles[i][nLen - 4] == '.' && 33 14648 : papszSiblingFiles[i][nLen - 1] == '1') 34 : { 35 12 : bFoundCompatibleFile = true; 36 12 : break; 37 : } 38 : } 39 604 : if (!bFoundCompatibleFile) 40 592 : return nullptr; 41 : } 42 : 43 510 : OGRTigerDataSource *poDS = new OGRTigerDataSource; 44 : 45 510 : if (!poDS->Open(poOpenInfo->pszFilename, TRUE)) 46 : { 47 510 : delete poDS; 48 510 : poDS = nullptr; 49 : } 50 : 51 510 : 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 510 : return poDS; 60 : } 61 : 62 : /************************************************************************/ 63 : /* RegisterOGRTiger() */ 64 : /************************************************************************/ 65 : 66 1595 : void RegisterOGRTiger() 67 : 68 : { 69 1595 : if (GDALGetDriverByName("TIGER") != nullptr) 70 302 : return; 71 : 72 1293 : GDALDriver *poDriver = new GDALDriver(); 73 : 74 1293 : poDriver->SetDescription("TIGER"); 75 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 76 1293 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "U.S. Census TIGER/Line"); 77 1293 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/tiger.html"); 78 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 79 1293 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 80 : 81 1293 : poDriver->pfnOpen = OGRTigerDriverOpen; 82 : 83 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 84 : }