Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: WAsP Translator 4 : * Purpose: Implements OGRWAsPDriver. 5 : * Author: Vincent Mora, vincent dot mora at oslandia dot com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2014, Oslandia <info at oslandia dot com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogrwasp.h" 14 : #include "cpl_conv.h" 15 : #include <cassert> 16 : 17 : /************************************************************************/ 18 : /* Open() */ 19 : /************************************************************************/ 20 : 21 25580 : static GDALDataset *OGRWAsPDriverOpen(GDALOpenInfo *poOpenInfo) 22 : 23 : { 24 25580 : if (poOpenInfo->eAccess == GA_Update) 25 : { 26 526 : return nullptr; 27 : } 28 : 29 25054 : if (!EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "map")) 30 : { 31 25009 : return nullptr; 32 : } 33 : 34 45 : VSILFILE *fh = VSIFOpenL(poOpenInfo->pszFilename, "r"); 35 45 : if (!fh) 36 : { 37 : /*CPLError( CE_Failure, CPLE_FileIO, "cannot open file %s", pszFilename 38 : * );*/ 39 36 : return nullptr; 40 : } 41 : auto pDataSource = 42 18 : std::make_unique<OGRWAsPDataSource>(poOpenInfo->pszFilename, fh); 43 : 44 9 : if (pDataSource->Load(true) != OGRERR_NONE) 45 : { 46 6 : return nullptr; 47 : } 48 3 : return pDataSource.release(); 49 : } 50 : 51 : /************************************************************************/ 52 : /* OGRWAsPDriverCreate() */ 53 : /************************************************************************/ 54 : 55 34 : static GDALDataset *OGRWAsPDriverCreate(const char *pszName, int, int, int, 56 : GDALDataType, char **) 57 : 58 : { 59 34 : VSILFILE *fh = VSIFOpenL(pszName, "w"); 60 34 : if (!fh) 61 : { 62 1 : CPLError(CE_Failure, CPLE_FileIO, "cannot open file %s", pszName); 63 1 : return nullptr; 64 : } 65 33 : return new OGRWAsPDataSource(pszName, fh); 66 : } 67 : 68 : /************************************************************************/ 69 : /* OGRWAsPDriverDelete() */ 70 : /************************************************************************/ 71 : 72 34 : static CPLErr OGRWAsPDriverDelete(const char *pszName) 73 : 74 : { 75 34 : return VSIUnlink(pszName) == 0 ? CE_None : CE_Failure; 76 : } 77 : 78 : /************************************************************************/ 79 : /* RegisterOGRWAsP() */ 80 : /************************************************************************/ 81 : 82 1595 : void RegisterOGRWAsP() 83 : 84 : { 85 1595 : if (GDALGetDriverByName("WAsP")) 86 302 : return; 87 : 88 1293 : auto poDriver = new GDALDriver(); 89 1293 : poDriver->SetDescription("WAsP"); 90 : 91 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 92 1293 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 93 1293 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES"); 94 1293 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 95 1293 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 96 : 97 1293 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "WAsP .map format"); 98 1293 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "map"); 99 1293 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/wasp.html"); 100 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 101 : 102 1293 : poDriver->pfnOpen = OGRWAsPDriverOpen; 103 1293 : poDriver->pfnCreate = OGRWAsPDriverCreate; 104 1293 : poDriver->pfnDelete = OGRWAsPDriverDelete; 105 : 106 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 107 : }