====== 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