ObservationDataSetLayer.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/st/maptools/DataSetLayer.cpp
22 
23  \brief A layer with reference to an ObservationDataSet.
24 */
25 
26 // TerraLib
27 
28 #include "../../dataaccess/query/DataSetName.h"
29 #include "../../dataaccess/query/Field.h"
30 #include "../../dataaccess/query/Fields.h"
31 #include "../../dataaccess/query/From.h"
32 #include "../../dataaccess/query/FromItem.h"
33 #include "../../dataaccess/query/Select.h"
34 #include "../../dataaccess/query/SpatialQueryProcessor.h"
35 #include "../../dataaccess/query/Where.h"
36 #include "../../dataaccess/utils/Utils.h"
37 #include "../../maptools/Exception.h"
38 #include "../../maptools/RendererFactory.h"
39 #include "../core/observation/ObservationDataSet.h"
40 #include "../core/observation/ObservationDataSetInfo.h"
41 #include "../loader/STDataLoader.h"
43 
44 // Boost
45 #include <boost/format.hpp>
46 
47 const std::string te::st::ObservationDataSetLayer::sm_type("OBSERVATIONDATASETLAYER");
48 
50  : AbstractSTDataSetLayer(parent),
51  m_info(info)
52 {
53 }
54 
56  : AbstractSTDataSetLayer(id, parent),
57  m_info(info)
58 {
59 }
60 
62  const std::string& title, AbstractLayer* parent,
64  : AbstractSTDataSetLayer(id, title, parent),
65  m_info(info)
66 {
67 }
68 
70 
71 std::unique_ptr<te::map::LayerSchema> te::st::ObservationDataSetLayer::getSchema() const
72 {
73  assert(!m_info->getDataSetName().empty());
74 
75  te::da::DataSourcePtr ds = te::da::GetDataSource(m_info->getDataSourceInfo().getId(), true);
76 
77  return ds->getDataSetType(m_info->getDataSetName());
78 }
79 
81 {
82  return 0;
83  //return m_info->getTemporalExtent();
84 }
85 
86 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
87  te::common::TraverseType travType,
88  const te::common::AccessPolicy /*accessPolicy*/) const
89 {
90  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(travType);
91  std::unique_ptr<te::da::DataSet> result = ods->release();
92  return result;
93 }
94 
95 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
96  const std::string& /*propertyName*/, const te::gm::Envelope* e,
98  const te::common::AccessPolicy /*accessPolicy*/) const
99 {
100  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(*e, r, travType);
101  std::unique_ptr<te::da::DataSet> result = ods->release();
102  return result;
103 }
104 
105 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
106  const std::string& /*propertyName*/, const te::gm::Geometry* g,
108  const te::common::AccessPolicy /*accessPolicy*/) const
109 {
110  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(*g, r, travType);
111  std::unique_ptr<te::da::DataSet> result = ods->release();
112  return result;
113 }
114 
115 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
116  te::da::Expression* /*restriction*/, te::common::TraverseType /*travType*/,
117  const te::common::AccessPolicy /*accessPolicy*/) const
118 {
119  std::unique_ptr<te::da::DataSet> result;
120  return result;
121 }
122 
123 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
124  const te::da::ObjectIdSet* /*oids*/, te::common::TraverseType /*travType*/,
125  const te::common::AccessPolicy /*accessPolicy*/) const
126 {
127  std::unique_ptr<te::da::DataSet> result;
128  return result;
129 }
130 
131 std::unique_ptr<te::st::ObservationDataSet> te::st::ObservationDataSetLayer::getObservationDataset(te::common::TraverseType travType) const
132 {
133  return te::st::STDataLoader::getDataSet(*m_info.get(), travType);
134 }
135 
136 std::unique_ptr<te::st::ObservationDataSet> te::st::ObservationDataSetLayer::getObservationDataset(const te::gm::Envelope& e,
138  te::common::TraverseType travType) const
139 {
140  return te::st::STDataLoader::getDataSet(*m_info.get(), e, r, travType);
141 }
142 
143 std::unique_ptr<te::st::ObservationDataSet> te::st::ObservationDataSetLayer::getObservationDataset(const te::gm::Geometry& g,
145  te::common::TraverseType travType) const
146 {
147  return te::st::STDataLoader::getDataSet(*m_info.get(), g, r, travType);
148 }
149 
150 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
152  te::common::TraverseType travType,
153  te::common::AccessPolicy /*rwRole*/) const
154 {
155  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(dt, r, travType);
156  std::unique_ptr<te::da::DataSet> result = ods->release();
157  return result;
158 }
159 
160 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
163  te::common::TraverseType travType,
164  te::common::AccessPolicy /*rwRole*/) const
165 {
166  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(dt, tr, e, sr, travType);
167  std::unique_ptr<te::da::DataSet> result = ods->release();
168  return result;
169 }
170 
171 std::unique_ptr<te::da::DataSet> te::st::ObservationDataSetLayer::getData(
174  te::common::TraverseType travType,
175  te::common::AccessPolicy /*rwRole*/) const
176 {
177  std::unique_ptr<te::st::ObservationDataSet> ods = te::st::ObservationDataSetLayer::getObservationDataset(dt, tr, g, sr, travType);
178  std::unique_ptr<te::da::DataSet> result = ods->release();
179  return result;
180 }
181 
183  te::common::TraverseType travType) const
184 {
185  return te::st::STDataLoader::getDataSet(*m_info.get(), dt, r, travType);
186 }
187 
188 std::unique_ptr<te::st::ObservationDataSet>
191  te::common::TraverseType travType) const
192 {
193  return te::st::STDataLoader::getDataSet(*m_info, dt, tr, e, sr, travType);
194 }
195 
198  te::common::TraverseType travType) const
199 {
200  return te::st::STDataLoader::getDataSet(*m_info.get(),g, sr, dt, tr, travType);
201 }
202 
204 {
205  return true;
206 }
207 
208 void te::st::ObservationDataSetLayer::draw(te::map::Canvas* canvas, const te::gm::Envelope& bbox, int srid, const double& scale, bool* cancel)
209 {
210  if(m_rendererType.empty())
211  throw te::map::Exception((boost::format(TE_TR("Could not draw the data set layer %1%. The renderer type is empty!")) % getTitle()).str());
212 
213  // Try get the defined renderer
214  std::unique_ptr<te::map::AbstractRenderer> renderer(te::map::RendererFactory::make(m_rendererType));
215  if(renderer.get() == 0)
216  throw te::map::Exception((boost::format(TE_TR("Could not draw the data set layer %1%. The renderer %2% could not be created!")) % getTitle() % m_rendererType).str());
217 
218  renderer->draw(this, canvas, bbox, srid, scale, cancel);
219 }
220 
222 {
223  return sm_type;
224 }
225 
227 {
228  return m_info->getDataSourceInfo().getId();
229 }
230 
232 {
233  return m_rendererType;
234 }
235 
237 {
238  m_rendererType = t;
239 }
240 
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
std::unique_ptr< ObservationDataSetInfo > m_info
Infos about the data source and its data set that contains observations.
boost::shared_ptr< DataSource > DataSourcePtr
A class that contains infos about a DataSet that contains observations.
virtual const std::string & getTitle() const
It returns the layer title.
bool isValid() const
It returns true if the layer can be used for instance to draw, otherwise, it returns false...
te::dt::DateTimePeriod * getTemporalExtent() const
It returns the layer temporal extent.
std::unique_ptr< te::st::ObservationDataSet > getObservationDataset(te::common::TraverseType travType=te::common::FORWARDONLY) const
void setRendererType(const std::string &t)
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991).
SpatialRelation
Spatial relations between geometric objects.
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
Definition: Translator.h:242
This is an abstract class that models a query expression.
static const std::string sm_type
A static data member used in the implementation of getType method.
AccessPolicy
Supported data access policies (can be used as bitfield).
TraverseType
A dataset can be traversed in two ways:
A layer with reference to a dataset that contains spatiotemporal data.
std::unique_ptr< te::da::DataSet > getData(te::common::TraverseType travType=te::common::FORWARDONLY, const te::common::AccessPolicy accessPolicy=te::common::RAccess) const
It gets the dataset identified by the layer name.
An Envelope defines a 2D rectangular region.
This class represents a set of unique ids created in the same context. i.e. from the same data set...
Definition: ObjectIdSet.h:55
A layer with a reference to an ObservationDataSet.
~ObservationDataSetLayer()
Destructor.
static te::dt::TimeDuration dt(20, 30, 50, 11)
const std::string & getType() const
It returns the layer type: OBSERVATIONDATASETLAYER.
const std::string & getDataSourceId() const
std::string m_rendererType
A pointer to the internal renderer used to paint this layer.
static std::unique_ptr< ObservationDataSet > getDataSet(const ObservationDataSetInfo &info, te::common::TraverseType travType=te::common::FORWARDONLY)
It returns a ObservationDataSet, that is, a DataSet that contains observations.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
static AbstractRenderer * make(const std::string &factoryKey)
It creates an object with the appropriated factory.
A canvas is an abstraction of a drawing area.
std::unique_ptr< LayerSchema > getSchema() const
It returns the layer schema.
const std::string & getRendererType() const
An abstract class to represent a period of date and time.
void draw(te::map::Canvas *canvas, const te::gm::Envelope &bbox, int srid, const double &scale, bool *cancel)
It draws the layer geographic objects in the given canvas using the informed SRS. ...
AbstractLayer(AbstractLayer *parent=0)
It initializes a new layer.
ObservationDataSetLayer(AbstractLayer *parent, ObservationDataSetInfo *info)
It initializes a new layer.