27 #include "../../../common/STLUtils.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../geometry/Coord2D.h"
31 #include "../../../geometry/GTFactory.h"
32 #include "../../../maptools/MarkRendererManager.h"
33 #include "../../../geometry/Point.h"
34 #include "../../../raster/Grid.h"
35 #include "../../../raster/Raster.h"
36 #include "../../../rp/Functions.h"
37 #include "../../../se/Fill.h"
38 #include "../../../se/Mark.h"
39 #include "../../../se/Stroke.h"
40 #include "../../../se/Utils.h"
41 #include "../../../srs/Converter.h"
42 #include "../../widgets/canvas/Canvas.h"
43 #include "../../widgets/canvas/MapDisplay.h"
44 #include "../../widgets/srs/SRSManagerDialog.h"
45 #include "../../widgets/Utils.h"
49 #include "ui_RasterNavigatorWidgetForm.h"
50 #include "ui_TiePointLocatorWidgetForm.h"
51 #include "ui_TiePointLocatorParametersWidgetForm.h"
54 #include <QGridLayout>
55 #include <QMessageBox>
61 #define PATTERN_SIZE 12
66 m_acqType(InvalidAcquisitionT),
94 m_ui(new Ui::TiePointLocatorWidgetForm),
95 m_tiePointHasFirstCoord(false),
96 m_tiePointIdCounter(0)
100 m_ui->m_x1LineEdit->setValidator(
new QDoubleValidator(
this));
101 m_ui->m_y1LineEdit->setValidator(
new QDoubleValidator(
this));
102 m_ui->m_x2LineEdit->setValidator(
new QDoubleValidator(
this));
103 m_ui->m_y2LineEdit->setValidator(
new QDoubleValidator(
this));
105 m_ui->m_resXLineEdit->setValidator(
new QDoubleValidator(
this));
106 m_ui->m_resYLineEdit->setValidator(
new QDoubleValidator(
this));
108 m_ui->m_selectAllToolButton->setIcon(QIcon::fromTheme(
"table-select"));
109 m_ui->m_unselectAllToolButton->setIcon(QIcon::fromTheme(
"table-unselect"));
110 m_ui->m_deleteSelectedToolButton->setIcon(QIcon::fromTheme(
"table-delete-select"));
111 m_ui->m_autoAcquireTiePointsToolButton->setIcon(QIcon::fromTheme(
"wand"));
112 m_ui->m_addToolButton->setIcon(QIcon::fromTheme(
"list-add"));
113 m_ui->m_refreshToolButton->setIcon(QIcon::fromTheme(
"view-refresh"));
114 m_ui->m_doneToolButton->setIcon(QIcon::fromTheme(
"check"));
173 delete m_markSelected;
176 delete m_markUnselected;
191 std::auto_ptr<te::da::DataSet> ds(m_refLayer->getData());
193 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
195 te::qt::widgets::TiePointData::TPContainerT::const_iterator itB = m_tiePoints.begin();
197 const te::qt::widgets::TiePointData::TPContainerT::const_iterator itE = m_tiePoints.end();
199 tiePoints.reserve( m_tiePoints.size() );
203 converter->setSourceSRID(m_refLayer->getSRID());
204 converter->setTargetSRID(m_ui->m_sridLineEdit->text().toInt());
210 tp.first = itB->second.m_tiePoint.second;
212 te::gm::Coord2D c = inputRst->getGrid()->gridToGeo(itB->second.m_tiePoint.first.x, itB->second.m_tiePoint.first.y);
214 converter->convert(c.
x, c.
y, c.
x, c.
y);
218 tiePoints.push_back(tp);
227 std::auto_ptr<te::da::DataSet> ds(m_refLayer->getData());
229 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
231 te::qt::widgets::TiePointData::TPContainerT::const_iterator itB = m_tiePoints.begin();
233 const te::qt::widgets::TiePointData::TPContainerT::const_iterator itE = m_tiePoints.end();
235 tiePoints.reserve( m_tiePoints.size() );
241 tiePoints.push_back(tp);
254 if(m_tiePointHasFirstCoord)
255 coordRef = m_currentTiePoint.first;
257 return m_tiePointHasFirstCoord;
264 m_refNavigator->set(layer);
267 std::auto_ptr<te::da::DataSet> ds = m_refLayer->getData();
272 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
276 m_ui->m_referenceBand1ComboBox->clear();
278 for(
unsigned band1Idx = 0; band1Idx < inputRst->getNumberOfBands(); ++band1Idx)
279 m_ui->m_referenceBand1ComboBox->addItem(QString::number(band1Idx));
283 strSRID.setNum(m_refLayer->getSRID());
284 m_ui->m_inputSRIDLineEdit->setText(strSRID);
287 strResX.setNum(inputRst->getGrid()->getResolutionX());
288 m_ui->m_inputResXLineEdit->setText(strResX);
291 strResY.setNum(inputRst->getGrid()->getResolutionY());
292 m_ui->m_inputResYLineEdit->setText(strResY);
297 std::auto_ptr<te::da::DataSet> dsAdj = m_adjLayer->getData();
302 std::auto_ptr<te::rst::Raster> inputRstAdj = dsAdj->getRaster(rpos);
304 if(inputRstAdj.get())
306 double maxSize1 = std::max(inputRst->getNumberOfColumns(), inputRstAdj->getNumberOfColumns());
307 double maxSize2 = std::max(inputRst->getNumberOfRows(), inputRstAdj->getNumberOfRows());
308 double maxSize = std::max(maxSize1, maxSize2);
312 double rescaleFactor = 1000. / maxSize;
313 m_tiePointParameters->setRescaleFactor(rescaleFactor);
325 m_adjNavigator->set(layer);
328 std::auto_ptr<te::da::DataSet> ds = m_adjLayer->getData();
333 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
337 m_ui->m_referenceBand2ComboBox->clear();
339 for(
unsigned band2Idx = 0; band2Idx < inputRst->getNumberOfBands(); ++band2Idx)
340 m_ui->m_referenceBand2ComboBox->addItem(QString::number(band2Idx));
343 strSRID.setNum(m_adjLayer->getSRID());
344 m_ui->m_sridLineEdit->setText(strSRID);
347 strResX.setNum(inputRst->getGrid()->getResolutionX());
348 m_ui->m_resXLineEdit->setText(strResX);
351 strResY.setNum(inputRst->getGrid()->getResolutionY());
352 m_ui->m_resYLineEdit->setText(strResY);
357 std::auto_ptr<te::da::DataSet> dsRef = m_refLayer->getData();
362 std::auto_ptr<te::rst::Raster> inputRstRef = dsRef->getRaster(rpos);
364 if(inputRstRef.get())
366 double maxSize1 = std::max(inputRst->getNumberOfColumns(), inputRstRef->getNumberOfColumns());
367 double maxSize2 = std::max(inputRst->getNumberOfRows(), inputRstRef->getNumberOfRows());
368 double maxSize = std::max(maxSize1, maxSize2);
372 double rescaleFactor = 1000. / maxSize;
373 m_tiePointParameters->setRescaleFactor(rescaleFactor);
383 srid = m_ui->m_sridLineEdit->text().toInt();
388 resX = m_ui->m_resXLineEdit->text().toDouble();
389 resY = m_ui->m_resYLineEdit->text().toDouble();
394 assert(m_refLayer.get());
397 std::auto_ptr<te::da::DataSet> ds = m_refLayer->getData();
402 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
406 m_currentTiePoint.first = inputRst->getGrid()->geoToGrid(x, y);
408 m_tiePointHasFirstCoord =
true;
415 assert(m_adjLayer.get());
418 std::auto_ptr<te::da::DataSet> ds = m_adjLayer->getData();
423 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
427 if(m_tiePointHasFirstCoord)
429 m_currentTiePoint.second = inputRst->getGrid()->geoToGrid(x, y);
431 m_tiePointHasFirstCoord =
false;
438 ++m_tiePointIdCounter;
439 m_tiePoints[ m_tiePointIdCounter ] = tpD;
441 tiePointsTableUpdate();
449 m_ui->m_tiePointLabel->setPixmap(p);
454 m_ui->m_selectedTiePointLabel->setPixmap(p);
459 m_ui->m_refTiePointLabel->setPixmap(p);
464 m_ui->m_tiePointsTableWidget->clearSelection();
466 QModelIndex idxStart = m_ui->m_tiePointsTableWidget->model()->index(initialIdx, 0);
467 QModelIndex idxEnd = m_ui->m_tiePointsTableWidget->model()->index(initialIdx + nPos - 1, 6);
469 if(idxStart.isValid() && idxEnd.isValid())
471 QItemSelection itemSel(idxStart, idxEnd);
473 m_ui->m_tiePointsTableWidget->selectionModel()->select(itemSel, QItemSelectionModel::Select);
480 if(m_ui->m_sridLineEdit->text().isEmpty())
482 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Output SRID not defined."));
486 if(m_ui->m_resXLineEdit->text().isEmpty() || m_ui->m_resYLineEdit->text().isEmpty())
488 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Output resolution not defined."));
493 std::auto_ptr<te::da::DataSet> dsRef(m_refLayer->getData());
495 std::auto_ptr<te::rst::Raster> inputRstRef = dsRef->getRaster(rpos);
497 std::auto_ptr<te::da::DataSet> dsAdj(m_adjLayer->getData());
499 std::auto_ptr<te::rst::Raster> inputRstAdj = dsAdj->getRaster(rpos);
531 inputParams.
m_inRaster1Bands.push_back(m_ui->m_referenceBand1ComboBox->currentText().toUInt());
532 inputParams.
m_inRaster2Bands.push_back(m_ui->m_referenceBand2ComboBox->currentText().toUInt());
534 if(m_ui->m_inputSRIDLineEdit->text().toInt() != m_ui->m_sridLineEdit->text().toInt())
538 env.
transform(m_ui->m_sridLineEdit->text().toInt(), m_ui->m_inputSRIDLineEdit->text().toInt());
540 double resX = env.getWidth() / inputRstAdj->getNumberOfColumns();
541 double resY = env.getHeight() / inputRstAdj->getNumberOfRows();
549 inputParams.
m_pixelSizeXRelation = inputRstRef->getGrid()->getResolutionX() / m_ui->m_resXLineEdit->text().toDouble();
550 inputParams.
m_pixelSizeYRelation = inputRstRef->getGrid()->getResolutionY() / m_ui->m_resYLineEdit->text().toDouble();
553 if(!(inputRstRef->getExtent()->within(auxEnvelope1) && inputRstAdj->getExtent()->within(auxEnvelope2)))
559 unsigned int manualTPNumber = 0;
560 te::qt::widgets::TiePointData::TPContainerT::const_iterator itB = m_tiePoints.begin();
561 const te::qt::widgets::TiePointData::TPContainerT::const_iterator itE = m_tiePoints.end();
562 double coordDiffX = 0;
563 double coordDiffY = 0;
569 coordDiffX = itB->second.m_tiePoint.first.x - itB->second.m_tiePoint.second.x;
570 coordDiffY = itB->second.m_tiePoint.first.y - itB->second.m_tiePoint.second.y;
580 QApplication::setOverrideCursor(Qt::WaitCursor);
588 if(algorithmInstance.
execute(outputParams))
590 const unsigned int tpsNmb = (
unsigned int)outputParams.
m_tiePoints.size();
597 int initialId = (int)m_tiePoints.size();
599 for(
unsigned int tpIdx = 0; tpIdx < tpsNmb; ++tpIdx)
601 ++m_tiePointIdCounter;
603 m_tiePoints[ m_tiePointIdCounter ] = auxTpData;
606 tiePointsTableUpdate();
608 disconnect(m_ui->m_tiePointsTableWidget, SIGNAL(itemSelectionChanged()),
this, SLOT(onTiePointsTableWidgetItemSelectionChanged()));
610 createSelection(initialId, (
int)tpsNmb);
612 connect(m_ui->m_tiePointsTableWidget, SIGNAL(itemSelectionChanged()),
this, SLOT(onTiePointsTableWidgetItemSelectionChanged()));
614 transformationInfoUpdate();
618 QMessageBox::warning(
this, tr(
"Warning"), tr(
"None tie points was located."));
633 QApplication::restoreOverrideCursor();
635 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Error locating tie points."));
638 QApplication::restoreOverrideCursor();
643 m_ui->m_tiePointsTableWidget->selectAll();
648 m_ui->m_tiePointsTableWidget->clearSelection();
653 const int rowCount = m_ui->m_tiePointsTableWidget->rowCount();
655 for(
int row = 0 ; row < rowCount ; ++row )
657 QTableWidgetItem* itemPtr = m_ui->m_tiePointsTableWidget->item(row, 0);
659 if(itemPtr->isSelected())
661 unsigned int tpID = itemPtr->text().toUInt();
663 te::qt::widgets::TiePointData::TPContainerT::iterator deletionIt = m_tiePoints.find(tpID);
665 assert(deletionIt != m_tiePoints.end());
667 m_tiePoints.erase(deletionIt);
671 if(m_tiePoints.empty())
673 m_tiePointIdCounter = 0;
676 m_tiePointsSelected.clear();
678 tiePointsTableUpdate();
683 if((!m_ui->m_x1LineEdit->text().isEmpty()) && (!m_ui->m_y1LineEdit->text().isEmpty()) &&
684 (!m_ui->m_x2LineEdit->text().isEmpty()) && (!m_ui->m_y2LineEdit->text().isEmpty()))
688 tpD.
m_tiePoint.first.x = m_ui->m_x1LineEdit->text().toDouble();
689 tpD.
m_tiePoint.first.y = m_ui->m_y1LineEdit->text().toDouble();
690 tpD.
m_tiePoint.second.x = m_ui->m_x2LineEdit->text().toDouble();
691 tpD.
m_tiePoint.second.y = m_ui->m_y2LineEdit->text().toDouble();
693 ++m_tiePointIdCounter;
694 m_tiePoints[m_tiePointIdCounter] = tpD;
696 tiePointsTableUpdate();
702 transformationInfoUpdate();
707 tiePointsTableUpdate();
712 emit doneAcquiredTiePoints();
727 refCoordPicked(x, y);
734 adjCoordPicked(x, y);
747 srsDialog.setWindowTitle(tr(
"Choose the SRS"));
749 if(srsDialog.exec() == QDialog::Accepted)
754 strSRID.setNum(srid.first);
755 m_ui->m_sridLineEdit->setText(strSRID);
764 te::qt::widgets::TiePointData::TPContainerT::const_iterator tPIt = m_tiePoints.begin();
765 const te::qt::widgets::TiePointData::TPContainerT::const_iterator tPItEnd = m_tiePoints.end();
767 while( tPIt != tPItEnd )
769 transParams.
m_tiePoints.push_back(tPIt->second.m_tiePoint);
773 std::string geoTransfName = m_tiePointParameters->getTransformationName();
779 if(!transfPtr->initialize(transParams))
784 m_ui->m_tiePointsTableWidget->blockSignals(
true );
785 m_ui->m_tiePointsTableWidget->setSortingEnabled(
false );
787 m_ui->m_tiePointsTableWidget->setRowCount(0);
789 double currTPError = 0;
791 tPIt = m_tiePoints.begin();
793 while( tPIt != tPItEnd )
795 int newrow = m_ui->m_tiePointsTableWidget->rowCount();
796 m_ui->m_tiePointsTableWidget->insertRow(newrow);
799 currTPError = transfPtr.get() ? transfPtr->getDirectMappingError(currTP) : 0.0;
802 QTableWidgetItem* itemId =
new QTableWidgetItem;
803 itemId->setData(Qt::EditRole, tPIt->first);
804 itemId->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
805 m_ui->m_tiePointsTableWidget->setItem(newrow, 0, itemId);
808 QTableWidgetItem* itemError =
new QTableWidgetItem;
809 itemError->setData(Qt::EditRole, currTPError);
810 itemError->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
811 m_ui->m_tiePointsTableWidget->setItem(newrow, 1, itemError);
821 type = tr(
"Automatic");
824 QTableWidgetItem* itemType =
new QTableWidgetItem(type);
825 itemType->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
826 m_ui->m_tiePointsTableWidget->setItem(newrow, 2, itemType);
829 QTableWidgetItem* itemRefX =
new QTableWidgetItem;
830 itemRefX->setData(Qt::EditRole, currTP.first.x);
831 itemRefX->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
832 m_ui->m_tiePointsTableWidget->setItem(newrow, 3, itemRefX);
835 QTableWidgetItem* itemRefY =
new QTableWidgetItem;
836 itemRefY->setData(Qt::EditRole, currTP.first.y);
837 itemRefY->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
838 m_ui->m_tiePointsTableWidget->setItem(newrow, 4, itemRefY);
841 QTableWidgetItem* itemAdjX =
new QTableWidgetItem;
842 itemAdjX->setData(Qt::EditRole, currTP.second.x);
843 itemAdjX->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
844 m_ui->m_tiePointsTableWidget->setItem(newrow, 5, itemAdjX);
847 QTableWidgetItem* itemAdjY =
new QTableWidgetItem;
848 itemAdjY->setData(Qt::EditRole, currTP.second.y);
849 itemAdjY->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
850 m_ui->m_tiePointsTableWidget->setItem(newrow, 6, itemAdjY);
853 std::set<int>::iterator it = m_tiePointsSelected.find(tPIt->first);
855 if(it != m_tiePointsSelected.end())
857 m_ui->m_tiePointsTableWidget->selectRow(newrow);
863 m_ui->m_tiePointsTableWidget->setSortingEnabled(
true);
864 m_ui->m_tiePointsTableWidget->blockSignals(
false );
865 m_ui->m_tiePointsTableWidget->resizeColumnsToContents();
867 transformationInfoUpdate();
877 m_tiePointsSelected.clear();
879 const int rowCount = m_ui->m_tiePointsTableWidget->rowCount();
881 for(
int row = 0; row < rowCount; ++row)
883 QTableWidgetItem* itemPtr = m_ui->m_tiePointsTableWidget->item(row, 0);
885 int id = itemPtr->text().toUInt();
887 te::qt::widgets::TiePointData::TPContainerT::iterator it = m_tiePoints.find(
id);
889 assert(it != m_tiePoints.end());
893 if( itemPtr->isSelected() )
895 it->second.m_selected =
true;
897 transParamsSelectedTP.
m_tiePoints.push_back(tiePoint);
899 m_tiePointsSelected.insert(
id);
903 it->second.m_selected =
false;
905 transParamsUnselectedTP.
m_tiePoints.push_back(tiePoint);
912 std::string geoTransfName = m_tiePointParameters->getTransformationName();
915 if(transfAllTPPtr.get())
916 if(!transfAllTPPtr->initialize(transParamsAllTP))
917 transfAllTPPtr.reset();
920 if(transfSelectedTPPtr.get())
921 if(!transfSelectedTPPtr->initialize(transParamsSelectedTP))
922 transfSelectedTPPtr.reset();
925 if(transfUnselectedTPPtr.get())
926 if(!transfUnselectedTPPtr->initialize(transParamsUnselectedTP))
927 transfUnselectedTPPtr.reset();
930 m_ui->m_tiePointsNumberLineEdit->setText(QString::number(m_tiePoints.size()));
932 if(transfAllTPPtr.get())
933 m_ui->m_transformationRMSEAllLineEdit->setText(QString::number(transfAllTPPtr->getDirectMapRMSE()));
935 m_ui->m_transformationRMSEAllLineEdit->setText(
"N/A");
937 if(transfSelectedTPPtr.get())
938 m_ui->m_transformationRMSESelectedLineEdit->setText(QString::number(transfSelectedTPPtr->getDirectMapRMSE()));
940 m_ui->m_transformationRMSESelectedLineEdit->setText(
"N/A");
942 if(transfUnselectedTPPtr.get())
943 m_ui->m_transformationRMSEunselectedLineEdit->setText(QString::number(transfUnselectedTPPtr->getDirectMapRMSE()));
945 m_ui->m_transformationRMSEunselectedLineEdit->setText(
"N/A");
948 emit tiePointsUpdated();
954 QGridLayout* layoutRef =
new QGridLayout(m_ui->m_refWidget);
957 m_refNavigator->setWindowTitle(tr(
"Reference"));
958 m_refNavigator->setMinimumSize(550, 400);
959 m_refNavigator->hideGeomTool(
true);
960 m_refNavigator->hideInfoTool(
true);
961 m_refNavigator->hideBoxTool(
true);
963 layoutRef->addWidget(m_refNavigator);
964 layoutRef->setContentsMargins(0,0,0,0);
966 connect(m_refNavigator, SIGNAL(mapDisplayExtentChanged()),
this, SLOT(onRefMapDisplayExtentChanged()));
967 connect(m_refNavigator, SIGNAL(pointPicked(
double,
double)),
this, SLOT(onRefPointPicked(
double,
double)));
970 QGridLayout* layoutAdj =
new QGridLayout(m_ui->m_adjWidget);
973 m_adjNavigator->setWindowTitle(tr(
"Adjust"));
974 m_adjNavigator->setMinimumSize(550, 400);
975 m_adjNavigator->hideGeomTool(
true);
976 m_adjNavigator->hideInfoTool(
true);
977 m_adjNavigator->hideBoxTool(
true);
979 layoutAdj->addWidget(m_adjNavigator);
980 layoutAdj->setContentsMargins(0,0,0,0);
982 connect(m_adjNavigator, SIGNAL(mapDisplayExtentChanged()),
this, SLOT(onAdjMapDisplayExtentChanged()));
983 connect(m_adjNavigator, SIGNAL(pointPicked(
double,
double)),
this, SLOT(onAdjPointPicked(
double,
double)));
1002 if(!m_refLayer.get())
1004 std::auto_ptr<te::da::DataSet> dsRef = m_refLayer->getData();
1008 std::auto_ptr<te::rst::Raster> rstRef = dsRef->getRaster(rpos);
1012 if(!m_adjLayer.get())
1014 std::auto_ptr<te::da::DataSet> dsAdj = m_adjLayer->getData();
1018 std::auto_ptr<te::rst::Raster> rstAdj = dsAdj->getRaster(rpos);
1025 te::qt::widgets::TiePointData::TPContainerT::const_iterator it = tpc.begin();
1027 while(it != tpc.end())
1051 rstRef->getGrid()->gridToGeo(refCoord.
x, refCoord.
y, refGeoCoord.
x, refGeoCoord.
y );
1054 refCanvasInstance.draw(&refPoint);
1057 QMatrix matrix = refCanvasInstance.getMatrix();
1058 QPointF pointCanvas = matrix.map(QPointF(refGeoCoord.
x, refGeoCoord.
y));
1059 pointCanvas.setX(pointCanvas.x() + 8);
1060 QPointF pointGeo = matrix.inverted().map(pointCanvas);
1061 refPoint.
setX(pointGeo.x());
1062 refPoint.
setY(pointGeo.y());
1063 refCanvasInstance.drawText(&refPoint, QString::number(
id).toStdString());
1068 rstAdj->getGrid()->gridToGeo(adjCoord.
x, adjCoord.
y, adjGeoCoord.
x, adjGeoCoord.
y );
1071 adjCanvasInstance.draw(&adjPoint);
1074 matrix = adjCanvasInstance.getMatrix();
1075 pointCanvas = matrix.map(QPointF(adjGeoCoord.
x, adjGeoCoord.
y));
1076 pointCanvas.setX(pointCanvas.x() + 8);
1077 pointGeo = matrix.inverted().map(pointCanvas);
1078 adjPoint.
setX(pointGeo.x());
1079 adjPoint.
setY(pointGeo.y());
1080 adjCanvasInstance.drawText(&adjPoint, QString::number(
id).toStdString());
1087 if(getReferenceTiePointCoord(refCoord))
1093 rstRef->getGrid()->gridToGeo(refCoord.
x, refCoord.
y, refGeoCoord.
x, refGeoCoord.
y );
1096 refCanvasInstance.draw(&refPoint);
1099 refDisplay->repaint();
1100 adjDisplay->repaint();
1107 QPixmap p = QPixmap::fromImage(*img);
std::vector< te::gm::GTParameters::TiePoint > m_tiePoints
The generated tie-points (te::gm::GTParameters::TiePoint::first are raster 1 line/column indexes...
std::vector< TiePoint > m_tiePoints
Tie points.
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
double m_urx
Upper right corner x-coordinate.
An utility struct for representing 2D coordinates.
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters.
std::pair< Coord2D, Coord2D > TiePoint
Tie point type definition.
void geoToGrid(const double &x, const double &y, double &col, double &row) const
Get the grid point associated to a spatial location.
void Free(std::vector< T * > *v)
This function can be applied to a pointer to a vector of pointers.
double m_llx
Lower left corner x-coordinate.
static const std::string & getLastLogStr()
Returns the last log string generated by this module.
static MarkRendererManager & getInstance()
It returns a reference to the singleton instance.
A point with x and y coordinate values.
An Envelope defines a 2D rectangular region.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
virtual const te::gm::Envelope & getExtent() const
It returns the world extent showned by the MapDisplay.
A Fill specifies the pattern for filling an area geometry.
Grid * getGrid()
It returns the raster grid.
TESEEXPORT Mark * CreateMark(const std::string &wellKnownName, Stroke *stroke, Fill *fill)
Creates a mark.
static GeometricTransformation * make(const std::string &factoryKey)
It creates an object with the appropriated factory.
TiePointsLocator output parameters.
double m_lly
Lower left corner y-coordinate.
A Converter is responsible for the conversion of coordinates between different Coordinate Systems (CS...
TESEEXPORT Stroke * CreateStroke(const std::string &color, const std::string &width)
Creates a stroke.
void setX(const double &x)
It sets the Point x-coordinate value.
double m_ury
Upper right corner y-coordinate.
#define TE_TRANSPARENT
For an RGBA color this is the value of the alpha-channel for totally transparent. ...
A Stroke specifies the appearance of a linear geometry.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
2D Geometric transformation parameters.
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
void setY(const double &y)
It sets the Point y-coordinate value.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void transform(int oldsrid, int newsrid)
It will transform the coordinates of the Envelope from the old SRS to the new one.
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution.
TESEEXPORT Fill * CreateFill(const std::string &color, const std::string &opacity)
Creates a fill.