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 "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "ogrsf_frmts.h" 17 : 18 : #include "ogrcartodrivercore.h" 19 : 20 : /************************************************************************/ 21 : /* OGRCartoDriverIdentify() */ 22 : /************************************************************************/ 23 : 24 52935 : int OGRCartoDriverIdentify(GDALOpenInfo *poOpenInfo) 25 : 26 : { 27 105800 : return STARTS_WITH_CI(poOpenInfo->pszFilename, "CARTO:") || 28 105800 : STARTS_WITH_CI(poOpenInfo->pszFilename, "CARTODB:"); 29 : } 30 : 31 : /************************************************************************/ 32 : /* OGRCartoDriverSetCommonMetadata() */ 33 : /************************************************************************/ 34 : 35 1750 : void OGRCartoDriverSetCommonMetadata(GDALDriver *poDriver) 36 : { 37 1750 : poDriver->SetDescription(DRIVER_NAME); 38 1750 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Carto"); 39 1750 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 40 1750 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 41 1750 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_LAYER, "YES"); 42 1750 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES"); 43 1750 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_FIELD, "YES"); 44 1750 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/carto.html"); 45 1750 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, 46 1750 : "NATIVE OGRSQL SQLITE"); 47 : 48 1750 : poDriver->SetMetadataItem(GDAL_DMD_CONNECTION_PREFIX, "CARTO:"); 49 : 50 1750 : poDriver->SetMetadataItem( 51 : GDAL_DMD_OPENOPTIONLIST, 52 : "<OpenOptionList>" 53 : " <Option name='API_KEY' type='string' description='Account API key'/>" 54 : " <Option name='ACCOUNT' type='string' description='Account name' " 55 : "required='true'/>" 56 : " <Option name='BATCH_INSERT' type='boolean' description='Whether to " 57 : "group features to be inserted in a batch' default='YES'/>" 58 : " <Option name='COPY_MODE' type='boolean' description='Whether to use " 59 : "the COPY API for faster uploads' default='YES'/>" 60 1750 : "</OpenOptionList>"); 61 : 62 1750 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONOPTIONLIST, 63 1750 : "<CreationOptionList/>"); 64 : 65 1750 : poDriver->SetMetadataItem( 66 : GDAL_DS_LAYER_CREATIONOPTIONLIST, 67 : "<LayerCreationOptionList>" 68 : " <Option name='OVERWRITE' type='boolean' description='Whether to " 69 : "overwrite an existing table with the layer name to be created' " 70 : "default='NO'/>" 71 : " <Option name='LAUNDER' type='boolean' description='Whether layer " 72 : "and field names will be laundered' default='YES'/>" 73 : " <Option name='GEOMETRY_NULLABLE' type='boolean' " 74 : "description='Whether the values of the geometry column can be NULL' " 75 : "default='YES'/>" 76 : " <Option name='CARTODBFY' alias='CARTODBIFY' type='boolean' " 77 : "description='Whether the created layer should be " 78 : "\"Cartodbifi'ed\" (i.e. registered in dashboard)' default='YES'/>" 79 1750 : "</LayerCreationOptionList>"); 80 : 81 1750 : poDriver->SetMetadataItem( 82 : GDAL_DMD_CREATIONFIELDDATATYPES, 83 1750 : "Integer Integer64 Real String Date DateTime Time"); 84 1750 : poDriver->SetMetadataItem(GDAL_DCAP_NOTNULL_FIELDS, "YES"); 85 1750 : poDriver->SetMetadataItem(GDAL_DCAP_DEFAULT_FIELDS, "YES"); 86 1750 : poDriver->SetMetadataItem(GDAL_DCAP_NOTNULL_GEOMFIELDS, "YES"); 87 : 88 1750 : poDriver->pfnIdentify = OGRCartoDriverIdentify; 89 1750 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 90 1750 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 91 1750 : } 92 : 93 : /************************************************************************/ 94 : /* DeclareDeferredOGRCartoPlugin() */ 95 : /************************************************************************/ 96 : 97 : #ifdef PLUGIN_FILENAME 98 : void DeclareDeferredOGRCartoPlugin() 99 : { 100 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 101 : { 102 : return; 103 : } 104 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 105 : #ifdef PLUGIN_INSTALLATION_MESSAGE 106 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 107 : PLUGIN_INSTALLATION_MESSAGE); 108 : #endif 109 : OGRCartoDriverSetCommonMetadata(poDriver); 110 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 111 : } 112 : #endif