CreatingDataSetInMemory.cpp
Go to the documentation of this file.
1 // Examples
2 #include "DataAccessExamples.h"
3 
4 
5 // TerraLib
6 #include <terralib/datatype.h>
7 //#include <terralib/dataaccess.h>
8 #include <terralib/memory.h>
9 //#include <terralib/geometry.h>
10 
11 
12 // STL
13 #include <iostream>
14 
15 #include "boost/date_time/gregorian/gregorian.hpp"
16 
17 te::da::DataSet* CreatingDataSetInMemory(const std::string& datasetName)
18 {
19  try
20  {
21  //============= (1) Create a new data set type
22 
23  //te::da::DataSetType* dt = new te::da::DataSetType("SoilMeasures");
24  te::da::DataSetType* dt = new te::da::DataSetType(datasetName);
25 
26  //first property: measure_id
28  prop01->setAutoNumber(true);
29 
30  //second property: sensor_id
32 
33  //third property: location
34  te::gm::GeometryProperty* prop03 = new te::gm::GeometryProperty("location", 0, te::gm::PointType, true);
35  prop03->setSRID(4326);
36 
37  //fourth property: measure_date
39 
40  //fifth property: measure_value
41  te::dt::NumericProperty* prop05 = new te::dt::NumericProperty("value", 7, 4, true);
42 
43  //add properties into data set type
44  dt->add(prop01);
45  dt->add(prop02);
46  dt->add(prop03);
47  //dt->setDefaultGeomProperty(prop03);
48  dt->add(prop04);
49  dt->add(prop05);
50 
51  //define a primary key
52  std::string namepk = datasetName+ "_pk";
53  te::da::PrimaryKey* pk = new te::da::PrimaryKey(namepk, dt);
54  pk->add(prop01);
55 
56  //define a check constraint
57  te::da::CheckConstraint* cc = new te::da::CheckConstraint("measurevaluecc", dt);
58  cc->setExpression("measure_value>0");
59 
60  //create index
61  te::da::Index* index01 = new te::da::Index("measure_date_idx", te::da::B_TREE_TYPE, dt);
62  index01->add(prop04);
63 
64  //create spatial index
65  te::da::Index* index02 = new te::da::Index("measure_location_idx", te::da::R_TREE_TYPE, dt);
66  index02->add(prop03);
67 
68  //============= (2) Create a new data set with 9 measures
69 
71 
72  te::gm::Point* auxPoint1 = new te::gm::Point(23.5, 78.6, 4326);
73  te::mem::DataSetItem* dsItem01 = new te::mem::DataSetItem(ds);
74  dsItem01->setInt32(1, 233); //sensor_id
75  dsItem01->setGeometry(2, auxPoint1); //location
76 
77  boost::gregorian::date d1(boost::gregorian::greg_year(2010),boost::gregorian::greg_month(1),15);
78  te::dt::DateTime* datetime1 = new te::dt::Date(d1);
79 
80  dsItem01->setDateTime(3, datetime1); //measure_date
81  dsItem01->setNumeric(4, "65.89"); //measure_value
82 
83  te::gm::Point* auxPoint2 = new te::gm::Point(25.7, 80.5, 4326 );
84  te::mem::DataSetItem* dsItem02 = new te::mem::DataSetItem(ds);
85  dsItem02->setInt32(1, 245); //sensor_id
86  dsItem02->setGeometry(2, auxPoint2); //location
87  dsItem02->setDateTime(3, static_cast<te::dt::DateTime*>(datetime1->clone())); //measure_date
88  dsItem02->setNumeric(4, "80.90"); //measure_value
89 
90  te::gm::Point* auxPoint3 = new te::gm::Point(24.6, 83.5, 4326 );
91  te::mem::DataSetItem* dsItem03 = new te::mem::DataSetItem(ds);
92  dsItem03->setInt32(1, 255); //sensor_id
93  dsItem03->setGeometry(2, auxPoint3); //location
94  dsItem03->setDateTime(3, static_cast<te::dt::DateTime*>(datetime1->clone())); //measure_date
95  dsItem03->setNumeric(4, "87.90"); //measure_value
96 
97  boost::gregorian::date d2(boost::gregorian::greg_year(2010),boost::gregorian::greg_month(2),15);
98  te::dt::DateTime* datetime2 = new te::dt::Date(d2);
99 
100  te::gm::Point* auxPoint4 = new te::gm::Point(23.5, 78.6, 4326 );
101  te::mem::DataSetItem* dsItem04 = new te::mem::DataSetItem(ds);
102  dsItem04->setInt32(1, 233); //sensor_id
103  dsItem04->setGeometry(2, auxPoint4); //location
104  dsItem04->setDateTime(3, datetime2); //measure_date
105  dsItem04->setNumeric(4, "90.89"); //measure_value
106 
107  te::gm::Point* auxPoint5 = new te::gm::Point(25.7, 80.5, 4326 );
108  te::mem::DataSetItem* dsItem05 = new te::mem::DataSetItem(ds);
109  dsItem05->setInt32(1, 245); //sensor_id
110  dsItem05->setGeometry(2, auxPoint5); //location
111  dsItem05->setDateTime(3, static_cast<te::dt::DateTime*>(datetime2->clone())); //measure_date
112  dsItem05->setNumeric(4, "73.90"); //measure_value
113 
114  te::gm::Point* auxPoint6 = new te::gm::Point(24.6, 83.5, 4326 );
115  te::mem::DataSetItem* dsItem06 = new te::mem::DataSetItem(ds);
116  dsItem06->setInt32(1, 255); //sensor_id
117  dsItem06->setGeometry(2, auxPoint6); //location
118  dsItem06->setDateTime(3, static_cast<te::dt::DateTime*>(datetime2->clone())); //measure_date
119  dsItem06->setNumeric(4, "45.90"); //measure_value
120 
121  boost::gregorian::date d3(boost::gregorian::greg_year(2010),boost::gregorian::greg_month(3),15);
122  te::dt::DateTime* datetime3 = new te::dt::Date(d3);
123 
124  te::gm::Point* auxPoint7 = new te::gm::Point(23.5, 78.6, 4326 );
125  te::mem::DataSetItem* dsItem07 = new te::mem::DataSetItem(ds);
126  dsItem07->setInt32(1, 233); //sensor_id
127  dsItem07->setGeometry(2, auxPoint7); //location
128  dsItem07->setDateTime(3, datetime3); //measure_date
129  dsItem07->setNumeric(4, "76.89"); //measure_value
130 
131  te::gm::Point* auxPoint8 = new te::gm::Point(25.7, 80.5, 4326 );
132  te::mem::DataSetItem* dsItem08 = new te::mem::DataSetItem(ds);
133  dsItem08->setInt32(1, 245); //sensor_id
134  dsItem08->setGeometry(2, auxPoint8); //location
135  dsItem08->setDateTime(3,static_cast<te::dt::DateTime*>(datetime3->clone())); //measure_date
136  dsItem08->setNumeric(4, "78.15"); //measure_value
137 
138  te::gm::Point* auxPoint9 = new te::gm::Point(24.6, 83.5, 4326 );
139  te::mem::DataSetItem* dsItem09 = new te::mem::DataSetItem(ds);
140  dsItem09->setInt32(1, 255); //sensor_id
141  dsItem09->setGeometry(2, auxPoint9); //location
142  dsItem09->setDateTime(3, static_cast<te::dt::DateTime*>(datetime3->clone())); //measure_date
143  dsItem09->setNumeric(4, "50.32"); //measure_value
144 
145  //acrescentar esse metodo no data set em memoria!!!!
146  ds->add(dsItem01);
147  ds->add(dsItem02);
148  ds->add(dsItem03);
149  ds->add(dsItem04);
150  ds->add(dsItem05);
151  ds->add(dsItem06);
152  ds->add(dsItem07);
153  ds->add(dsItem08);
154  ds->add(dsItem09);
155 
156  return ds;
157 
158  }
159  catch(const std::exception& e)
160  {
161  std::cout << std::endl << "An exception has occurred when Creating DataSet In Memory Example: " << e.what() << std::endl;
162  return 0;
163  }
164  catch(...)
165  {
166  std::cout << std::endl << "An unexpected exception has occurred when Creating DataSet In Memory Example!" << std::endl;
167  return 0;
168  }
169 }
170 
171 
This file contains include headers for the Data Type module of TerraLib.
void setAutoNumber(bool a)
It tells if the property is an autonumber or not.
Geometric property.
void add(te::dt::Property *p)
It adds a property to the list of properties of the primary key.
Definition: PrimaryKey.h:123
void setGeometry(std::size_t i, te::gm::Geometry *value)
It sets the value of the i-th property.
This file contains include headers for the memory data source of TerraLib.
void setSRID(int srid)
It sets the spatial reference system identifier associated to this property.
An atomic property like an integer or double.
A class that models the description of a dataset.
Definition: DataSetType.h:72
void add(te::dt::Property *p)
It adds the property to the list of properties of the index.
static te::dt::Date ds(2010, 01, 01)
A class that describes a check constraint.
void setNumeric(std::size_t i, const std::string &value)
It sets the value of the i-th property.
void add(DataSetItem *item)
It adds a new item to the dataset and takes its ownership.
te::da::DataSet * CreatingDataSetInMemory(const std::string &datasetName)
It creates a data set in memory.
void setInt32(std::size_t i, boost::int32_t value)
It sets the value of the i-th property.
The type for arbitrary precison numbers, like numeric(p, q).
Implementation of a random-access dataset class for the TerraLib In-Memory Data Access driver...
A point with x and y coordinate values.
Definition: Point.h:50
A base class for date data types.
Definition: Date.h:53
void setDateTime(std::size_t i, te::dt::DateTime *value)
It sets the value of the i-th property.
Examples on how to access/manipulate DataSources in TerraLib.
void DataSet()
static te::dt::TimeDuration dt(20, 30, 50, 11)
virtual AbstractData * clone() const =0
It returns a clone of this object.
void add(Constraint *c)
It adds a new constraint.
An implementation of the DatasetItem class for the TerraLib In-Memory Data Access driver...
A dataset is the unit of information manipulated by the data access module of TerraLib.
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:52
void setExpression(const std::string &e)
It sets the check constraint expression.
The type for date and time types: date, date period, date duration, time duration, time instant, time period, time instant with time zone or time period with time zone.
It describes an index associated to a DataSetType.