27 #include "../../core/filesystem/FileSystem.h" 28 #include "../../core/logger/Logger.h" 29 #include "../../core/translator/Translator.h" 30 #include "../../common/Exception.h" 31 #include "../../dataaccess/datasource/DataSourceFactory.h" 32 #include "../../dataaccess/datasource/DataSourceInfoManager.h" 33 #include "../../dataaccess/datasource/DataSourceManager.h" 34 #include "../../dataaccess/utils/Utils.h" 35 #include "../../geometry/GeometryProperty.h" 36 #include "../../maptools/DataSetLayer.h" 37 #include "../../maptools/RasterContrast.h" 38 #include "../../maptools/Utils.h" 39 #include "../../mnt/core/Shadow.h" 40 #include "../../qt/widgets/canvas/Canvas.h" 41 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h" 42 #include "../../qt/widgets/progress/ProgressViewerDialog.h" 43 #include "../../qt/widgets/rp/RasterNavigatorWidget.h" 44 #include "../../qt/widgets/rp/Utils.h" 45 #include "../../qt/widgets/srs/SRSManagerDialog.h" 46 #include "../../qt/widgets/tools/ExtentAcquire.h" 47 #include "../../qt/widgets/Utils.h" 48 #include "../../qt/widgets/utils/FileDialog.h" 49 #include "../../raster.h" 50 #include "../../raster/Interpolator.h" 51 #include "../../raster/RasterFactory.h" 52 #include "../../rp/Contrast.h" 53 #include "../../se/CoverageStyle.h" 54 #include "../../se/Utils.h" 55 #include "../../srs/SpatialReferenceSystemManager.h" 57 #include "../core/CalculateGrid.h" 58 #include "../core/SplineGrass.h" 59 #include "../core/SplineGrassMitasova.h" 60 #include "../core/TINCalculateGrid.h" 61 #include "../core/Utils.h" 65 #include "ui_ImageGenerateDialogForm.h" 68 #include <QFileDialog> 69 #include <QMessageBox> 72 #include <boost/algorithm/string.hpp> 73 #include <boost/filesystem.hpp> 74 #include <boost/lexical_cast.hpp> 75 #include <boost/uuid/random_generator.hpp> 76 #include <boost/uuid/uuid_io.hpp> 81 m_ui(new
Ui::ImageGenerationDialogForm),
83 m_inputLayer(nullptr),
84 m_mapDisplay(nullptr),
86 m_outputLayer(nullptr),
87 m_inDataSource(nullptr)
96 connect(
m_ui->m_dummycheckBox, SIGNAL(toggled(
bool)),
m_ui->m_dummylineEdit, SLOT(setEnabled(
bool)));
100 m_ui->m_dimLLineEdit->setValidator(
new QIntValidator(
this));
101 m_ui->m_dimCLineEdit->setValidator(
new QIntValidator(
this));
102 m_ui->m_resXLineEdit->setValidator(
new QDoubleValidator(
this));
103 m_ui->m_resYLineEdit->setValidator(
new QDoubleValidator(
this));
108 m_ui->m_targetDatasourceToolButton->setIcon(QIcon::fromTheme(
"datasource"));
115 m_ui->m_HelpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
116 m_ui->m_HelpPushButton->setPageReference(
"plugins/mnt/DTM_Shadow.html");
118 m_ui->m_srsToolButton->setIcon(QIcon::fromTheme(
"srs"));
130 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
136 if (it->get()->isValid())
138 std::unique_ptr<te::da::DataSetType> dsType(it->get()->getSchema());
145 std::unique_ptr<te::da::DataSet> inds(it->get()->getData());
147 if (rasterProp->getBandProperties().size() == 1)
148 m_ui->m_layersComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
165 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
166 std::string layerID =
m_ui->m_layersComboBox->itemData(index, Qt::UserRole).toString().toUtf8().data();
170 if(layerID == it->get()->getId())
176 std::unique_ptr<te::da::DataSetType> dsType (
m_inputLayer->getSchema());
177 std::unique_ptr<te::da::DataSet> inds =
m_inputLayer->getData();
179 if (dsType->hasRaster())
182 std::unique_ptr<te::rst::Raster> inputRst(inds->getRaster(rpos).release());
185 m_ui->m_dummycheckBox->setVisible(
true);
186 m_ui->m_dummylineEdit->setVisible(
true);
187 m_ui->m_dummylineEdit->setText(QString::number(inputRst->getBand(0)->getProperty()->m_noDataValue));
188 m_ui->m_vminRasterLineEdit->setText(QString::number(
m_min));
189 m_ui->m_vmaxRasterLineEdit->setText(QString::number(
m_max));
190 m_ui->m_vminLineEdit->setText(QString::number(
m_min));
191 m_ui->m_vmaxLineEdit->setText(QString::number(
m_max));
192 m_ui->m_resXLineEdit->setText(QString::number(inputRst->getResolutionX()));
193 m_ui->m_resYLineEdit->setText(QString::number(inputRst->getResolutionY()));
196 m_dummy = inputRst->getBand(0)->getProperty()->m_noDataValue;
209 if (search.exec() != QDialog::Accepted)
219 double resX =
m_ui->m_resXLineEdit->text().toDouble();
225 QMessageBox::warning(
this, tr(
"Image Generation"), tr(
"Invalid envelope!"));
231 m_ui->m_dimCLineEdit->setText(QString::number(maxCols));
236 double resY =
m_ui->m_resYLineEdit->text().toDouble();
242 QMessageBox::warning(
this, tr(
"Image Generation"), tr(
"Invalid envelope!"));
248 m_ui->m_dimLLineEdit->setText(QString::number(maxRows));
253 m_ui->m_newLayerNameLineEdit->clear();
254 m_ui->m_repositoryLineEdit->clear();
256 QString fileName = QFileDialog::getSaveFileName(
this, tr(
"Select the output file name"),
260 if (fileName.isEmpty())
267 catch (
const std::exception& e)
269 QMessageBox::information(
this, tr(
"Image Generation"), e.what());
273 boost::filesystem::path outfile(fileName.toUtf8().data());
274 std::string aux = outfile.leaf().string();
275 m_ui->m_newLayerNameLineEdit->setText(aux.c_str());
276 aux = outfile.string();
277 m_ui->m_repositoryLineEdit->setText(aux.c_str());
279 m_ui->m_newLayerNameLineEdit->setEnabled(
false);
284 m_ui->m_newLayerNameLineEdit->clear();
285 m_ui->m_newLayerNameLineEdit->setEnabled(
true);
289 std::list<te::da::DataSourceInfoPtr> dsPtrList = dlg.
getSelecteds();
291 if (dsPtrList.empty())
294 std::list<te::da::DataSourceInfoPtr>::iterator it = dsPtrList.begin();
296 m_ui->m_repositoryLineEdit->setText(QString(it->get()->getTitle().c_str()));
305 QApplication::setOverrideCursor(Qt::WaitCursor);
315 if (!inDataSource.get())
318 std::map<std::string, std::string> outdsinfo;
322 if (
m_ui->m_repositoryLineEdit->text().isEmpty())
325 if (
m_ui->m_newLayerNameLineEdit->text().isEmpty())
328 std::string outputdataset =
m_ui->m_newLayerNameLineEdit->text().toUtf8().data();
329 boost::filesystem::path uri(
m_ui->m_repositoryLineEdit->text().toUtf8().data());
334 std::size_t idx = outputdataset.find(
".");
335 if (idx != std::string::npos)
336 outputdataset = outputdataset.substr(0, idx);
338 outdsinfo[
"URI"] = uri.string();
341 if (
m_ui->m_dummycheckBox->isChecked())
343 m_dummy =
m_ui->m_dummylineEdit->text().toDouble(&ok);
348 double resxo =
m_ui->m_resXLineEdit->text().toDouble(&ok);
351 double resyo =
m_ui->m_resYLineEdit->text().toDouble(&ok);
356 somb->
setInput(inDataSource, inDsetName, inDataSource->getDataSetType(inDsetName));
360 somb->
setParams(
m_ui->m_azimuthLineEdit->text().toDouble(),
m_ui->m_elevationLineEdit->text().toDouble(),
m_ui->m_reliefLineEdit->text().toDouble(),
361 m_ui->m_vminRasterLineEdit->text().toDouble(),
m_ui->m_vmaxRasterLineEdit->text().toDouble() - 1,
m_ui->m_vminLineEdit->text().toDouble(),
m_ui->m_vmaxLineEdit->text().toDouble() - 1,
362 m_dummy,
m_ui->m_dimCLineEdit->text().toUInt(),
m_ui->m_dimLLineEdit->text().toUInt(), resxo, resyo);
376 for (
size_t b = 0;
b < rst->getNumberOfBands(); ++
b)
380 double gain, offset1, offset2;
383 contrast->setValues(gain, offset1, offset2, min, max,
b);
391 QApplication::restoreOverrideCursor();
392 QMessageBox::information(
this,
"Shadow Image Generation", e.
what());
396 QApplication::restoreOverrideCursor();
421 srsDialog.setWindowTitle(tr(
"Choose the SRS"));
423 if (srsDialog.exec() == QDialog::Rejected)
436 m_ui->m_resSRIDLabel->setText(
"No SRS defined");
442 m_ui->m_resSRIDLabel->setText(name.c_str());
444 m_ui->m_resSRIDLabel->setText(QString(
"%1").arg(newSRID));
476 if (raster->getNumberOfBands() > 1)
481 std::map<std::string, std::string> rinfo;
482 rinfo[
"MEM_RASTER_NROWS"] = boost::lexical_cast<std::string>(raster->getNumberOfRows());
483 rinfo[
"MEM_RASTER_NCOLS"] = boost::lexical_cast<std::string>(raster->getNumberOfColumns());
484 rinfo[
"MEM_RASTER_DATATYPE"] = boost::lexical_cast<std::string>(raster->getBandDataType(0));
485 rinfo[
"MEM_RASTER_NBANDS"] = boost::lexical_cast<std::string>(raster->getNumberOfBands());
488 if (
m_ui->m_dummycheckBox->isChecked())
490 m_dummy =
m_ui->m_dummylineEdit->text().toDouble(&ok);
495 double resxo =
m_ui->m_resXLineEdit->text().toDouble(&ok);
498 double resyo =
m_ui->m_resYLineEdit->text().toDouble(&ok);
507 somb->
setParams(
m_ui->m_azimuthLineEdit->text().toDouble(),
m_ui->m_elevationLineEdit->text().toDouble(),
m_ui->m_reliefLineEdit->text().toDouble(),
508 m_ui->m_vminRasterLineEdit->text().toDouble(),
m_ui->m_vmaxRasterLineEdit->text().toDouble() - 1,
m_ui->m_vminLineEdit->text().toDouble(),
m_ui->m_vmaxLineEdit->text().toDouble() - 1,
509 m_dummy, raster->getNumberOfColumns(), raster->getNumberOfRows(), resxo, resyo);
519 QApplication::setOverrideCursor(Qt::WaitCursor);
527 double gain, offset1, offset2;
530 contrast.
setValues(gain, offset1, offset2, min, max, 0);
542 QApplication::restoreOverrideCursor();
553 draft->fill(Qt::transparent);
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
TEDATAACCESSEXPORT te::rst::RasterProperty * GetFirstRasterProperty(const DataSetType *dt)
void drawPreview(std::unique_ptr< te::rst::Raster > &raster)
void setValues(const double &gain, const double &offset1, const double &offset2, const double &min, const double &max, const std::size_t &band)
It set the transformation values for contranst of one band.
static bool exists(const std::string &path)
Checks if a given path in UTF-8 exists.
The Style defines the styling that is to be applied to a geographic dataset (vector geometries or cov...
boost::shared_ptr< DataSource > DataSourcePtr
virtual const char * what() const
It outputs the exception message.
void onResXLineEditEditingFinished()
The CoverageStyle defines the styling that is to be applied to a subset of Coverage data...
TESEEXPORT Style * CreateCoverageStyle(const std::vector< te::rst::BandProperty * > &properties)
Try creates an appropriate coverage style based on given band properties.
void onPreviewPushButtonClicked()
void onOkPushButtonClicked()
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).
std::list< te::map::AbstractLayerPtr > m_layers
List of layers.
double m_urx
Upper right corner x-coordinate.
ImageGenerationDialog(QWidget *parent=0, Qt::WindowFlags f=0)
void onlayerSearchToolButtonClicked()
void onInputComboBoxChanged(int index)
void setInput(te::da::DataSourcePtr inDsrc, std::string inDsetName, const te::da::DataSetTypePtr &inDsetType)
#define TE_OPAQUE
For an RGBA color this is the value of the alpha-channel for totally opaque.
void onTargetDatasourceToolButtonPressed()
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
te::map::AbstractLayerPtr getLayer()
void onSrsToolButtonClicked()
void setMapDisplay(te::qt::widgets::MapDisplay *mapDisplay)
TEMAPEXPORT void DrawRaster(te::da::DataSetType *type, te::da::DataSourcePtr ds, Canvas *canvas, const te::gm::Envelope &bbox, int bboxSRID, const te::gm::Envelope &visibleArea, int srid, te::se::CoverageStyle *style, te::map::RasterContrast *rc, const double &scale, bool *cancel)
double m_llx
Lower left corner x-coordinate.
static bool remove(const std::string &path)
Removes a file or directory from a given path in UTF-8.
void setSRID(int newSRID)
static SpatialReferenceSystemManager & getInstance()
It returns a reference to the singleton instance.
An Envelope defines a 2D rectangular region.
std::unique_ptr< Ui::ImageGenerationDialogForm > m_ui
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
Set the layer that can be used.
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
An abstract class for raster data strucutures.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
virtual int getSRID() const
It return the Spatial Reference System used by the Map Display.
te::map::AbstractLayerPtr m_outputLayer
Generated Layer.
virtual const te::gm::Envelope & getExtent() const
It returns the world extent showned by the MapDisplay.
A dialog Shadow image generation.
void setParams(double azimuth, double elevation, double relief, double dummy, double vmin, double vmax, double minval, double maxval, unsigned int outputWidth, unsigned int outputHeight, double resxo, double resyo)
te::qt::widgets::Canvas * m_canvas
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
void onMapDisplayExtentChanged()
double m_lly
Lower left corner y-coordinate.
te::rst::Raster * GenerateImage(te::rst::Raster *raster)
void setOutput(std::map< std::string, std::string > &dsinfo, std::string outRstDSType)
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.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
std::unique_ptr< te::rst::Raster > m_previewRaster
void onResYLineEditEditingFinished()
te::qt::widgets::MapDisplay * m_mapDisplay
A layer with reference to a dataset.
void onCancelPushButtonClicked()
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
TEMNTEXPORT te::mnt::mntType getMNTType(const te::da::DataSetType *dt)
TEMNTEXPORT void getMinMax(te::rst::Raster *inputRst, double &vmin, double &vmax)
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
virtual const std::string & getDataSourceId() const
bool isValid() const
It tells if the rectangle is valid or not.
te::da::DataSourceInfoPtr m_outputDatasource
DataSource information.
void onTargetFileToolButtonPressed()
te::map::AbstractLayerPtr m_inputLayer
Input layer.