27 #include "../../core/filesystem/FileSystem.h" 28 #include "../../core/translator/Translator.h" 29 #include "../../common/progress/ProgressManager.h" 30 #include "../../dataaccess/datasource/DataSourceFactory.h" 31 #include "../../dataaccess/datasource/DataSourceInfoManager.h" 32 #include "../../dataaccess/datasource/DataSourceManager.h" 33 #include "../../dataaccess/utils/Utils.h" 34 #include "../../geometry/GeometryProperty.h" 35 #include "../../maptools/DataSetLayer.h" 36 #include "../../maptools/RasterContrast.h" 37 #include "../../maptools/Utils.h" 38 #include "../../mnt/core/Slope.h" 39 #include "../../mnt/core/Utils.h" 40 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h" 41 #include "../../qt/widgets/layer/utils/DataSet2Layer.h" 42 #include "../../qt/widgets/progress/ProgressViewerDialog.h" 43 #include "../../qt/widgets/rp/Utils.h" 44 #include "../../qt/widgets/srs/SRSManagerDialog.h" 45 #include "../../qt/widgets/Utils.h" 46 #include "../../qt/widgets/utils/FileDialog.h" 47 #include "../../raster.h" 48 #include "../../rp/Contrast.h" 49 #include "../../srs/SpatialReferenceSystemManager.h" 53 #include "ui_SlopeDialogForm.h" 56 #include <QFileDialog> 57 #include <QMessageBox> 60 #include <boost/algorithm/string.hpp> 61 #include <boost/filesystem.hpp> 62 #include <boost/lexical_cast.hpp> 63 #include <boost/uuid/random_generator.hpp> 64 #include <boost/uuid/uuid_io.hpp> 68 m_ui(new
Ui::SlopeDialogForm),
74 m_ui->m_dimLLineEdit->setValidator(
new QIntValidator(
this));
75 m_ui->m_dimCLineEdit->setValidator(
new QIntValidator(
this));
76 m_ui->m_resXLineEdit->setValidator(
new QDoubleValidator(
this));
77 m_ui->m_resYLineEdit->setValidator(
new QDoubleValidator(
this));
83 connect(
m_ui->m_dummycheckBox, SIGNAL(toggled(
bool)),
m_ui->m_dummylineEdit, SLOT(setEnabled(
bool)));
85 connect(
m_ui->m_sloperadioButton, SIGNAL(toggled(
bool)),
this, SLOT(
onSlopeToggled()));
93 m_ui->m_targetDatasourceToolButton->setIcon(QIcon::fromTheme(
"datasource"));
100 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
101 m_ui->m_helpPushButton->setPageReference(
"plugins/mnt/DTM_Slope.html");
103 m_ui->m_srsToolButton->setIcon(QIcon::fromTheme(
"srs"));
116 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
122 if (it->get()->isValid())
124 std::unique_ptr<te::da::DataSetType> dsType(it->get()->getSchema());
129 if (type ==
TIN || type ==
GRID)
130 m_ui->m_layersComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
142 QList<mntType> types;
146 if (search.exec() != QDialog::Accepted)
151 int index =
m_ui->m_layersComboBox->findText(search.
getLayer().get()->getTitle().c_str());
152 m_ui->m_layersComboBox->setCurrentIndex(index);
158 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
159 std::string layerID =
m_ui->m_layersComboBox->itemData(index, Qt::UserRole).toString().toUtf8().data();
162 if(layerID == it->get()->getId())
168 std::unique_ptr<te::da::DataSetType> dsType =
m_inputLayer->getSchema();
169 if (dsType->hasRaster())
172 m_ui->m_resXLineEdit->setText(QString::number(in_raster->getResolutionX()));
173 m_ui->m_resYLineEdit->setText(QString::number(in_raster->getResolutionY()));
174 m_ui->m_dimCLineEdit->setText(QString::number(in_raster->getNumberOfColumns()));
175 m_ui->m_dimLLineEdit->setText(QString::number(in_raster->getNumberOfRows()));
176 m_ui->m_resXLineEdit->setEnabled(
false);
177 m_ui->m_resYLineEdit->setEnabled(
false);
178 m_ui->m_dimCLineEdit->setEnabled(
false);
179 m_ui->m_dimLLineEdit->setEnabled(
false);
180 m_ui->m_dummycheckBox->setVisible(
true);
181 m_ui->m_dummylineEdit->setVisible(
true);
182 m_ui->m_dummylineEdit->setText(QString::number(in_raster->getBand(0)->getProperty()->m_noDataValue));
187 m_ui->m_dummycheckBox->setVisible(
false);
188 m_ui->m_dummylineEdit->setVisible(
false);
189 m_ui->m_resXLineEdit->setEnabled(
true);
190 m_ui->m_resYLineEdit->setEnabled(
true);
191 m_ui->m_dimCLineEdit->setEnabled(
true);
192 m_ui->m_dimLLineEdit->setEnabled(
true);
208 m_ui->m_degreesradioButton->setEnabled(
true);
209 m_ui->m_percentradioButton->setEnabled(
true);
214 m_ui->m_degreesradioButton->setDisabled(
true);
215 m_ui->m_percentradioButton->setDisabled(
true);
221 double resX =
m_ui->m_resXLineEdit->text().toDouble();
227 QMessageBox::warning(
this, tr(
"Slope"), tr(
"Invalid envelope!"));
233 m_ui->m_dimCLineEdit->setText(QString::number(maxCols));
238 double resY =
m_ui->m_resYLineEdit->text().toDouble();
244 QMessageBox::warning(
this, tr(
"Slope"), tr(
"Invalid envelope!"));
250 m_ui->m_dimLLineEdit->setText(QString::number(maxRows));
255 int cols =
m_ui->m_dimCLineEdit->text().toInt();
261 QMessageBox::warning(
this, tr(
"Slope"), tr(
"Invalid envelope!"));
267 m_ui->m_resXLineEdit->setText(QString::number(resX));
272 int rows =
m_ui->m_dimLLineEdit->text().toInt();
278 QMessageBox::warning(
this, tr(
"Slope"), tr(
"Invalid envelope!"));
284 m_ui->m_resYLineEdit->setText(QString::number(resY));
289 m_ui->m_newLayerNameLineEdit->clear();
290 m_ui->m_repositoryLineEdit->clear();
297 catch (
const std::exception& e)
299 QMessageBox::information(
this, tr(
"Slope"), e.what());
303 m_ui->m_repositoryLineEdit->setText(fileDialog.
getPath().c_str());
304 m_ui->m_newLayerNameLineEdit->setText(fileDialog.
getFileName().c_str());
306 m_ui->m_newLayerNameLineEdit->setEnabled(
false);
311 m_ui->m_newLayerNameLineEdit->clear();
312 m_ui->m_newLayerNameLineEdit->setEnabled(
true);
316 std::list<te::da::DataSourceInfoPtr> dsPtrList = dlg.
getSelecteds();
318 if (dsPtrList.empty())
321 std::list<te::da::DataSourceInfoPtr>::iterator it = dsPtrList.begin();
323 m_ui->m_repositoryLineEdit->setText(QString(it->get()->getTitle().c_str()));
337 QApplication::setOverrideCursor(Qt::WaitCursor);
346 if (!inDataSource.get())
350 std::unique_ptr<te::da::DataSetType> inDsetType(inDataSource->getDataSetType(inDsetName));
353 if (
m_ui->m_repositoryLineEdit->text().isEmpty())
356 if (
m_ui->m_newLayerNameLineEdit->text().isEmpty())
359 std::string outputdataset =
m_ui->m_newLayerNameLineEdit->text().toUtf8().data();
361 std::map<std::string, std::string> outdsinfo;
362 boost::filesystem::path uri(
m_ui->m_repositoryLineEdit->text().toUtf8().data());
367 std::size_t idx = outputdataset.find(
".");
368 if (idx != std::string::npos)
369 outputdataset = outputdataset.substr(0, idx);
371 outdsinfo[
"URI"] = uri.string();
374 decl->
setInput(inDataSource, inDsetName, inDataSource->getDataSetType(inDsetName));
377 if (
m_ui->m_aspectradioButton->isChecked())
381 if (
m_ui->m_degreesradioButton->isChecked())
386 double dummy =
m_ui->m_dummylineEdit->text().toDouble();
388 decl->
setParams(
m_ui->m_resXLineEdit->text().toDouble(),
m_ui->m_resYLineEdit->text().toDouble(), grad, slope,
m_outsrid, dummy);
403 for (
size_t b = 0;
b < rst->getNumberOfBands(); ++
b)
407 double gain, offset1, offset2;
410 contrast->setValues(gain, offset1, offset2, min, max,
b);
416 QApplication::restoreOverrideCursor();
417 QMessageBox::information(
this, tr(
"Slope "), e.
what());
421 QApplication::restoreOverrideCursor();
433 srsDialog.setWindowTitle(tr(
"Choose the SRS"));
435 if (srsDialog.exec() == QDialog::Rejected)
447 m_ui->m_resSRIDLabel->setText(
"No SRS defined");
453 m_ui->m_resSRIDLabel->setText(name.c_str());
455 m_ui->m_resSRIDLabel->setText(QString(
"%1").arg(newSRID));
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
void setOutput(std::map< std::string, std::string > &dsinfo)
static bool exists(const std::string &path)
Checks if a given path in UTF-8 exists.
void onTargetDatasourceToolButtonPressed()
boost::shared_ptr< DataSource > DataSourcePtr
virtual const char * what() const
It outputs the exception message.
mntType m_inputType
Input type (TIN, GRID)
void onInputLayerToolButtonClicked()
std::unique_ptr< Ui::SlopeDialogForm > m_ui
te::map::AbstractLayerPtr getLayer()
static bool getGainAndOffset(const InputParameters::ContrastType &type, const double &inRangeMin, const double &inRangeMax, const double &outRangeMin, const double &outRangeMax, double &gain, double &offset1, double &offset2)
Returns gain and offset values for contrast types (when applicable).
double m_urx
Upper right corner x-coordinate.
void onCancelPushButtonClicked()
void onTargetFileToolButtonPressed()
SlopeDialog(QWidget *parent=0, Qt::WindowFlags f=0)
#define TE_TR(message)
It marks a string in order to get translated.
A dialog Slope Grid generation.
void onInputComboBoxChanged(int index)
double m_llx
Lower left corner x-coordinate.
te::da::DataSourceInfoPtr m_outputDatasource
DataSource information.
static SpatialReferenceSystemManager & getInstance()
It returns a reference to the singleton instance.
An Envelope defines a 2D rectangular region.
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
te::map::AbstractLayerPtr m_outputLayer
Generated Layer.
te::map::AbstractLayerPtr getLayer()
void onResXLineEditEditingFinished()
void setInput(te::da::DataSourcePtr inDsrc, std::string inDsetName, std::unique_ptr< te::da::DataSetType > inDsetType)
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
double m_lly
Lower left corner y-coordinate.
void onResYLineEditEditingFinished()
void onOkPushButtonClicked()
This class contains the parameters needed to apply dynamic contrast over a raster.
TEMAPEXPORT te::rst::Raster * GetRaster(AbstractLayer *layer)
It gets the raster referenced by the given data set layer.
const std::string & getDataSetName() const
double m_ury
Upper right corner y-coordinate.
void setActive(const QList< mntType > &types)
void setParams(double resx, double resy, char gradtype, char slopetype, int srid, double dummy)
void onDimLLineEditEditingFinished()
A layer with reference to a dataset.
void setSRID(int newSRID)
TEMNTEXPORT te::mnt::mntType getMNTType(const te::da::DataSetType *dt)
te::map::AbstractLayerPtr m_inputLayer
Input layer.
void onDimCLineEditEditingFinished()
TEMNTEXPORT void getMinMax(te::rst::Raster *inputRst, double &vmin, double &vmax)
void onSrsToolButtonClicked()
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
virtual const std::string & getDataSourceId() const
bool isValid() const
It tells if the rectangle is valid or not.
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
Set the layer that can be used.
std::list< te::map::AbstractLayerPtr > m_layers
List of layers.