DataSet.h
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/ogr/DataSet.h
22 
23  \brief Implementation of a DataSet for OGR data provider.
24 */
25 
26 #ifndef __TERRALIB_OGR_INTERNAL_DATASET_H
27 #define __TERRALIB_OGR_INTERNAL_DATASET_H
28 
29 #include "Config.h"
30 
31 // TerraLib
32 #include "../dataaccess/dataset/DataSet.h"
33 
34 // STL
35 #include <vector>
36 
37 // Forward declarations
38 class OGRLayer;
39 class OGRFeature;
40 class GDALDataset;
41 
42 namespace te
43 {
44 // Forward declaration
45  namespace da
46  {
47  class DataSetType;
48  }
49 
50  namespace ogr
51  {
52  /*!
53  \class DataSet
54 
55  \brief Implementation of a DataSet for OGR data provider.
56 
57  \sa Transactor, te::da::DataSet
58  */
60  {
61  public:
62 
63  /** @name Constructor/Destructor
64  * Initilizer methods.
65  */
66  //@{
67 
68  /*! \brief Constructor. */
69  //DataSet(OGRDataSource* dsrc, OGRLayer* layer);
70  DataSet(GDALDataset* dsrc, OGRLayer* layer, bool takeOGRDataSetOwnership, bool takeOGRLayerOwnership);
71 
72  /*! \brief Destructor. */
74 
75  //@}
76 
78 
80 
81  std::size_t getNumProperties() const;
82 
83  int getPropertyDataType(std::size_t pos) const;
84 
85  std::string getPropertyName(std::size_t pos) const;
86 
87  std::string getDatasetNameOfProperty(std::size_t pos) const;
88 
89  bool isEmpty() const;
90 
91  bool isConnected() const { return true; }
92 
93  std::size_t size() const;
94 
95  std::unique_ptr<te::gm::Envelope> getExtent(std::size_t i);
96 
97  bool moveNext();
98 
99  bool movePrevious();
100 
102 
103  bool moveFirst();
104 
105  bool moveLast();
106 
107  bool move(std::size_t i);
108 
109  bool isAtBegin() const;
110 
111  bool isBeforeBegin() const;
112 
113  bool isAtEnd() const;
114 
115  bool isAfterEnd() const;
116 
117  bool isPositionValid() const;
118 
119  char getChar(std::size_t i) const;
120 
121  unsigned char getUChar(std::size_t i) const;
122 
123  boost::int16_t getInt16(std::size_t i) const;
124 
125  boost::int32_t getInt32(std::size_t i) const;
126 
127  boost::int64_t getInt64(std::size_t i) const;
128 
129  bool getBool(std::size_t i) const;
130 
131  float getFloat(std::size_t i) const;
132 
133  double getDouble(std::size_t i) const;
134 
135  std::string getNumeric(std::size_t i) const;
136 
137  std::string getString(std::size_t i) const;
138 
139  std::unique_ptr<te::dt::ByteArray> getByteArray(std::size_t i) const;
140 
141  std::unique_ptr<te::gm::Geometry> getGeometry(std::size_t i) const;
142 
143  std::unique_ptr<te::rst::Raster> getRaster(std::size_t i) const;
144 
145  std::unique_ptr<te::dt::DateTime> getDateTime(std::size_t i) const;
146 
147  std::unique_ptr<te::dt::Array> getArray(std::size_t i) const;
148 
149  bool isNull(std::size_t i) const;
150 
151  private:
152 
153  /*!
154  \brief Returns a WKB from the requested geometry indx.
155  \param i Internal ORG geometries index.
156  \return A pointer to the WKB
157  */
158  const unsigned char* getWKB( const size_t i ) const;
159 
160  private:
161 
162  mutable te::da::DataSetType* m_dt; //!< DataSetType.
163 
164  //OGRDataSource* m_ogrDs; //<! Pointer to OGR data source.
165  GDALDataset* m_ogrDs; //<! Pointer to OGR data source.
166  OGRLayer* m_layer; //<! A pointer to OGR Layer.
167  bool m_takeOGRDataSetOwnership; //!< If TRUE, the ownership of the OGRDataSet will be transfered for the dataSet and so it must delete it in its destructor
168  bool m_takeOGRLayerOwnership; //!< If TRUE, the ownership of the OGRLayer will be transfered for the dataSet and so it must delete it in its destructor
169  OGRFeature* m_currentFeature; //<! A pointer to current OGR Feature of layer.
170  int m_i; //<! The current dataset index.
171 
172  mutable unsigned char* m_wkbArray; //<! The array that stores the wkb generated by OGR Library.
173  mutable int m_wkbArraySize; //<! The size of wkb array.
174 
175  int m_srid; //!< The SRS id associated to this dataset.m_
176  std::size_t m_fidPropertyPosition; //!< The position of the fid property in the resulting dataSetType
177  std::vector<int> m_vecColumnIndexes; //!< Depending on the way that the Layer was created (get or query), it FID column can be explicit or implicit. So we must handle correctly all the column indexes
178  };
179 
180  } // end namespace ogr
181 } // end namespace te
182 
183 #endif // __TERRALIB_OGR_INTERNAL_DATASET_H
A class that models the description of a dataset.
Definition: DataSetType.h:73
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:114
Implementation of a DataSet for OGR data provider.
Definition: DataSet.h:60
bool isAtBegin() const
It tells if the dataset internal pointer is on the first element of the collection or not.
boost::int16_t getInt16(std::size_t i) const
Method for retrieving a 16-bit integer attribute value (2 bytes long).
std::size_t size() const
It returns the collection size, if it is known.
bool isEmpty() const
It returns true if the collection is empty.
const unsigned char * getWKB(const size_t i) const
Returns a WKB from the requested geometry indx.
OGRLayer * m_layer
Definition: DataSet.h:166
boost::int32_t getInt32(std::size_t i) const
Method for retrieving a 32-bit integer attribute value (4 bytes long).
std::unique_ptr< te::dt::ByteArray > getByteArray(std::size_t i) const
Method for retrieving a byte array.
std::string getString(std::size_t i) const
Method for retrieving a string value attribute.
std::size_t getNumProperties() const
It returns the number of properties that composes an item of the dataset.
std::string getPropertyName(std::size_t pos) const
It returns the property name at position pos.
float getFloat(std::size_t i) const
Method for retrieving a float attribute value.
te::da::DataSetType * m_dt
DataSetType.
Definition: DataSet.h:162
double getDouble(std::size_t i) const
Method for retrieving a double attribute value.
std::vector< int > m_vecColumnIndexes
Depending on the way that the Layer was created (get or query), it FID column can be explicit or impl...
Definition: DataSet.h:177
bool move(std::size_t i)
It moves the dataset internal pointer to a given position.
bool m_takeOGRDataSetOwnership
If TRUE, the ownership of the OGRDataSet will be transfered for the dataSet and so it must delete it ...
Definition: DataSet.h:167
bool moveNext()
It moves the internal pointer to the next item of the collection.
boost::int64_t getInt64(std::size_t i) const
Method for retrieving a 64-bit integer attribute value (8 bytes long).
std::string getDatasetNameOfProperty(std::size_t pos) const
It returns the underlying dataset name of the property at position pos.
std::string getNumeric(std::size_t i) const
Method for retrieving a numeric attribute value.
std::unique_ptr< te::dt::DateTime > getDateTime(std::size_t i) const
Method for retrieving a date and time attribute value.
bool m_takeOGRLayerOwnership
If TRUE, the ownership of the OGRLayer will be transfered for the dataSet and so it must delete it in...
Definition: DataSet.h:168
GDALDataset * m_ogrDs
Definition: DataSet.h:165
bool moveLast()
It sets the dataset internal pointer to the last item in the collection.
int m_srid
The SRS id associated to this dataset.m_.
Definition: DataSet.h:175
~DataSet()
Destructor.
bool moveFirst()
It moves the internal pointer to the first item in the collection.
bool moveBeforeFirst()
It moves the internal pointer to a position before the first item in the collection.
char getChar(std::size_t i) const
Method for retrieving a signed character attribute value (1 byte long).
te::common::AccessPolicy getAccessPolicy() const
It returns the read and write permission associated to the dataset.
Definition: DataSet.h:79
std::size_t m_fidPropertyPosition
The position of the fid property in the resulting dataSetType.
Definition: DataSet.h:176
int getPropertyDataType(std::size_t pos) const
It returns the underlying data type of the property at position pos.
std::unique_ptr< te::dt::Array > getArray(std::size_t i) const
Method for retrieving an array.
std::unique_ptr< te::rst::Raster > getRaster(std::size_t i) const
Method for retrieving a raster attribute value.
std::unique_ptr< te::gm::Envelope > getExtent(std::size_t i)
It computes the bounding rectangle for a spatial property of the dataset.
int m_wkbArraySize
Definition: DataSet.h:173
OGRFeature * m_currentFeature
Definition: DataSet.h:169
bool isAfterEnd() const
It tells if the dataset internal pointer is on the sentinel position after the last element of the co...
bool isConnected() const
It returns true if the dataset is connected and false if it is disconnected. A dataset can be connect...
Definition: DataSet.h:91
bool isNull(std::size_t i) const
It checks if the attribute value is NULL.
bool isBeforeBegin() const
It tells if the dataset internal pointer is in a position before the first element of the collection ...
bool isPositionValid() const
It tells if the dataset internal pointer is on a valid position.
bool getBool(std::size_t i) const
Method for retrieving a boolean attribute value.
unsigned char * m_wkbArray
Definition: DataSet.h:172
DataSet(GDALDataset *dsrc, OGRLayer *layer, bool takeOGRDataSetOwnership, bool takeOGRLayerOwnership)
Constructor.
te::common::TraverseType getTraverseType() const
It returns the traverse type associated to the dataset.
Definition: DataSet.h:77
unsigned char getUChar(std::size_t i) const
Method for retrieving an unsigned character attribute value (1 byte long).
bool isAtEnd() const
It tells if the dataset internal pointer is on the last element of the collection.
std::unique_ptr< te::gm::Geometry > getGeometry(std::size_t i) const
Method for retrieving a geometric attribute value.
bool movePrevious()
It moves the internal pointer to the previous item of the collection.
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:54
@ FORWARDONLY
Definition: Enums.h:55
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:41
@ RAccess
Definition: Enums.h:43
TerraLib.
#define TEOGREXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:79
Proxy configuration file for TerraView (see terraview_config.h).