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