TerraLib and TerraView Wiki Page

Data Access

1. Link para documentação do módulo Data Access.

2. Script CMake:

CMakeLists.txt
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:

main.cpp
// TerraLib
#include <terralib/common.h>
#include <terralib/dataaccess.h>
#include <terralib/plugin.h>
 
// STL
#include <iostream>
#include <memory>
 
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<te::da::DataSource> ds = te::da::DataSourceFactory::make("OGR");
 
  std::map<std::string, std::string> 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<std::string> dsets = ds->getDataSetNames();
 
  for (size_t i=0; i<ds->getNumberOfDataSets(); ++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<te::da::DataSet> 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