28 #include "../../core/filesystem/FileSystem.h" 29 #include "../../core/translator/Translator.h" 30 #include "../../common/progress/ProgressManager.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 "../../mnt/core/Smooth.h" 38 #include "../../mnt/core/Utils.h" 39 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h" 40 #include "../../qt/widgets/layer/utils/DataSet2Layer.h" 41 #include "../../qt/widgets/progress/ProgressViewerDialog.h" 42 #include "../../qt/widgets/rp/Utils.h" 43 #include "../../qt/widgets/utils/FileDialog.h" 44 #include "../../qt/widgets/srs/SRSManagerDialog.h" 45 #include "../../raster.h" 46 #include "../../srs/SpatialReferenceSystemManager.h" 50 #include "ui_SmoothIsolinesDialogForm.h" 53 #include <QFileDialog> 54 #include <QMessageBox> 57 #include <boost/algorithm/string.hpp> 58 #include <boost/filesystem.hpp> 59 #include <boost/lexical_cast.hpp> 60 #include <boost/uuid/random_generator.hpp> 61 #include <boost/uuid/uuid_io.hpp> 65 m_ui(new
Ui::SmoothIsolinesDialogForm),
77 m_ui->m_targetDatasourceToolButton->setIcon(QIcon::fromTheme(
"datasource"));
84 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
85 m_ui->m_helpPushButton->setPageReference(
"plugins/mnt/DTM_SmoothIsolines.html");
87 m_ui->m_srsToolButton->setIcon(QIcon::fromTheme(
"srs"));
99 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
105 if (it->get()->isValid())
107 std::unique_ptr<te::da::DataSetType> dsType (it->get()->getSchema());
111 m_ui->m_layersComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
122 QList<mntType> types;
126 if (search.exec() != QDialog::Accepted)
131 int index =
m_ui->m_layersComboBox->findText(search.
getLayer().get()->getTitle().c_str());
132 m_ui->m_layersComboBox->setCurrentIndex(index);
138 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
139 std::string layerID =
m_ui->m_layersComboBox->itemData(index, Qt::UserRole).toString().toUtf8().data();
143 if(layerID == it->get()->getId())
159 m_scale =
m_ui->m_scaleLineEdit->text().toDouble();
163 m_ui->m_factorLineEdit->setText(QString::number(
m_factor));
164 m_ui->m_distanceLineEdit->setText(QString::number(
m_maxdist));
176 m_ui->m_newLayerNameLineEdit->clear();
177 m_ui->m_newLayerNameLineEdit->setEnabled(
true);
181 std::list<te::da::DataSourceInfoPtr> dsPtrList = dlg.
getSelecteds();
183 if (dsPtrList.empty())
186 std::list<te::da::DataSourceInfoPtr>::iterator it = dsPtrList.begin();
188 m_ui->m_repositoryLineEdit->setText(QString(it->get()->getTitle().c_str()));
197 m_ui->m_newLayerNameLineEdit->clear();
198 m_ui->m_repositoryLineEdit->clear();
205 catch (
const std::exception& e)
207 QMessageBox::information(
this, tr(
"Smooth Isolines"), e.what());
211 m_ui->m_repositoryLineEdit->setText(fileDialog.
getPath().c_str());
212 m_ui->m_newLayerNameLineEdit->setText(fileDialog.
getFileName().c_str());
215 m_ui->m_newLayerNameLineEdit->setEnabled(
false);
225 QApplication::setOverrideCursor(Qt::WaitCursor);
235 if (!inDataSource.get())
239 std::unique_ptr<te::da::DataSetType> inDsetType(inDataSource->getDataSetType(inDsetName));
242 if (
m_ui->m_repositoryLineEdit->text().isEmpty())
245 if (
m_ui->m_newLayerNameLineEdit->text().isEmpty())
248 std::string outputdataset =
m_ui->m_newLayerNameLineEdit->text().toUtf8().data();
249 std::string outdsinfo (
"file://");
250 boost::filesystem::path uri(
m_ui->m_repositoryLineEdit->text().toUtf8().data());
257 std::size_t idx = outputdataset.find(
".");
258 if (idx != std::string::npos)
259 outputdataset = outputdataset.substr(0, idx);
261 outdsinfo += uri.string();
265 iso->
setInput(inDataSource, inDsetName, std::move(inDsetType));
271 if (dsOGR->dataSetExists(outputdataset))
272 throw te::common::Exception(
TE_TR(
"There is already a dataset with the requested name in the output data source. Remove it or select a new name and try again."));
282 if (aux->dataSetExists(outputdataset))
288 bool simpl_out =
m_ui->m_simploutCheckBox->isChecked();
308 bool result = iso->
run();
317 boost::uuids::basic_random_generator<boost::mt19937> gen;
318 boost::uuids::uuid u = gen();
319 std::string
id = boost::uuids::to_string(u);
322 ds->setConnInfo(outdsinfo);
323 ds->setTitle(uri.stem().string());
324 ds->setAccessDriver(
"OGR");
326 ds->setDescription(uri.string());
344 catch (
const std::exception& e)
346 QApplication::restoreOverrideCursor();
347 QMessageBox::information(
this, tr(
"Smooth Isolines "), e.what());
351 QApplication::restoreOverrideCursor();
363 srsDialog.setWindowTitle(tr(
"Choose the SRS"));
365 if (srsDialog.exec() == QDialog::Rejected)
378 m_ui->m_resSRIDLabel->setText(
"No SRS defined");
384 m_ui->m_resSRIDLabel->setText(name.c_str());
386 m_ui->m_resSRIDLabel->setText(QString(
"%1").arg(newSRID));
void setSRID(int newSRID)
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
te::map::AbstractLayerPtr m_outputLayer
Generated Layer.
static std::unique_ptr< DataSource > make(const std::string &driver, const te::core::URI &connInfo)
TEMNTEXPORT bool convertPlanarToAngle(double &val, te::common::UnitOfMeasurePtr unit)
void onInputLayerToolButtonClicked()
static bool exists(const std::string &path)
Checks if a given path in UTF-8 exists.
boost::shared_ptr< DataSetType > DataSetTypePtr
boost::shared_ptr< DataSource > DataSourcePtr
std::unique_ptr< Ui::SmoothIsolinesDialogForm > m_ui
void setOutput(te::da::DataSourcePtr outDsrc, std::string dsname)
static te::dt::Date ds(2010, 01, 01)
void setParams(double factor, double max_dist, bool simpl)
#define TE_TR(message)
It marks a string in order to get translated.
std::list< te::map::AbstractLayerPtr > m_layers
List of layers.
void onOkPushButtonClicked()
void setInput(te::da::DataSourcePtr inDsrc, std::string inDsetName, std::unique_ptr< te::da::DataSetType > inDsetType)
static SpatialReferenceSystemManager & getInstance()
It returns a reference to the singleton instance.
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
te::map::AbstractLayerPtr getLayer()
static te::dt::TimeDuration dt(20, 30, 50, 11)
te::map::AbstractLayerPtr m_inputLayer
Input layer.
void onScalePushButtonClicked()
void onInputComboBoxChanged(int index)
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
SmoothIsolinesDialog(QWidget *parent=0, Qt::WindowFlags f=0)
boost::shared_ptr< UnitOfMeasure > UnitOfMeasurePtr
const std::string & getDataSetName() const
void onCancelPushButtonClicked()
void onTargetDatasourceToolButtonPressed()
void setActive(const QList< mntType > &types)
A class that represents a data source component.
A layer with reference to a dataset.
UnitOfMeasurePtr find(unsigned int id) const
Returns a unit of measure identified by its identificaton.
void onTargetFileToolButtonPressed()
TEMNTEXPORT te::mnt::mntType getMNTType(const te::da::DataSetType *dt)
te::da::DataSourceInfoPtr m_outputDatasource
DataSource information.
te::map::AbstractLayerPtr getLayer()
void onSrsToolButtonClicked()
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
virtual const std::string & getDataSourceId() const
A dialog Smooth Isolines.
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
Set the layer that can be used.