28 #include "../Defines.h" 29 #include "../core/filesystem/FileSystem.h" 30 #include "../core/logger/Logger.h" 31 #include "../core/plugin/CppPlugin.h" 32 #include "../core/translator/Translator.h" 33 #include "../core/utils/Platform.h" 34 #include "../dataaccess/datasource/DataSourceCapabilities.h" 35 #include "../dataaccess/datasource/DataSourceFactory.h" 36 #include "../dataaccess/datasource/DataSourceManager.h" 46 #include <boost/filesystem.hpp> 49 #include <gdal_priv.h> 69 std::string gdal_data_dir(TERRALIB_GDAL_DATA);
72 if(gdal_data_dir.empty() ||
77 #if defined(TE_PLATFORM) && defined(TE_PLATFORMCODE_MSWINDOWS) 78 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 80 #elif TE_PLATFORM == TE_PLATFORMCODE_APPLE 82 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 85 #error "unsupported plataform: please, contact terralib-team@terralib.org" 89 "the macro TE_PLATFORM is not set, please, contact terralib-team@terralib.org" 93 if(!gdal_data_dir.empty())
95 CPLSetConfigOption(
"GDAL_DATA", gdal_data_dir.c_str());
98 CPLSetConfigOption(
"GDAL_PAM_ENABLED",
"NO");
136 std::set<std::string> supportedRasterExtensionsSet;
137 std::set<std::string> supportedRasterCreationExtensionsSet;
138 std::set<std::string> supportedVectorExtensionsSet;
140 for(std::map<std::string, DriverMetadata>::const_iterator it =
144 if(!it->second.m_extensions.empty())
146 for(std::size_t extensionsIdx = 0;
147 extensionsIdx < it->second.m_extensions.size(); ++extensionsIdx)
149 if(it->second.m_isRaster)
151 if(supportedRasterExtensionsSet.find(
152 it->second.m_extensions[extensionsIdx]) ==
153 supportedRasterExtensionsSet.end())
155 supportedRasterExtensionsSet.insert(
156 it->second.m_extensions[extensionsIdx]);
159 if(it->second.m_supportCreation )
161 if(supportedRasterCreationExtensionsSet.find(
162 it->second.m_extensions[extensionsIdx]) ==
163 supportedRasterCreationExtensionsSet.end())
165 supportedRasterCreationExtensionsSet.insert(
166 it->second.m_extensions[extensionsIdx]);
171 if(it->second.m_isVector)
173 if(supportedVectorExtensionsSet.find(
174 it->second.m_extensions[extensionsIdx]) ==
175 supportedVectorExtensionsSet.end())
177 supportedVectorExtensionsSet.insert(
178 it->second.m_extensions[extensionsIdx]);
185 std::string supportedRasterExtensionsStr;
187 for(std::set<std::string>::const_iterator it =
188 supportedRasterExtensionsSet.begin();
189 it != supportedRasterExtensionsSet.end(); ++it)
191 if(!supportedRasterExtensionsStr.empty())
193 supportedRasterExtensionsStr.append(
";");
195 supportedRasterExtensionsStr.append(*it);
198 std::string supportedRasterCreationExtensionsStr;
200 for(std::set<std::string>::const_iterator it =
201 supportedRasterCreationExtensionsSet.begin();
202 it != supportedRasterCreationExtensionsSet.end(); ++it)
204 if(!supportedRasterCreationExtensionsStr.empty())
206 supportedRasterCreationExtensionsStr.append(
";");
208 supportedRasterCreationExtensionsStr.append(*it);
211 std::string supportedVectorExtensionsStr;
213 for(std::set<std::string>::const_iterator it =
214 supportedVectorExtensionsSet.begin();
215 it != supportedVectorExtensionsSet.end(); ++it)
217 if(!supportedVectorExtensionsStr.empty())
219 supportedVectorExtensionsStr.append(
";");
221 supportedVectorExtensionsStr.append(*it);
225 supportedRasterExtensionsStr);
227 supportedRasterCreationExtensionsStr);
229 supportedVectorExtensionsStr);
void GDALErrorHandler(CPLErr eErrClass, int errNo, const char *msg)
A class that informs what kind of constraint and index is supported by a given data source...
static bool isDirectory(const std::string &path)
Checks if a given path in UTF-8 is a directory.
std::map< std::string, DriverMetadata > & GetGDALDriversMetadata()
Returns metadata from all registered GDAL drivers (key: driver name).
#define TERRALIB_CPP_PLUGIN_END(plugin_class_name)
This is the concrete factory for GDAL rasters.
void setDataSetTypeCapabilities(const DataSetTypeCapabilities &capabilities)
void addSpecificCapability(const std::string &key, const std::string &value)
static void initialize()
It initializes the factory: the singleton instance will be registered in the abstract factory DataSou...
static void setCapabilities(const te::da::DataSourceCapabilities &capabilities)
te::da::QueryCapabilities queryCapabilities
A class that represents the known capabilities of a specific data source, i.e. this class informs all...
void setAccessPolicy(const te::common::AccessPolicy &accessPolicy)
te::da::DataSource * Build(const te::core::URI &uri)
A class that informs what the dataset implementation of a given data source can perform.
#define TE_TR(message)
It marks a string in order to get translated.
TERRALIB_CPP_PLUGIN_SHUTDOWN
static void remove(const std::string &dsType)
it finalizes the GDAL factory support.
void setQueryCapabilities(const QueryCapabilities &capabilities)
void setAsConnected(const bool &connected)
te::da::DataSetTypeCapabilities dataSetTypeCapabilities
void setSupportTransactions(const bool &support)
A class that represents the supported data types of a specific data source.
te::da::DataTypeCapabilities dataTypeCapabilities
A class that informs the query support of a given data source.
static DataSourceManager & getInstance()
It returns a reference to the singleton instance.
te::da::DataSourceCapabilities capabilities
Configuration flags for the GDAL Driver of TerraLib.
void setSupportRaster(const bool &support)
#define TERRALIB_CPP_PLUGIN_STARTUP
A factory for data sources.
te::da::DataSetCapabilities dataSetCapabilities
void setDataSetCapabilities(const DataSetCapabilities &capabilities)
TE_LOG_TRACE(TE_TR("TerraLib GDAL driver shutdown!"))
void setDataTypeCapabilities(const DataTypeCapabilities &capabilities)
TECOREEXPORT std::string FindInTerraLibPath(const std::string &path)
Returns the path relative to a directory or file in the context of TerraLib.
static void add(const std::string &dsType, FactoryFnctType f)
static void finalize()
It finalizes the factory: the singleton instance will be destroyed and will be unregistered from the ...
TEGDALEXPORT boost::mutex & getStaticMutex()
Returns a reference to a static mutex initialized when this module is initialized.
TERRALIB_CPP_PLUGIN_BEGIN(Plugin) TERRALIB_CPP_PLUGIN_STARTUP
void setSupportEfficientDataSetSize(const bool &support)
#define TE_GDAL_DRIVER_IDENTIFIER
Utilitary functions to access GDAL and match some of its concepts to TerraLib concepts.