// 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; }