====== Data Access ======
**1.** [[:wiki:documentation:devguide:data_access_module|Link para documentação do módulo Data Access]].
**2.** Script CMake:
cmake_minimum_required(VERSION 2.8.12)
project(curso_terralib_data_access)
add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_FILESYSTEM_VERSION=3 -DBOOST_UBLAS_TYPE_CHECK=0 -DBOOST_LOG_DYN_LINK)
if(APPLE)
add_definitions(-ftemplate-depth-1024)
endif()
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPILER MATCHES ".*clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -std=c++11")
endif()
find_package(Boost 1.54.0 REQUIRED system chrono timer filesystem)
find_package(terralib REQUIRED)
include_directories(${Boost_INCLUDE_DIR} ${terralib_INCLUDE_DIRS} ${terralib_DIR})
file(GLOB CURSO_SRC_FILES *.cpp)
add_executable(curso_terralib_data_access ${CURSO_SRC_FILES})
target_link_libraries(curso_terralib_data_access terralib_mod_dataaccess
terralib_mod_plugin
terralib_mod_geometry
${BOOST_SYSTEM_LIBRARY})
**3.** Código:
// TerraLib
#include
#include
#include
// STL
#include
#include
void LoadModules()
{
te::plugin::PluginInfo* info;
std::string plugins_path = te::common::FindInTerraLibPath("share/terralib/plugins");
info = te::plugin::GetInstalledPlugin(plugins_path + "/te.da.pgis.teplg");
te::plugin::PluginManager::getInstance().add(info);
info = te::plugin::GetInstalledPlugin(plugins_path + "/te.da.gdal.teplg");
te::plugin::PluginManager::getInstance().add(info);
info = te::plugin::GetInstalledPlugin(plugins_path + "/te.da.ogr.teplg");
te::plugin::PluginManager::getInstance().add(info);
te::plugin::PluginManager::getInstance().loadAll();
}
void UnloadModules()
{
te::plugin::PluginManager::getInstance().unloadAll();
}
void PrintDataSet(std::string datasetName, te::da::DataSet* dataset)
{
if(dataset == 0)
{
std::cout << "The informed dataset is NULL!" << std::endl;
return;
}
// this will be used just to count the items in the dataset
int item = 0;
// traverse the dataset and print each dataset item
std::cout << "DATASET: " << datasetName;
while(dataset->moveNext())
{
std::cout << std::endl << "ITEM NUMBER: " << item++ << " =======================" << std::endl;
for(std::size_t i = 0; i < dataset->getNumProperties(); ++i)
{
std::cout << dataset->getPropertyName(i) << ": " ;
if(dataset->isNull(i))
{
std::cout << std::endl;
continue;
}
std::cout << dataset->getAsString(i) << std::endl;
}
}
}
void ReadShapefile()
{
std::unique_ptr ds = te::da::DataSourceFactory::make("OGR");
std::map connInfo;
connInfo["URI"] = "/home/terralib5/curso/data/shp/munic_2001.shp";
ds->setConnectionInfo(connInfo);
ds->open();
std::cout << "Datasource is opened? "
<< std::boolalpha
<< ds->isOpened() << std::endl;
// check point: what can be done with this datasource
//PrintDataSourceCapabilities(ds.get());
// check point: retrieving data from the datasource
std::cout << "\nDatasource has "
<< ds->getNumberOfDataSets()
<< " datasources" << std::endl;
std::vector dsets = ds->getDataSetNames();
for (size_t i=0; igetNumberOfDataSets(); ++i)
std::cout << '[' << (i + 1)
<< "]: "
<< dsets[i]
<< std::endl;
// check point: retrieving the data from a dataset of the datasource
if(ds->getNumberOfDataSets() == 0)
return;
std::unique_ptr dataset = ds->getDataSet(dsets[0]);
PrintDataSet(dsets[0], dataset.get());
}
int main(int argc, char* argv[])
{
TerraLib::getInstance().initialize();
LoadModules();
ReadShapefile();
UnloadModules();
TerraLib::getInstance().finalize();
return EXIT_SUCCESS;
}
**4.** Opções do CMake:
-DCMAKE_BUILD_TYPE:STRING="Debug"
-DCMAKE_PREFIX_PATH:PATH="/home/terralib5/mylibs;/home/terralib5/mylibs/terralib5/lib/cmake"
**5.** Variável de ambiente para execução:
LD_LIBRARY_PATH=/home/terralib5/mylibs/lib/:/home/terralib5/mylibs/gdal2/lib:/home/terralib5/mylibs/pgsql/lib:/home/terralib5/mylibs/terralib5/lib