27 #include "../common/StringUtils.h"
28 #include "../common/Translator.h"
29 #include "../geometry/Envelope.h"
30 #include "../dataaccess/dataset/DataSetType.h"
31 #include "../raster/Grid.h"
32 #include "../raster/Raster.h"
33 #include "../raster/RasterProperty.h"
42 #include <gdal_priv.h>
45 #include <boost/filesystem.hpp>
46 #include <boost/format.hpp>
66 return m_connectionInfo;
71 m_connectionInfo = connInfo;
80 if (m_connectionInfo.empty())
81 throw Exception((boost::format(
TE_TR(
"Empty data source connection information"))).str());
83 std::map<std::string, std::string>::const_iterator it = m_connectionInfo.find(
"SOURCE");
84 if (it != m_connectionInfo.end())
85 m_straccess = it->second;
88 it = m_connectionInfo.find(
"URI");
89 if (it != m_connectionInfo.end())
90 m_straccess = it->second;
92 throw Exception((boost::format(
TE_TR(
"Invalid data source connection information"))).str());
108 if(m_connectionInfo.empty())
111 std::map<std::string, std::string>::const_iterator it = m_connectionInfo.find(
"SOURCE");
114 if(it != m_connectionInfo.end())
116 if(boost::filesystem::is_directory(it->second))
121 it = m_connectionInfo.find(
"URI");
123 if(it == m_connectionInfo.end())
129 GDALDataset* gds =
static_cast<GDALDataset*
>(GDALOpen(it->second.c_str(), GA_ReadOnly));
143 return sm_capabilities;
150 throw Exception((boost::format(
TE_TR(
"Data source is not open."))).str());
162 m_connectionInfo = dsInfo;
165 std::map<std::string, std::string>::const_iterator it = m_connectionInfo.find(
"SOURCE");
166 if(it != m_connectionInfo.end())
170 if(!boost::filesystem::is_directory(it->second))
171 boost::filesystem::create_directory(it->second);
173 catch(
const boost::filesystem::filesystem_error& e)
175 throw Exception((boost::format(
TE_TR(
"Could not create the data source due to the following error: %1%.")) % e.what()).str());
180 throw Exception((boost::format(
TE_TR(
"Data source creation is supported only for directory data sources"))).str());
186 std::map<std::string, std::string>::const_iterator it = dsInfo.find(
"SOURCE");
187 if(it != dsInfo.end())
189 if (boost::filesystem::exists(it->second) && boost::filesystem::is_directory(it->second))
195 it = dsInfo.find(
"URI");
196 if(it != dsInfo.end())
200 GDALDataset* gds =
static_cast<GDALDataset*
>(GDALOpen(it->second.c_str(), GA_ReadOnly));
215 std::map<std::string, std::string>::const_iterator it = dsInfo.find(
"URI");
216 if (it == dsInfo.end())
217 it = dsInfo.find(
"SOURCE");
219 if (it == dsInfo.end())
224 boost::filesystem::remove(it->second);
226 catch(
const boost::filesystem::filesystem_error& )
232 std::vector<std::string> dsnames;
234 std::map<std::string, std::string>::const_iterator it = dsInfo.find(
"URI");
235 if (it != dsInfo.end())
236 dsnames.push_back(it->second);
239 it = dsInfo.find(
"SOURCE");
240 if (it != dsInfo.end())
241 dsnames.push_back(it->second);
243 throw Exception((boost::format(
TE_TR(
"Empty ou invalid data source connection information"))).str());
250 return std::vector<te::common::CharEncoding>();
Utilitary functions to access GDAL and match some of its concepts to TerraLib concepts.
static void setCapabilities(const te::da::DataSourceCapabilities &capabilities)
const std::map< std::string, std::string > & getConnectionInfo() const
It returns the set of parameters used to set up the access channel to the underlying repository...
A class that represents the known capabilities of a specific data source, i.e. this class informs all...
static te::da::DataSourceCapabilities sm_capabilities
#define TE_TR(message)
It marks a string in order to get translated.
~DataSource()
Virtual destructor.
void create(const std::map< std::string, std::string > &dsInfo)
It creates a new data source.
#define TE_GDAL_DRIVER_IDENTIFIER
An exception class for the GDAL module.
std::vector< te::common::CharEncoding > getEncodings(const std::map< std::string, std::string > &dsInfo)
It gets the encodings for the data source.
te::da::DataSourceCapabilities capabilities
std::string GetParentDataSetName(const std::string &subDataSetName)
It returns the parent dataset name from a Sub DataSet name.
void drop(const std::map< std::string, std::string > &dsInfo)
It removes the data source with the connection information from a driver.
bool exists(const std::map< std::string, std::string > &dsInfo)
Check the existence of a data source in a driver.
void close()
It closes the data source and clears all the resources used by its internal communication channel...
std::auto_ptr< te::da::DataSourceTransactor > getTransactor()
It returns an object that can execute transactions in the context of a data source.
bool isValid() const
It checks if the data source is valid (available for using).
bool isOpened() const
It returns true if the data source is opened, otherwise it returns false.
GDAL data set use counter.
std::string getType() const
It returns the data source type name (in UPPER CASE). Ex: POSTGIS, SQLITE, WFS, WMS, or MYSQL.
std::vector< std::string > getDataSourceNames(const std::map< std::string, std::string > &dsInfo)
It gets the data source names available in a driver.
void open()
It opens the data source and makes it ready for using.
const te::da::DataSourceCapabilities & getCapabilities() const
It returns the known capabilities of the data source.
The implementation of a DataSource that consists of datasets that can be decoded by the GDAL Library...
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
It sets the connection information to be used when connecting to the data source. ...