RasterPropertiesInfo.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/qt/plugins/datasource/pgis/RasterPropertiesInfo.cpp
22 
23 \brief A QtPropertyBrowser component to show raster properties.
24 */
25 
26 #include "../../../../datatype/Utils.h"
27 #include "../../../../raster/RasterSummary.h"
28 #include "../../../../raster/RasterSummaryManager.h"
29 #include "../../../../raster/Band.h"
30 #include "../../../../raster/BandProperty.h"
31 #include "../../../../raster/Utils.h"
32 #include "../../../../srs/SpatialReferenceSystemManager.h"
33 #include "../../../../qt/widgets/propertybrowser/AbstractPropertyManager.h"
34 
35 #include "RasterPropertiesInfo.h"
36 
38  te::qt::widgets::AbstractPropertyItem(pb)
39 {
40  QtProperty* rasterInfo_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Raster properties"));
41 
42  addProperty(rasterInfo_prop, tr("Raster properties"), QColor(255, 255, 175));
43 
44  //SRID Property
45  QtProperty* srid_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("SRID"));
46  rasterInfo_prop->addSubProperty(srid_prop);
47  srid_prop->setPropertyName("srid");
48  srid_prop->setEnabled(false);
49 
50  //SRID setting value
51  QString sridStr = QString::number(raster->getSRID());
52  sridStr += QObject::tr(" - ");
53  sridStr += QString(te::srs::SpatialReferenceSystemManager::getInstance().getName(raster->getSRID()).c_str());
54  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(srid_prop, sridStr);
55 
56  //add properties
57  QtProperty* nLinesProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Lines"));
58  QtProperty* nColumnsProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Columns"));
59  QtProperty* nBandsProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Bands"));
60  QtProperty* nResXProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Resolution X"));
61  QtProperty* nResYProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Resolution Y"));
62  QtProperty* nAccessProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Access Policy"));
63  QtProperty* nMultiResProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Multi Resolution Levels"));
64 
65  //add properties to parent property
66  rasterInfo_prop->addSubProperty(nLinesProp);
67  rasterInfo_prop->addSubProperty(nColumnsProp);
68  rasterInfo_prop->addSubProperty(nBandsProp);
69  rasterInfo_prop->addSubProperty(nResXProp);
70  rasterInfo_prop->addSubProperty(nResYProp);
71  rasterInfo_prop->addSubProperty(nAccessProp);
72  rasterInfo_prop->addSubProperty(nMultiResProp);
73 
74  //set the property state
75  nLinesProp->setEnabled(false);
76  nColumnsProp->setEnabled(false);
77  nBandsProp->setEnabled(false);
78  nResXProp->setEnabled(false);
79  nResYProp->setEnabled(false);
80  nAccessProp->setEnabled(false);
81  nMultiResProp->setEnabled(false);
82 
84 
85  if (unitPtr.get())
86  {
87  if (unitPtr->getId() == te::common::UOM_Degree)
88  {
89  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setDecimals(nResXProp, 6);
90  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setDecimals(nResYProp, 6);
91  }
92  else if (unitPtr->getId() == te::common::UOM_Metre)
93  {
94  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setDecimals(nResXProp, 2);
95  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setDecimals(nResYProp, 2);
96  }
97  }
98 
99  //set properties values
100  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nLinesProp, (int)raster->getNumberOfRows());
101  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nColumnsProp, (int)raster->getNumberOfColumns());
102  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nBandsProp, (int)raster->getNumberOfBands());
103  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setValue(nResXProp, raster->getResolutionX());
104  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setValue(nResYProp, raster->getResolutionY());
105  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nMultiResProp, (int)raster->getMultiResLevelsCount());
106 
107 
108  if (raster->getAccessPolicy() == te::common::NoAccess)
109  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("No Access"));
110  else if (raster->getAccessPolicy() == te::common::RAccess)
111  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Read Only Access"));
112  else if (raster->getAccessPolicy() == te::common::WAccess)
113  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Write Only Access"));
114  else if (raster->getAccessPolicy() == te::common::RWAccess)
115  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Read and Write Access"));
116 
117  //set information for each band
118  for (std::size_t t = 0; t < raster->getNumberOfBands(); ++t)
119  {
120  //get band property
121  te::rst::Band* band = raster->getBand(t);
122 
123  //create band top property
124  QtProperty* bandProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Band ") + QString::number(t));
125 
126  //create band properties
127  QtProperty* descriptionProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Description"));
128  QtProperty* dataTypeProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Data Type"));
129  QtProperty* dummyValueProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Dummy Value"));
130  QtProperty* colorInterpProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Color Interpretation"));
131  QtProperty* palleteInterpProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Pallete Interpretation"));
132 
133  //add band properties to band top property
134  bandProp->addSubProperty(descriptionProp);
135  bandProp->addSubProperty(dataTypeProp);
136  bandProp->addSubProperty(dummyValueProp);
137  bandProp->addSubProperty(colorInterpProp);
138  bandProp->addSubProperty(palleteInterpProp);
139 
140  //set the band properties state
141  descriptionProp->setEnabled(false);
142  dataTypeProp->setEnabled(false);
143  dummyValueProp->setEnabled(false);
144  colorInterpProp->setEnabled(false);
145  palleteInterpProp->setEnabled(false);
146 
147  //set the band properties values
148  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(descriptionProp, band->getProperty()->m_description.c_str());
149  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(dataTypeProp, te::dt::ConvertDataTypeToString(band->getProperty()->getType()).c_str());
150  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setValue(dummyValueProp, band->getProperty()->m_noDataValue);
153 
154  //add block information
155  QtProperty* blockProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Block properties"));
156 
157  QtProperty* nBlockXProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of blocks in X"));
158  QtProperty* nBlockYProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of blocks in Y"));
159  QtProperty* blockWProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Block Width (pixels)"));
160  QtProperty* blockHProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Block Height (pixels)"));
161 
162  blockProp->addSubProperty(nBlockXProp);
163  blockProp->addSubProperty(nBlockYProp);
164  blockProp->addSubProperty(blockWProp);
165  blockProp->addSubProperty(blockHProp);
166 
167  nBlockXProp->setEnabled(false);
168  nBlockYProp->setEnabled(false);
169  blockWProp->setEnabled(false);
170  blockHProp->setEnabled(false);
171 
172  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nBlockXProp, band->getProperty()->m_nblocksx);
173  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nBlockYProp, band->getProperty()->m_nblocksy);
174  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(blockWProp, band->getProperty()->m_blkw);
175  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(blockHProp, band->getProperty()->m_blkh);
176 
177  bandProp->addSubProperty(blockProp);
178 
179  //get category names
180  if (!band->getProperty()->m_categoryNames.empty())
181  {
182  QtProperty* categProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Name of categories"));
183 
184  //create a property for each category name
185  for (std::size_t c = 0; c < band->getProperty()->m_categoryNames.size(); ++c)
186  {
187  QtProperty* cNameProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Category ") + QString::number(c));
188 
189  categProp->addSubProperty(cNameProp);
190 
191  cNameProp->setEnabled(false);
192 
193  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(cNameProp, band->getProperty()->m_categoryNames[c].c_str());
194  }
195 
196  bandProp->addSubProperty(categProp);
197  }
198 
199  //get metadata
200  if (!band->getProperty()->m_metadata.empty())
201  {
202  QtProperty* metaProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Metadata"));
203 
204  //create a property for each metadata name
205  for (std::size_t c = 0; c < band->getProperty()->m_metadata.size(); ++c)
206  {
207  QtProperty* metaItemProp =
208  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(
209  QString::fromStdString(band->getProperty()->m_metadata[c].first));
210 
211  metaProp->addSubProperty(metaItemProp);
212 
213  metaItemProp->setEnabled(false);
214 
215  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(
216  metaItemProp, QString::fromStdString(
217  band->getProperty()->m_metadata[c].second));
218  }
219 
220  bandProp->addSubProperty(metaProp);
221  }
222 
223  //add band top property
224  rasterInfo_prop->addSubProperty(bandProp);
225  }
226 }
227 
229  default;
TEDATATYPEEXPORT std::string ConvertDataTypeToString(const int &dataType)
Function used to convert from a int (Data Type Enum) to a string.
unsigned int band
virtual unsigned int getMultiResLevelsCount() const =0
Returns the current number of multi-resolution pyramid levels.
std::vector< std::string > m_categoryNames
Set of categoric names for the values contained in a dimension.
Definition: BandProperty.h:139
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
int m_nblocksx
The number of blocks in x.
Definition: BandProperty.h:145
int m_nblocksy
The number of blocks in y.
Definition: BandProperty.h:146
double m_noDataValue
Value to indicate elements where there is no data, default is std::numeric_limits<double>::max().
Definition: BandProperty.h:136
TERASTEREXPORT std::string ConvertColorInterpTypeToString(const te::rst::ColorInterp &ci)
Function used to convert from a Color Interp Enum to a string.
te::common::AccessPolicy getAccessPolicy() const
Returns the raster access policy.
RasterPropertiesInfo(QtTreePropertyBrowser *pb, te::rst::Raster *raster)
Constructor.
std::vector< std::pair< std::string, std::string > > m_metadata
A list of metadata where each element consists of a (key, value).
Definition: BandProperty.h:135
static AbstractPropertyManager & getInstance()
It returns a reference to the singleton instance.
An abstract class for raster data strucutures.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
BandProperty * getProperty()
Returns the band property.
URI C++ Library.
Definition: Attributes.h:37
int m_blkw
Block width (pixels).
Definition: BandProperty.h:143
double getResolutionX() const
Returns the raster horizontal (x-axis) resolution.
A raster band description.
virtual const Band * getBand(std::size_t i) const =0
Returns the raster i-th band.
void addProperty(QtProperty *property, const QString &id, QColor c)
boost::shared_ptr< UnitOfMeasure > UnitOfMeasurePtr
int getSRID() const
Returns the raster spatial reference system identifier.
TERASTEREXPORT std::string ConvertPalleteInterpTypeToString(const te::rst::PaletteInterpretation &pi)
Function used to convert from a Pallete Interp Enum to a string.
double getResolutionY() const
Returns the raster vertical (y-axis) resolution.
int getType() const
It returns the data type of the elements in the band.
Definition: BandProperty.h:113
std::string m_description
A description.
Definition: BandProperty.h:134
int m_blkh
Block height (pixels).
Definition: BandProperty.h:144
ColorInterp m_colorInterp
The color interpretation.
Definition: BandProperty.h:140
PaletteInterpretation m_paletteInterp
Pallete interpretation.
Definition: BandProperty.h:141