Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: ESRIJSON driver 5 : * Author: Even Rouault, <even.rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2017, Even Rouault, <even.rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "cpl_port.h" 14 : #include "ogr_geojson.h" 15 : 16 : #include <stdlib.h> 17 : #include <string.h> 18 : 19 : #include "cpl_conv.h" 20 : #include "cpl_error.h" 21 : #include "gdal.h" 22 : #include "gdal_priv.h" 23 : #include "ogrgeojsonutils.h" 24 : #include "ogrsf_frmts.h" 25 : 26 : /************************************************************************/ 27 : /* OGRESRIJSONDriverIdentify() */ 28 : /************************************************************************/ 29 : 30 47375 : static int OGRESRIJSONDriverIdentify(GDALOpenInfo *poOpenInfo) 31 : { 32 47375 : GeoJSONSourceType nSrcType = ESRIJSONDriverGetSourceType(poOpenInfo); 33 47375 : if (nSrcType == eGeoJSONSourceUnknown) 34 47355 : return FALSE; 35 20 : if (nSrcType == eGeoJSONSourceService) 36 : { 37 1 : if (poOpenInfo->IsSingleAllowedDriver("ESRIJSON")) 38 1 : return TRUE; 39 0 : if (!STARTS_WITH_CI(poOpenInfo->pszFilename, "ESRIJSON:")) 40 : { 41 0 : return -1; 42 : } 43 : } 44 19 : return TRUE; 45 : } 46 : 47 : /************************************************************************/ 48 : /* Open() */ 49 : /************************************************************************/ 50 : 51 19 : static GDALDataset *OGRESRIJSONDriverOpen(GDALOpenInfo *poOpenInfo) 52 : { 53 19 : GeoJSONSourceType nSrcType = ESRIJSONDriverGetSourceType(poOpenInfo); 54 19 : if (nSrcType == eGeoJSONSourceUnknown) 55 0 : return nullptr; 56 19 : return OGRGeoJSONDriverOpenInternal(poOpenInfo, nSrcType, "ESRIJSON"); 57 : } 58 : 59 : /************************************************************************/ 60 : /* RegisterOGRESRIJSON() */ 61 : /************************************************************************/ 62 : 63 1595 : void RegisterOGRESRIJSON() 64 : { 65 1595 : if (!GDAL_CHECK_VERSION("OGR/ESRIJSON driver")) 66 0 : return; 67 : 68 1595 : if (GDALGetDriverByName("ESRIJSON") != nullptr) 69 302 : return; 70 : 71 1293 : GDALDriver *poDriver = new GDALDriver(); 72 : 73 1293 : poDriver->SetDescription("ESRIJSON"); 74 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 75 1293 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "ESRIJSON"); 76 1293 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "json"); 77 1293 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, 78 1293 : "drivers/vector/esrijson.html"); 79 1293 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 80 : 81 1293 : poDriver->SetMetadataItem( 82 : GDAL_DMD_OPENOPTIONLIST, 83 : "<OpenOptionList>" 84 : " <Option name='FEATURE_SERVER_PAGING' type='boolean' " 85 : "description='Whether to automatically scroll through results with a " 86 : "ArcGIS Feature Service endpoint'/>" 87 1293 : "</OpenOptionList>"); 88 : 89 1293 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONOPTIONLIST, 90 1293 : "<CreationOptionList/>"); 91 : 92 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 93 1293 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 94 : 95 1293 : poDriver->pfnOpen = OGRESRIJSONDriverOpen; 96 1293 : poDriver->pfnIdentify = OGRESRIJSONDriverIdentify; 97 : 98 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 99 : }