27 #include "../../common/Logger.h"
28 #include "../../common/progress/ProgressManager.h"
29 #include "../../common/Translator.h"
30 #include "../../common/STLUtils.h"
31 #include "../../dataaccess/datasource/DataSource.h"
32 #include "../../dataaccess/utils/Utils.h"
33 #include "../../maptools/DataSetLayer.h"
34 #include "../../qt/widgets/progress/ProgressViewerDialog.h"
35 #include "../core/KernelRatioOperation.h"
36 #include "../Exception.h"
39 #include "ui_KernelRatioDialogForm.h"
42 #include <QFileDialog>
44 #include <QMessageBox>
51 #include <boost/algorithm/string.hpp>
52 #include <boost/filesystem.hpp>
53 #include <boost/uuid/random_generator.hpp>
54 #include <boost/uuid/uuid_io.hpp>
60 m_ui(new Ui::KernelRatioDialogForm)
65 m_ui->m_nColsLineEdit->setValidator(
new QIntValidator(
this));
70 m_ui->m_imgLabel->setPixmap(QIcon::fromTheme(
"sa-kernelratio-hint").pixmap(112,48));
78 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
79 m_ui->m_helpPushButton->setPageReference(
"plugins/sa/sa_kernelratio.html");
88 std::list<te::map::AbstractLayerPtr>::iterator it = layers.begin();
90 while(it != layers.end())
96 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
100 if(dsLayer && dsType->hasGeom())
102 m_ui->m_inputLayerComboBox->addItem(it->get()->getTitle().c_str(), QVariant::fromValue(l));
110 if(m_ui->m_inputLayerComboBox->count() > 0)
111 onInputLayerComboBoxActivated(0);
116 return m_outputLayer;
122 m_ui->m_functionComboBoxA->clear();
124 m_ui->m_functionComboBoxA->addItem(
"Quartic", QVariant(
te::sa::Quartic));
125 m_ui->m_functionComboBoxA->addItem(
"Normal", QVariant(
te::sa::Normal));
127 m_ui->m_functionComboBoxA->addItem(
"Uniform", QVariant(
te::sa::Uniform));
130 m_ui->m_functionComboBoxB->clear();
132 m_ui->m_functionComboBoxB->addItem(
"Quartic", QVariant(
te::sa::Quartic));
133 m_ui->m_functionComboBoxB->addItem(
"Normal", QVariant(
te::sa::Normal));
135 m_ui->m_functionComboBoxB->addItem(
"Uniform", QVariant(
te::sa::Uniform));
139 m_ui->m_estimationComboBoxA->clear();
141 m_ui->m_estimationComboBoxA->addItem(
"Density", QVariant(
te::sa::Density));
145 m_ui->m_estimationComboBoxB->clear();
147 m_ui->m_estimationComboBoxB->addItem(
"Density", QVariant(
te::sa::Density));
152 m_ui->m_combinationComboBox->clear();
154 m_ui->m_combinationComboBox->addItem(
"Ratio", QVariant(
te::sa::Ratio));
158 m_ui->m_combinationComboBox->addItem(
"Absolute Sum", QVariant(
te::sa::Abs_Sum));
164 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(index, Qt::UserRole);
168 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
170 std::vector<te::dt::Property*> propVec = dsType->getProperties();
172 m_ui->m_attrLayerComboBoxA->clear();
173 m_ui->m_attrLayerComboBoxB->clear();
175 for(std::size_t t = 0; t < propVec.size(); ++t)
177 int dataType = propVec[t]->getType();
184 m_ui->m_attrLayerComboBoxA->addItem(propVec[t]->getName().c_str(), dataType);
185 m_ui->m_attrLayerComboBoxB->addItem(propVec[t]->getName().c_str(), dataType);
193 if(m_ui->m_repositoryLineEdit->text().isEmpty())
195 QMessageBox::information(
this, tr(
"Warning"), tr(
"Define a repository for the result."));
199 if(m_ui->m_newLayerNameLineEdit->text().isEmpty())
201 QMessageBox::information(
this, tr(
"Warning"), tr(
"Define a name for the resulting layer."));
206 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(m_ui->m_inputLayerComboBox->currentIndex(), Qt::UserRole);
212 kInParamsA->m_functionType = (
te::sa::KernelFunctionType) m_ui->m_functionComboBoxA->itemData(m_ui->m_functionComboBoxA->currentIndex()).toInt();
213 kInParamsA->m_estimationType = (
te::sa::KernelEstimationType) m_ui->m_estimationComboBoxA->itemData(m_ui->m_estimationComboBoxA->currentIndex()).toInt();
214 kInParamsA->m_useAdaptativeRadius = m_ui->m_useAdaptRadiusCheckBoxA->isChecked();
216 if(!m_ui->m_useAdaptRadiusCheckBoxA->isChecked())
218 kInParamsA->m_radiusPercentValue = m_ui->m_radiusSpinBoxA->value();
221 if(m_ui->m_useAttrLayerCheckBoxA->isChecked())
223 kInParamsA->m_intensityAttrName = m_ui->m_attrLayerComboBoxA->currentText().toStdString();
226 kInParamsA->m_ds = l->getData();
227 kInParamsA->m_dsType = l->getSchema();
236 if(!m_ui->m_useAdaptRadiusCheckBoxB->isChecked())
241 if(m_ui->m_useAttrLayerCheckBoxB->isChecked())
246 kInParamsB->
m_ds = l->getData();
247 kInParamsB->
m_dsType = l->getSchema();
252 kOutParams->
m_outputPath = m_ui->m_repositoryLineEdit->text().toStdString();
256 if(m_ui->m_gridRadioButton->isChecked())
258 if(m_ui->m_nColsLineEdit->text().isEmpty())
260 QMessageBox::information(
this, tr(
"Warning"), tr(
"Define the number of columns to the output grid."));
265 kOutParams->
m_nCols = m_ui->m_nColsLineEdit->text().toInt();
267 else if(m_ui->m_attrRadioButton->isChecked())
269 if(m_ui->m_attrNameLineEdit->text().isEmpty())
271 QMessageBox::information(
this, tr(
"Warning"), tr(
"Define the attribute name to the output data."));
276 kOutParams->
m_outputAttrName = m_ui->m_attrNameLineEdit->text().toStdString();
283 QApplication::setOverrideCursor(Qt::WaitCursor);
295 catch(
const std::exception& e)
297 QMessageBox::warning(
this, tr(
"Warning"), e.what());
299 QApplication::restoreOverrideCursor();
307 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Kernel Map internal error."));
309 QApplication::restoreOverrideCursor();
316 QApplication::restoreOverrideCursor();
323 std::string dataSetName =
"";
325 if(m_ui->m_gridRadioButton->isChecked())
327 outputDataSource =
te::sa::CreateGDALDataSource(m_ui->m_repositoryLineEdit->text().toStdString(), m_ui->m_newLayerNameLineEdit->text().toStdString());
329 dataSetName = m_ui->m_newLayerNameLineEdit->text().toStdString() +
".tif";
331 else if(m_ui->m_attrRadioButton->isChecked())
333 outputDataSource =
te::sa::CreateOGRDataSource(m_ui->m_repositoryLineEdit->text().toStdString(), m_ui->m_newLayerNameLineEdit->text().toStdString());
335 dataSetName = m_ui->m_newLayerNameLineEdit->text().toStdString();
342 if(m_ui->m_gridRadioButton->isChecked())
346 else if(m_ui->m_attrRadioButton->isChecked())
356 m_ui->m_newLayerNameLineEdit->clear();
357 m_ui->m_repositoryLineEdit->clear();
359 QString fileName = QFileDialog::getExistingDirectory(
this, tr(
"Set output location..."));
361 if (fileName.isEmpty())
364 m_ui->m_repositoryLineEdit->setText(fileName);
virtual void execute()
Function to execute the kernel operation.
Utility functions for the data access module.
TESAEXPORT void CreateKernelColorMaping(te::map::AbstractLayerPtr layer)
boost::shared_ptr< DataSource > DataSourcePtr
TESAEXPORT te::da::DataSourcePtr CreateOGRDataSource(std::string repository)
te::sa::KernelOutputType m_storageType
Kernel storage type.
void onOkPushButtonClicked()
void setInputParameters(te::sa::KernelInputParams *inParamsA, te::sa::KernelInputParams *inParamsB)
KernelCombinationType
Types of kernel combination.
TESAEXPORT te::da::DataSourcePtr CreateGDALDataSource(std::string path, std::string dataSetName)
Class that represents the kernel output parameters.
void setOutputParameters(te::sa::KernelOutputParams *outParams)
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
Set the layer that can be used.
void onInputLayerComboBoxActivated(int index)
void removeViewer(int viewerId)
Dettach a progress viewer.
static ProgressManager & getInstance()
It returns a reference to the singleton instance.
std::string m_outputAttrName
Attribute with the new attr name (if KernelOutputType is Attribute)
Q_DECLARE_METATYPE(te::map::AbstractLayerPtr)
te::sa::KernelCombinationType m_combinationType
Kernel combination type (used by ratio kernel)
int addViewer(AbstractProgressViewer *apv)
Attach a progress viewer.
std::string m_outputPath
Attribute with URI of the output file.
void fillKernelParameters()
TESAEXPORT te::map::AbstractLayerPtr CreateLayer(te::da::DataSourcePtr ds, std::string dataSetName)
std::auto_ptr< Ui::KernelRatioDialogForm > m_ui
std::string m_outputDataSetName
Attribute that defines the output dataset name.
A layer with reference to a dataset.
TESAEXPORT void CreateKernelGrouping(te::map::AbstractLayerPtr layer, std::string kernelAttr)
Class used to calculate the kernel ratio of a datasets.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
KernelRatioDialog(QWidget *parent=0, Qt::WindowFlags f=0)
void onTargetFileToolButtonPressed()
A dialog to calculate the kernel ratio of a datasets.
int m_nCols
Attribute with number of columns to create the grid (if KernelOutputType is Grid) ...
te::map::AbstractLayerPtr getOutputLayer()