27 #include "../../core/filesystem/FileSystem.h" 28 #include "../../core/logger/Logger.h" 29 #include "../../common/progress/ProgressManager.h" 30 #include "../../core/translator/Translator.h" 31 #include "../../common/STLUtils.h" 32 #include "../../dataaccess/dataset/DataSetType.h" 33 #include "../../dataaccess/dataset/DataSetTypeConverter.h" 34 #include "../../dataaccess/dataset/ObjectIdSet.h" 35 #include "../../dataaccess/datasource/DataSourceCapabilities.h" 36 #include "../../dataaccess/datasource/DataSourceInfo.h" 37 #include "../../dataaccess/datasource/DataSourceInfoManager.h" 38 #include "../../dataaccess/datasource/DataSourceFactory.h" 39 #include "../../dataaccess/datasource/DataSourceManager.h" 40 #include "../../dataaccess/utils/Utils.h" 41 #include "../../datatype/Enums.h" 42 #include "../../datatype/Property.h" 43 #include "../../maptools/AbstractLayer.h" 44 #include "../../qt/af/Utils.h" 45 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h" 46 #include "../../qt/widgets/layer/utils/DataSet2Layer.h" 47 #include "../../qt/widgets/progress/ProgressViewerDialog.h" 48 #include "../../qt/widgets/rp/Utils.h" 49 #include "../../qt/widgets/Utils.h" 50 #include "../../qt/widgets/utils/DoubleListWidget.h" 51 #include "../../qt/widgets/utils/FileDialog.h" 52 #include "../../statistics/core/Utils.h" 53 #include "../../srs/SpatialReferenceSystemManager.h" 54 #include "../Config.h" 55 #include "../Exception.h" 57 #include "../VectorToRaster.h" 58 #include "ui_VectorToRasterDialogForm.h" 61 #include <QDoubleValidator> 62 #include <QFileDialog> 63 #include <QIntValidator> 66 #include <QListWidget> 67 #include <QListWidgetItem> 68 #include <QMessageBox> 71 #include <boost/algorithm/string.hpp> 72 #include <boost/filesystem.hpp> 73 #include <boost/lexical_cast.hpp> 74 #include <boost/uuid/random_generator.hpp> 75 #include <boost/uuid/uuid_io.hpp> 79 m_ui(new
Ui::VectorToRasterDialogForm),
86 m_ui->m_imgLabel->setPixmap(QIcon::fromTheme(
"vector-raster-hint").pixmap(112,48));
89 m_widget->setLeftLabel(tr(
"Available Properties"));
90 m_widget->setRightLabel(tr(
"Used Properties"));
92 QGridLayout* displayLayout =
new QGridLayout(
m_ui->m_widget);
93 displayLayout->addWidget(
m_widget.get());
95 m_ui->m_colsLineEdit->setValidator(
new QIntValidator(
this) );
96 m_ui->m_rowsLineEdit->setValidator(
new QIntValidator(
this) );
97 m_ui->m_resXLineEdit->setValidator(
new QDoubleValidator(0, 99999999, 8,
this));
98 m_ui->m_resYLineEdit->setValidator(
new QDoubleValidator(0, 99999999, 8,
this));
99 m_ui->m_dummyLineEdit->setValidator(
new QIntValidator(
this) );
111 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
112 m_ui->m_helpPushButton->setPageReference(
"plugins/attributefill/attrfill_vector_to_raster.html");
121 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
125 std::unique_ptr<te::da::DataSetType> dsType = it->get()->getSchema();
126 if(dsType->hasGeom())
127 m_ui->m_inVectorComboBox->addItem(QString(it->get()->getTitle().c_str()), QVariant(it->get()->getId().c_str()));
140 name +=
" - " + boost::lexical_cast<std::string>(
m_srid);
142 m_ui->m_sridLabel->setText(name.c_str());
147 std::list<te::map::AbstractLayerPtr>::iterator it =
m_layers.begin();
149 std::string layerID =
m_ui->m_inVectorComboBox->itemData(index, Qt::UserRole).toString().toUtf8().data();
156 if(layerID == it->get()->getId())
159 std::unique_ptr<const te::map::LayerSchema> schema(
m_selectedLayer->getSchema());
161 const std::vector<te::dt::Property*> vecProperties = schema->getProperties();
162 std::vector<std::string> propNameVec;
164 for(std::size_t i = 0; i < vecProperties.size(); ++i)
166 int type = vecProperties[i]->getType();
180 propNameVec.push_back(vecProperties[i]->getName());
184 m_widget->setInputValues(propNameVec);
200 QMessageBox::warning(
this, tr(
"Attribute Fill"), tr(
"Invalid bounding box."));
204 double resX =
m_ui->m_resXLineEdit->text().toDouble();
207 m_ui->m_colsLineEdit->setText(QString::number(maxCols));
216 QMessageBox::warning(
this, tr(
"Attribute Fill"), tr(
"Invalid bounding box."));
220 double resY =
m_ui->m_resYLineEdit->text().toDouble();
223 m_ui->m_rowsLineEdit->setText(QString::number(maxRows));
228 m_ui->m_newLayerNameLineEdit->clear();
229 m_ui->m_repositoryLineEdit->clear();
237 QMessageBox::warning(
this, tr(
"File information"), ex.
what());
241 m_ui->m_repositoryLineEdit->setText(fileDialog.
getPath().c_str());
242 m_ui->m_newLayerNameLineEdit->setText(fileDialog.
getFileName().c_str());
245 m_ui->m_newLayerNameLineEdit->setEnabled(
false);
250 if(
m_ui->m_inVectorComboBox->count() == 0)
252 QMessageBox::information(
this,
"Fill",
"Select an input vector layer.");
260 QMessageBox::information(
this,
"Fill",
"Can not execute this operation on this type of layer.");
265 if (!inDataSource.get())
267 QMessageBox::information(
this,
"Fill",
"The selected input data source can not be accessed.");
268 m_ui->m_targetFileToolButton->setFocus();
272 if(
m_widget->getOutputValues().size() == 0)
274 QMessageBox::information(
this,
"Fill",
"Select at least one output attribute to represent the band of the raster.");
278 if(
m_ui->m_resXLineEdit->text().isEmpty())
280 QMessageBox::information(
this,
"Fill",
"Define a resolution for the output raster.");
281 m_ui->m_resXLineEdit->setFocus();
285 if(
m_ui->m_resYLineEdit->text().isEmpty())
287 QMessageBox::information(
this,
"Fill",
"Define a resolution for the output raster.");
288 m_ui->m_resYLineEdit->setFocus();
292 if(
m_ui->m_colsLineEdit->text().isEmpty())
294 QMessageBox::information(
this,
"Fill",
"Define a resolution for the output raster.");
295 m_ui->m_colsLineEdit->setFocus();
299 if(
m_ui->m_rowsLineEdit->text().isEmpty())
301 QMessageBox::information(
this,
"Fill",
"Define a resolution for the output raster.");
302 m_ui->m_rowsLineEdit->setFocus();
306 if(
m_ui->m_dummyCheckBox->isChecked())
308 if(
m_ui->m_dummyLineEdit->text().isEmpty())
310 QMessageBox::information(
this,
"Fill",
"Define a dummy value for the output raster.");
311 m_ui->m_dummyLineEdit->setFocus();
316 if(
m_ui->m_repositoryLineEdit->text().isEmpty())
318 QMessageBox::information(
this,
"Fill",
"Define a repository for the result.");
319 m_ui->m_targetFileToolButton->setFocus();
323 if(
m_ui->m_newLayerNameLineEdit->text().isEmpty())
325 QMessageBox::information(
this,
"Fill",
"Define a name for the resulting layer.");
326 m_ui->m_newLayerNameLineEdit->setFocus();
330 std::string outputdataset =
m_ui->m_newLayerNameLineEdit->text().toUtf8().data();
339 boost::filesystem::path uri(
m_ui->m_repositoryLineEdit->text().toUtf8().data());
343 QMessageBox::information(
this,
"Fill",
"Output file already exists. Remove it or select a new name and try again.");
347 std::size_t idx = outputdataset.find(
".");
348 if (idx != std::string::npos)
349 outputdataset=outputdataset.substr(0,idx);
351 std::string dsinfo(
"file://" + uri.string());
355 if (dsOGR->dataSetExists(outputdataset))
357 QMessageBox::information(
this,
"Fill",
"There is already a dataset with the requested name in the output data source. Remove it or select a new name and try again.");
365 this->setCursor(Qt::WaitCursor);
370 m_ui->m_resXLineEdit->text().toDouble(),
371 m_ui->m_resYLineEdit->text().toDouble(),
372 m_ui->m_colsLineEdit->text().toInt(),
373 m_ui->m_rowsLineEdit->text().toInt(),
374 m_ui->m_dummyCheckBox->isChecked(),
375 m_ui->m_dummyLineEdit->text().toInt());
376 vec2rst->
setOutput(dsOGR, outputdataset);
381 res = vec2rst->
run();
385 this->setCursor(Qt::ArrowCursor);
387 QMessageBox::information(
this,
"Fill",
"Error: could not generate the operation.");
395 boost::uuids::basic_random_generator<boost::mt19937> gen;
396 boost::uuids::uuid u = gen();
397 std::string id_ds = boost::uuids::to_string(u);
400 ds->setConnInfo(dsinfo);
401 ds->setTitle(uri.stem().string());
402 ds->setAccessDriver(
"GDAL");
404 ds->setDescription(uri.string());
413 catch(
const std::exception& e)
415 this->setCursor(Qt::ArrowCursor);
417 QMessageBox::information(
this,
"Fill", e.what());
419 #ifdef TERRALIB_LOGGER_ENABLED 421 #endif // TERRALIB_LOGGER_ENABLED 429 this->setCursor(Qt::ArrowCursor);
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
static std::unique_ptr< DataSource > make(const std::string &driver, const te::core::URI &connInfo)
VectorToRasterDialog(QWidget *parent=0, Qt::WindowFlags f=0)
static bool exists(const std::string &path)
Checks if a given path in UTF-8 exists.
void onTargetFileToolButtonPressed()
boost::shared_ptr< DataSource > DataSourcePtr
TEDATAACCESSEXPORT void AssociateDataSetTypeConverterSRID(DataSetTypeConverter *converter, const int &inputSRID, const int &outputSRID=TE_UNKNOWN_SRS)
virtual const std::string & getTitle() const
It returns the layer title.
void onCancelPushButtonClicked()
void onResYLineEditEditingFinished()
virtual const char * what() const
It outputs the exception message.
#define TE_CORE_LOG_DEBUG(channel, message)
Use this tag in order to log a message to a specified logger with the DEBUG level.
std::unique_ptr< Ui::VectorToRasterDialogForm > m_ui
double m_urx
Upper right corner x-coordinate.
std::unique_ptr< LayerSchema > getSchema() const
It returns the layer schema.
static te::dt::Date ds(2010, 01, 01)
An converter for DataSetType.
void onVectorComboBoxChanged(int index)
double m_llx
Lower left corner x-coordinate.
void onResXLineEditEditingFinished()
static SpatialReferenceSystemManager & getInstance()
It returns a reference to the singleton instance.
te::map::AbstractLayerPtr m_selectedLayer
Selected layer.
An Envelope defines a 2D rectangular region.
int m_srid
SRID of selected layer.
void setInput(te::da::DataSourcePtr inVectorDsrc, std::string inVectorName, std::unique_ptr< te::da::DataSetTypeConverter > inVectorDsType)
te::map::AbstractLayerPtr getLayer()
Get the generated layer.
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
double m_lly
Lower left corner y-coordinate.
void setParams(std::vector< std::string > selectedAttVec, double resolutionX, double resolutionY, int columns, int rows, bool useDummy, int dummy=0)
void onOkPushButtonClicked()
double m_ury
Upper right corner y-coordinate.
void setLayers(std::list< te::map::AbstractLayerPtr > layers)
Set the layer that can be used.
te::da::DataSourceInfoPtr m_outputDatasource
DataSource information.
std::vector< te::dt::Property * > m_properties
Properties related to the selected Layer.
A class that represents a data source component.
virtual int getSRID() const
It returns the Spatial Reference System ID associated to the Layer.
A layer with reference to a dataset.
te::map::AbstractLayerPtr m_outLayer
Generated Layer.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void setOutput(te::da::DataSourcePtr outDsrc, std::string dsName)
virtual const std::string & getDataSourceId() const
bool isValid() const
It tells if the rectangle is valid or not.
std::list< te::map::AbstractLayerPtr > m_layers
List of layers.
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
std::unique_ptr< te::qt::widgets::DoubleListWidget > m_widget
Double list widget.