Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features for OpenDRIVE 4 : * Purpose: Implementation of OGRXODRDriverCore. 5 : * Author: Michael Scholz, German Aerospace Center (DLR) 6 : * Gülsen Bardak, German Aerospace Center (DLR) 7 : * 8 : ****************************************************************************** 9 : * Copyright 2024 German Aerospace Center (DLR), Institute of Transportation Systems 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #include "gdal_frmts.h" 15 : #include "gdalplugindriverproxy.h" 16 : 17 : #include "ogrsf_frmts.h" 18 : #include "ogrxodrdrivercore.h" 19 : 20 : /************************************************************************/ 21 : /* OGRXODRDriverIdentify() */ 22 : /************************************************************************/ 23 : 24 50582 : int OGRXODRDriverIdentify(GDALOpenInfo *poOpenInfo) 25 : { 26 1120 : return poOpenInfo->fpL != nullptr && 27 51702 : poOpenInfo->IsExtensionEqualToCI("xodr") && 28 50596 : !STARTS_WITH(poOpenInfo->pszFilename, "/vsi"); 29 : } 30 : 31 : /************************************************************************/ 32 : /* OGRXODRDriverSetCommonMetadata() */ 33 : /************************************************************************/ 34 : 35 2110 : void OGRXODRDriverSetCommonMetadata(GDALDriver *poDriver) 36 : { 37 2110 : poDriver->SetDescription(DRIVER_NAME); 38 2110 : poDriver->SetMetadataItem( 39 : GDAL_DMD_LONGNAME, 40 2110 : "OpenDRIVE - Open Dynamic Road Information for Vehicle Environment"); 41 2110 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "xodr"); 42 2110 : poDriver->SetMetadataItem( 43 : GDAL_DMD_OPENOPTIONLIST, 44 : "<OpenOptionList>" 45 : " <Option name='EPSILON' type='float' description='Epsilon value for " 46 : "linear approximation of continuous OpenDRIVE geometries.' " 47 : "default='1.0'/>" 48 : " <Option name='DISSOLVE_TIN' type='boolean' description='Whether to " 49 : "dissolve triangulated surfaces.' default= 'NO'/>" 50 2110 : "</OpenOptionList>"); 51 2110 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 52 2110 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 53 2110 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 54 2110 : poDriver->pfnIdentify = OGRXODRDriverIdentify; 55 2110 : } 56 : 57 : /************************************************************************/ 58 : /* DeclareDeferredOGRXODRPlugin() */ 59 : /************************************************************************/ 60 : 61 : #ifdef PLUGIN_FILENAME 62 2038 : void DeclareDeferredOGRXODRPlugin() 63 : { 64 2038 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 65 : { 66 283 : return; 67 : } 68 1755 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 69 : #ifdef PLUGIN_INSTALLATION_MESSAGE 70 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 71 : PLUGIN_INSTALLATION_MESSAGE); 72 : #endif 73 1755 : OGRXODRDriverSetCommonMetadata(poDriver); 74 1755 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 75 : } 76 : #endif