Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Carto Translator 4 : * Purpose: Implements OGRCARTODriver. 5 : * Author: Even Rouault, even dot rouault at spatialys.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2013, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_carto.h" 14 : #include "ogrcartodrivercore.h" 15 : 16 : // g++ -g -Wall -fPIC -shared -o ogr_CARTO.so -Iport -Igcore -Iogr 17 : // -Iogr/ogrsf_frmts -Iogr/ogrsf_frmts/carto ogr/ogrsf_frmts/carto/*.c* -L. 18 : // -lgdal -Iogr/ogrsf_frmts/geojson/libjson 19 : 20 : extern "C" void RegisterOGRCarto(); 21 : 22 : /************************************************************************/ 23 : /* OGRCartoDriverOpen() */ 24 : /************************************************************************/ 25 : 26 35 : static GDALDataset *OGRCartoDriverOpen(GDALOpenInfo *poOpenInfo) 27 : 28 : { 29 35 : if (!OGRCartoDriverIdentify(poOpenInfo)) 30 0 : return nullptr; 31 : 32 35 : OGRCARTODataSource *poDS = new OGRCARTODataSource(); 33 : 34 35 : if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions, 35 35 : poOpenInfo->eAccess == GA_Update)) 36 : { 37 17 : delete poDS; 38 17 : poDS = nullptr; 39 : } 40 : 41 35 : return poDS; 42 : } 43 : 44 : /************************************************************************/ 45 : /* OGRCartoDriverCreate() */ 46 : /************************************************************************/ 47 : 48 0 : static GDALDataset *OGRCartoDriverCreate(const char *pszName, 49 : CPL_UNUSED int nBands, 50 : CPL_UNUSED int nXSize, 51 : CPL_UNUSED int nYSize, 52 : CPL_UNUSED GDALDataType eDT, 53 : CPL_UNUSED char **papszOptions) 54 : 55 : { 56 0 : OGRCARTODataSource *poDS = new OGRCARTODataSource(); 57 : 58 0 : if (!poDS->Open(pszName, nullptr, TRUE)) 59 : { 60 0 : delete poDS; 61 0 : CPLError(CE_Failure, CPLE_AppDefined, 62 : "Carto driver doesn't support database creation."); 63 0 : return nullptr; 64 : } 65 : 66 0 : return poDS; 67 : } 68 : 69 : /************************************************************************/ 70 : /* RegisterOGRCARTO() */ 71 : /************************************************************************/ 72 : 73 1595 : void RegisterOGRCarto() 74 : 75 : { 76 1595 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 77 302 : return; 78 : 79 1293 : GDALDriver *poDriver = new GDALDriver(); 80 1293 : OGRCartoDriverSetCommonMetadata(poDriver); 81 1293 : poDriver->pfnOpen = OGRCartoDriverOpen; 82 1293 : poDriver->pfnCreate = OGRCartoDriverCreate; 83 : 84 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 85 : }