ExemplifyDataacces.cpp
Go to the documentation of this file.
1 #include "RasterExamples.h"
2 
3 #include <terralib/dataaccess.h>
5 #include <terralib/raster.h>
6 #include <terralib/geometry.h>
7 
8 #include <iostream>
9 #include <map>
10 #include <string>
11 
12 // This example shows how to use a Data Set Type Persistence to create a raster data file.
14 {
15  try
16  {
17  std::cout << "=== Example DataSetTypePersistence === " << std::endl;
18  // describes the raster that you want
19  te::rst::Grid* grid = new te::rst::Grid(100, 100);
20  grid->setGeoreference(te::gm::Coord2D(100, 100), 29183, 1,1);
21 
22  std::vector<te::rst::BandProperty*> bprops;
23  bprops.push_back(new te::rst::BandProperty(0, te::dt::UCHAR_TYPE));
24 
25  std::map<std::string, std::string> rinfo;
26 
27  te::rst::RasterProperty* rstp = new te::rst::RasterProperty(grid, bprops, rinfo);
28 
29  te::da::DataSetType* dstp = new te::da::DataSetType("test.tif");
30  dstp->add(rstp);
31 
32  // access a datasource to persist it
33  std::string connInfo("file://");
34  connInfo += TERRALIB_DATA_DIR "/geotiff";
35 
36  std::unique_ptr<te::da::DataSource> ds = te::da::DataSourceFactory::make("GDAL", connInfo);
37  ds->open();
38 
39  std::unique_ptr<te::da::DataSourceTransactor> tr = ds->getTransactor();
40 
41  // manipulate it using data set type persistence;
42  tr->createDataSet(dstp, std::map<std::string, std::string> ());
43  tr->renameDataSet(dstp->getName(), "test2.tif");
44  tr->dropDataSet(dstp->getName());
45  }
46  catch(const std::exception& e)
47  {
48  std::cout << std::endl << "An exception has occurred in DataAccess DataSetTypePersistence(): " << e.what() << std::endl;
49  }
50  catch(...)
51  {
52  std::cout << std::endl << "An unexpected exception has occurred in DataAccess DataSetTypePersistence()!" << std::endl;
53  }
54  std::cout << "=== End example DataSetTypePersistence === " << std::endl;
55 }
56 
57 // This example shows how to access a raster data file using the Data Set interface.
58 void DataSet()
59 {
60  try
61  {
62  std::cout << "=== Example Data Set === " << std::endl;
63 
64 // describes the raster that you want
65  te::rst::Grid* grid = new te::rst::Grid(100,100);
66  grid->setGeoreference(te::gm::Coord2D(100,100), 29183, 1,1);
67 
68  std::vector<te::rst::BandProperty*> bprops;
69  bprops.push_back(new te::rst::BandProperty(0, te::dt::UCHAR_TYPE));
70 
71  std::map<std::string, std::string> rinfo;
72 
73  te::rst::RasterProperty* rstp = new te::rst::RasterProperty(grid, bprops, rinfo);
74 
75  te::da::DataSetType* dstp = new te::da::DataSetType("test.tif");
76  dstp->add(rstp);
77 
78 // access a datasource to persist it
79  std::string connInfo("file://");
80  connInfo += TERRALIB_DATA_DIR "/geotiff";
81 
82  std::unique_ptr<te::da::DataSource> ds = te::da::DataSourceFactory::make("GDAL", connInfo);
83  ds->open();
84 
85  std::unique_ptr<te::da::DataSourceTransactor> tr = ds->getTransactor();
86  tr->createDataSet(dstp, std::map<std::string, std::string> ());
87 
88 // access the data set
89  //std::unique_ptr<te::da::DataSet> dset = tr->getDataSet("test.tif", te::common::FORWARDONLY, te::common::RWAccess);
90  std::unique_ptr<te::da::DataSet> dset = tr->getDataSet("test.tif", te::common::FORWARDONLY);
91 
92 // access the raster
93  std::size_t rpos = te::da::GetFirstPropertyPos(dset.get(), te::dt::RASTER_TYPE);
94  std::unique_ptr<te::rst::Raster> rst = dset->getRaster(rpos);
95  for (unsigned int b = 0; b < rst->getNumberOfBands(); ++b)
96  {
97  for (unsigned int l = 0; l < rst->getNumberOfRows(); ++l)
98  {
99  for (unsigned int c = 0; c < rst->getNumberOfColumns(); ++c)
100  {
101  rst->setValue(c,l,l*2,b);
102  }
103  }
104  }
105  std::cout << std::endl << "Raster test.tif was successfully created, check your data source directory." << std::endl;
106  }
107  catch(const std::exception& e)
108  {
109  std::cout << std::endl << "An exception has occurred in DataAccess DataSet(): " << e.what() << std::endl;
110  }
111  catch(...)
112  {
113  std::cout << std::endl << "An unexpected exception has occurred in DataAccess DataSet()!" << std::endl;
114  }
115  std::cout << "=== End example Data Set === " << std::endl;
116 }
117 
118 // This examples shows how to use the Data Set Persistence interface to create and manipulate a raster data file.
120 {
121  try
122  {
123  std::cout << "=== Example DataSetPersistence === " << std::endl;
124  std::string connInfo("file://");
125  connInfo += TERRALIB_DATA_DIR "/geotiff";
126 
127  std::unique_ptr<te::da::DataSource> ds = te::da::DataSourceFactory::make("GDAL", connInfo);
128  ds->open();
129 
130  std::unique_ptr<te::da::DataSourceTransactor> tr = ds->getTransactor();
131  std::unique_ptr<te::da::DataSetType> dt_tiff = tr->getDataSetType("test.tif");
132  std::unique_ptr<te::da::DataSet> ds_tiff = tr->getDataSet("test.tif");
133 
134  //te::da::DataSetType* dt_tiff2 = new te::da::DataSetType("test2.tif");
135  te::rst::RasterProperty* rstp = static_cast<te::rst::RasterProperty*>(dt_tiff->getProperties()[0]->clone());
136  rstp->setName("test2.tif");
137  //dt_tiff2->add(rstp);
138 
139  //tr->add(dt_tiff2, rstp);
140 // te::da::DataSetTypePersistence* datasetTypePersistence = tr->getDataSetTypePersistence();
141 // datasetTypePersistence->add(dt_tiff2, rstp);
142 
143 // te::da::DataSetPersistence* pers = tr->getDataSetPersistence();
144  //tr->add("test2.tif", ds_tiff);
145  //tr->remove("test2.tif");
146  }
147  catch(const std::exception& e)
148  {
149  std::cout << std::endl << "An exception has occurred in DataAccess DataSetPersistence(): " << e.what() << std::endl;
150  }
151  catch(...)
152  {
153  std::cout << std::endl << "An unexpected exception has occurred in DataAccess DataSetPersistence()!" << std::endl;
154  }
155  std::cout << "=== End example DataSetPersistence === " << std::endl;
156 }
157 
159 {
160  try
161  {
162  std::cout << "=== Example Data Source === " << std::endl;
163  std::string connInfo("file://");
164  connInfo += TERRALIB_DATA_DIR "/geotiff";
165 
166  std::unique_ptr<te::da::DataSource> ds = te::da::DataSourceFactory::make("GDAL", connInfo);
167  ds->open();
168 
169  std::unique_ptr<te::da::DataSourceTransactor> transactor = ds->getTransactor();
170  std::vector<std::string> datasets = transactor->getDataSetNames();
171 
172  std::cout << "List of raster datasets in " << connInfo << ":";
173  for(size_t i = 0; i < datasets.size(); ++i)
174  {
175  std::unique_ptr<te::da::DataSet> ds = transactor->getDataSet(datasets[i]);
176  std::unique_ptr<te::rst::Raster> rst = ds->getRaster(0);
177  std::cout << std::endl;
178  std::cout << rst->toString();
179  std::cout << std::endl;
180  }
181  std::cout << "=== End example Data Source === " << std::endl;
182  }
183  catch(const std::exception& e)
184  {
185  std::cout << std::endl << "An exception has occurred in RasterDataAccessExamples DataSetPersistence(): " << e.what() << std::endl;
186  }
187  catch(...)
188  {
189  std::cout << std::endl << "An unexpected exception has occurred in RasterDataAccessExamples DataSetPersistence()!" << std::endl;
190  }
191 }
192 
194 {
195 #if TE_EXAMPLE_USE_GDAL
196  DataSource();
197  DataSet();
200 #endif
201 }
static std::unique_ptr< DataSource > make(const std::string &driver, const te::core::URI &connInfo)
void ExemplifyDataAccess()
A set of examples using GDAL/raster/dataaccess support.
A raster band description.
Definition: BandProperty.h:61
A class that models the description of a dataset.
Definition: DataSetType.h:72
void DataSetPersistence()
An utility struct for representing 2D coordinates.
Definition: Coord2D.h:40
static te::dt::Date ds(2010, 01, 01)
void setGeoreference(const te::gm::Coord2D &ulLocation, int srid, double resX, double resY)
Sets the information needed to georeference the grid.
void DataSetTypePersistence()
Raster property.
int b
Definition: TsRtree.cpp:32
void setName(const std::string &name)
It sets the property name.
Definition: Property.h:137
void DataSet()
A factory for data sources.
void DataSource()
void add(Constraint *c)
It adds a new constraint.
These routines show how to use the raster module and the GDAL data source module. ...
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
This file contains include headers for the Vector Geometry model of TerraLib.
A rectified grid is the spatial support for raster data.
Definition: raster/Grid.h:68
This file contains include headers for the Data Access module of TerraLib.
const std::string & getName() const
It returns the property name.
Definition: Property.h:127