27 #include "../../../color/RGBAColor.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../geometry/Coord2D.h"
31 #include "../../../geometry/Geometry.h"
32 #include "../../../geometry/Point.h"
33 #include "../../../geometry/Utils.h"
34 #include "../../../maptools/Utils.h"
35 #include "../../../raster/Grid.h"
36 #include "../../../raster/Raster.h"
37 #include "../../../se/CoverageStyle.h"
38 #include "../../../se/ChannelSelection.h"
39 #include "../../../se/RasterSymbolizer.h"
40 #include "../../../se/Rule.h"
41 #include "../../../se/SelectedChannel.h"
42 #include "../../../se/Utils.h"
43 #include "../../widgets/tools/AbstractTool.h"
44 #include "../../widgets/tools/CoordTracking.h"
45 #include "../../widgets/tools/ExtentAcquire.h"
46 #include "../../widgets/tools/Pan.h"
47 #include "../../widgets/tools/PolygonAcquire.h"
48 #include "../../widgets/tools/PointPicker.h"
49 #include "../../widgets/tools/ReadPixelTool.h"
50 #include "../../widgets/tools/ZoomArea.h"
51 #include "../../widgets/tools/ZoomClick.h"
52 #include "../../widgets/tools/ZoomWheel.h"
53 #include "../canvas/Canvas.h"
54 #include "../canvas/EyeBirdMapDisplayWidget.h"
55 #include "../canvas/MultiThreadMapDisplay.h"
56 #include "../canvas/ZoomInMapDisplayWidget.h"
58 #include "ui_RasterNavigatorWidgetForm.h"
66 m_ui(new Ui::RasterNavigatorWidgetForm),
68 m_tool(0), m_panTool(0), m_zoomTool(0),
74 QGridLayout* displayLayout =
new QGridLayout(
m_ui->m_frame);
78 displayLayout->setContentsMargins(0,0,0,0);
80 QGridLayout* eyeBirdDisplayLayout =
new QGridLayout(
m_ui->m_eyeBirdFrame);
83 eyeBirdDisplayLayout->setContentsMargins(0,0,0,0);
85 QGridLayout* zoomInDisplayLayout =
new QGridLayout(
m_ui->m_zoomInFrame);
88 zoomInDisplayLayout->setContentsMargins(0,0,0,0);
99 connect(
m_ui->m_zoomInActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onZoomAreaToggled(
bool)));
100 connect(
m_ui->m_zoomOutActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onZoomOutToggled(
bool)));
101 connect(
m_ui->m_panActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onPanToggled(
bool)));
103 connect(
m_ui->m_geomActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onGeomToggled(
bool)));
104 connect(
m_ui->m_extentActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onBoxToggled(
bool)));
120 connect(
m_ui->m_horizontalSlider, SIGNAL(valueChanged(
int)),
this, SLOT(
onHSliderChanged(
int)));
126 m_ui->m_previewToolButton->setIcon(QIcon::fromTheme(
"check"));
127 m_ui->m_zoomInActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"zoom-area"));
128 m_ui->m_zoomOutActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"zoom-out"));
129 m_ui->m_panActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"pan"));
130 m_ui->m_recomposeActionToolButton->setIcon(QIcon::fromTheme(
"zoom-extent"));
131 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"placemark"));
132 m_ui->m_geomActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"edit-polygon"));
133 m_ui->m_extentActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"edit-box"));
134 m_ui->m_readPixelActionToolButton->setIcon(QIcon::fromTheme(
"color-picker"));
135 m_ui->m_extraDisplaysToolButton->setIcon(QIcon::fromTheme(
"view-map-display-extra"));
136 m_ui->m_monoLabel->setPixmap(QIcon::fromTheme(
"bullet-black").pixmap(16,16));
137 m_ui->m_redLabel->setPixmap(QIcon::fromTheme(
"bullet-red").pixmap(16,16));
138 m_ui->m_greenLabel->setPixmap(QIcon::fromTheme(
"bullet-green").pixmap(16,16));
139 m_ui->m_blueLabel->setPixmap(QIcon::fromTheme(
"bullet-blue").pixmap(16,16));
140 m_ui->m_monoToolButton->setIcon(QIcon::fromTheme(
"channel-gray"));
141 m_ui->m_compositionToolButton->setIcon(QIcon::fromTheme(
"channels"));
142 m_ui->m_redToolButton->setIcon(QIcon::fromTheme(
"channel-red"));
143 m_ui->m_greenToolButton->setIcon(QIcon::fromTheme(
"channel-green"));
144 m_ui->m_blueToolButton->setIcon(QIcon::fromTheme(
"channel-blue"));
147 m_ui->m_previewToolButton->setVisible(
false);
148 m_ui->m_horizontalSlider->setVisible(
false);
149 m_ui->m_verticalSlider->setVisible(
false);
157 m_layer->setVisibility(m_visibility);
162 delete m_draftOriginal;
169 m_visibility = m_layer->getVisibility();
173 std::list<te::map::AbstractLayerPtr> list;
174 list.push_back(m_layer);
178 m_mapDisplay->setMouseTracking(
true);
179 m_mapDisplay->setLayerList(list);
180 m_mapDisplay->setSRID(m_layer->getSRID(),
false);
183 m_mapDisplay->setExtent(e,
false);
187 std::auto_ptr<te::da::DataSet> ds(m_layer->getData());
189 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
192 int w = m_mapDisplay->getWidth();
193 int h = m_mapDisplay->getHeight();
194 double resX = inputRst->getResolutionX();
195 double resY = inputRst->getResolutionY();
196 te::gm::Coord2D cc(inputRst->getExtent()->getCenter().x, inputRst->getExtent()->getCenter().y);
197 te::gm::Coord2D bowerLeftWorld(cc.x - (resX * ( w / 2 )), cc.y - (resY * ( h / 2 )));
198 te::gm::Coord2D bowerUpperWorld(cc.x + (resX * ( w / 2 )), cc.y + (resY * ( h / 2 )));
200 te::gm::Envelope env(bowerLeftWorld.x, bowerLeftWorld.y, bowerUpperWorld.
x, bowerUpperWorld.
y);
202 m_mapDisplay->setExtent(env,
false);
205 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
206 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
212 getCompositionInfo();
217 std::list<te::map::AbstractLayerPtr> list;
218 list.push_back(layer);
219 list.push_back(m_layer);
221 m_mapDisplay->setLayerList(list);
222 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
223 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
226 m_mapDisplay->setExtent(e,
true);
236 std::list<te::map::AbstractLayerPtr> list;
237 list.push_back(m_layer);
239 m_mapDisplay->setLayerList(list);
240 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
241 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
244 m_mapDisplay->setExtent(e,
true);
249 return m_mapDisplay->getExtent();
261 reprojectedBBOX.
transform(m_mapDisplay->getSRID(), m_layer->getSRID());
265 std::auto_ptr<te::da::DataSet> ds(m_layer->getData());
267 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
276 int w = (int)endGrid.
x - (
int)startGrid.
x;
277 int h = (int)startGrid.
y - (
int)endGrid.
y;
279 raster =
te::map::GetExtentRaster(inputRst.get(), w, h, reprojectedBBOX, m_mapDisplay->getSRID(), ibbox, m_layer->getSRID());
283 raster =
te::map::GetExtentRaster(inputRst.get(), m_mapDisplay->getWidth(), m_mapDisplay->getHeight(), reprojectedBBOX, m_mapDisplay->getSRID(), ibbox, m_layer->getSRID());
294 QPixmap* draft = m_mapDisplay->getDraftPixmap();
295 draft->fill(Qt::transparent);
298 Canvas canvas(m_mapDisplay->width(), m_mapDisplay->height());
302 bool hasToDelete =
false;
317 delete m_draftOriginal;
319 m_draftOriginal =
new QPixmap(*m_mapDisplay->getDraftPixmap());
326 disconnect(m_ui->m_verticalSlider, SIGNAL(valueChanged(
int)),
this, SLOT(onVSliderChanged(
int)));
327 disconnect(m_ui->m_horizontalSlider, SIGNAL(valueChanged(
int)),
this, SLOT(onHSliderChanged(
int)));
329 m_ui->m_horizontalSlider->setMaximum(m_mapDisplay->getWidth() - 1);
330 m_ui->m_horizontalSlider->setValue(m_mapDisplay->getWidth() - 1);
331 m_ui->m_verticalSlider->setMaximum(m_mapDisplay->getHeight() - 1);
332 m_ui->m_verticalSlider->setValue(m_mapDisplay->getHeight() - 1);
334 connect(m_ui->m_verticalSlider, SIGNAL(valueChanged(
int)),
this, SLOT(onVSliderChanged(
int)));
335 connect(m_ui->m_horizontalSlider, SIGNAL(valueChanged(
int)),
this, SLOT(onHSliderChanged(
int)));
337 m_mapDisplay->repaint();
348 m_ui->m_toolsFrame->setVisible(!asPreview);
349 m_ui->m_label->setVisible(!asPreview);
350 m_ui->m_previewToolButton->setVisible(asPreview);
352 m_ui->m_horizontalSlider->setVisible(asPreview);
353 m_ui->m_verticalSlider->setVisible(asPreview);
355 hideExtraDisplaysTool(asPreview);
360 m_mapDisplay->installEventFilter(m_panTool);
365 m_mapDisplay->installEventFilter(m_zoomTool);
372 m_ui->m_ccFrame->setVisible(!hide);
377 m_ui->m_toolLine->setVisible(!hide);
378 hidePickerTool(hide);
386 m_ui->m_pointActionToolButtontoolButton->setVisible(!hide);
391 m_ui->m_geomActionToolButtontoolButton->setVisible(!hide);
396 m_ui->m_extentActionToolButtontoolButton->setVisible(!hide);
401 m_ui->m_readPixelActionToolButton->setVisible(!hide);
406 m_ui->m_extraDisplaysToolButton->setChecked(
false);
408 m_ui->m_extraLine->setVisible(!hide);
409 m_ui->m_extraDisplaysToolButton->setVisible(!hide);
416 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"pointer-selection"));
417 m_pointCursor = Qt::ArrowCursor;
421 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"placemark"));
422 m_pointCursor = Qt::CrossCursor;
428 assert(m_layer.get());
430 if(m_ui->m_extraDisplaysToolButton->isChecked())
433 m_zoomInMapDisplay->drawCursorPosition((
double) coordinate.rx(), (double)coordinate.ry());
455 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
460 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
465 te::gm::Coord2D pixelLocation = inputRst->getGrid()->geoToGrid((
double) coordinate.rx(), (double)coordinate.ry());
466 m_currentColumn = pixelLocation.
x;
467 m_currentRow = pixelLocation.
y;
470 xStr.append(QString::number(coordinate.rx(),
'f', 5));
472 yStr.append(QString::number(coordinate.ry(),
'f', 5));
473 QString cStr(tr(
"Column: "));
474 cStr.append(QString::number(m_currentColumn));
475 QString lStr(tr(
"Line: "));
476 lStr.append(QString::number(m_currentRow));
486 m_ui->m_label->setText(label);
494 emit envelopeAcquired(env);
500 emit geomAquired(poly);
506 emit pointPicked(point.x(), point.y());
515 emit mapDisplayExtentChanged();
517 delete m_draftOriginal;
527 setCurrentTool(zoomArea);
536 setCurrentTool(zoomOut);
556 connect(pp, SIGNAL(pointPicked(QPointF&)),
this, SLOT(onPointPicked(QPointF&)));
592 m_ui->m_extraDisplaysFrame->setVisible(checked);
593 m_eyeBirdMapDisplay->setEnabled(checked);
594 m_zoomInMapDisplay->setEnabled(checked);
601 m_mapDisplay->setExtent(env);
608 std::string name = m_ui->m_redComboBox->itemText(index).toStdString();
610 m_symbolizer->getChannelSelection()->getRedChannel()->setSourceChannelName(name);
612 m_mapDisplay->refresh();
617 std::string name = m_ui->m_greenComboBox->itemText(index).toStdString();
619 m_symbolizer->getChannelSelection()->getGreenChannel()->setSourceChannelName(name);
621 m_mapDisplay->refresh();
626 std::string name = m_ui->m_blueComboBox->itemText(index).toStdString();
628 m_symbolizer->getChannelSelection()->getBlueChannel()->setSourceChannelName(name);
630 m_mapDisplay->refresh();
635 std::string name = m_ui->m_monoComboBox->itemText(index).toStdString();
637 m_symbolizer->getChannelSelection()->getGrayChannel()->setSourceChannelName(name);
639 m_mapDisplay->refresh();
644 if(m_symbolizer->getChannelSelection()->getGrayChannel() == 0)
648 m_symbolizer->getChannelSelection()->setGrayChannel(scMono);
653 getCompositionInfo();
655 m_mapDisplay->refresh();
660 if(m_symbolizer->getChannelSelection()->getRedChannel() == 0)
664 m_symbolizer->getChannelSelection()->setRedChannel(scRed);
669 getCompositionInfo();
671 m_mapDisplay->refresh();
676 if(m_symbolizer->getChannelSelection()->getGreenChannel() == 0)
680 m_symbolizer->getChannelSelection()->setGreenChannel(scGreen);
685 getCompositionInfo();
687 m_mapDisplay->refresh();
692 if(m_symbolizer->getChannelSelection()->getBlueChannel() == 0)
696 m_symbolizer->getChannelSelection()->setBlueChannel(scBlue);
701 getCompositionInfo();
703 m_mapDisplay->refresh();
708 if(m_symbolizer->getChannelSelection()->getRedChannel() == 0)
712 m_symbolizer->getChannelSelection()->setRedChannel(scRed);
715 if(m_symbolizer->getChannelSelection()->getGreenChannel() == 0)
719 m_symbolizer->getChannelSelection()->setGreenChannel(scGreen);
722 if(m_symbolizer->getChannelSelection()->getBlueChannel() == 0)
726 m_symbolizer->getChannelSelection()->setBlueChannel(scBlue);
731 getCompositionInfo();
733 m_mapDisplay->refresh();
738 emit previewClicked();
756 m_mapDisplay->installEventFilter(m_tool);
761 m_ui->m_redComboBox->clear();
762 m_ui->m_greenComboBox->clear();
763 m_ui->m_blueComboBox->clear();
764 m_ui->m_monoComboBox->clear();
766 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
772 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
776 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
778 m_ui->m_redComboBox->addItem(QString::number(i));
779 m_ui->m_greenComboBox->addItem(QString::number(i));
780 m_ui->m_blueComboBox->addItem(QString::number(i));
781 m_ui->m_monoComboBox->addItem(QString::number(i));
799 std::size_t nRules = cs->
getRules().size();
805 const std::vector<te::se::Symbolizer*>& symbolizers = rule->
getSymbolizers();
806 assert(!symbolizers.empty());
810 assert(m_symbolizer);
812 if(m_symbolizer->getChannelSelection())
814 m_ui->m_monoComboBox->setEnabled(
false);
815 m_ui->m_redComboBox->setEnabled(
false);
816 m_ui->m_greenComboBox->setEnabled(
false);
817 m_ui->m_blueComboBox->setEnabled(
false);
823 m_ui->m_compositionToolButton->setChecked(
true);
826 setComboBoxText(m_ui->m_redComboBox, name);
828 setComboBoxText(m_ui->m_greenComboBox, name);
830 setComboBoxText(m_ui->m_blueComboBox, name);
832 m_ui->m_redComboBox->setEnabled(
true);
833 m_ui->m_greenComboBox->setEnabled(
true);
834 m_ui->m_blueComboBox->setEnabled(
true);
838 m_ui->m_monoToolButton->setChecked(
true);
841 setComboBoxText(m_ui->m_redComboBox, name);
843 m_ui->m_monoComboBox->setEnabled(
true);
847 m_ui->m_redToolButton->setChecked(
true);
850 setComboBoxText(m_ui->m_redComboBox, name);
852 m_ui->m_redComboBox->setEnabled(
true);
856 m_ui->m_greenToolButton->setChecked(
true);
859 setComboBoxText(m_ui->m_greenComboBox, name);
861 m_ui->m_greenComboBox->setEnabled(
true);
865 m_ui->m_blueToolButton->setChecked(
true);
868 setComboBoxText(m_ui->m_blueComboBox, name);
870 m_ui->m_blueComboBox->setEnabled(
true);
877 QString name = value.c_str();
881 for(
int i = 0; i < cb->count(); ++i)
883 if(cb->itemText(i) == name)
885 cb->setCurrentIndex(i);
894 cb->setCurrentIndex(cb->count() - 1);
903 QImage img = m_draftOriginal->toImage();
905 QPixmap* draft = m_mapDisplay->getDraftPixmap();
907 draft->fill(Qt::transparent);
910 p.drawImage(0, 0, img, 0, 0, m_ui->m_horizontalSlider->value(), m_ui->m_verticalSlider->value());
913 m_mapDisplay->repaint();
te::gm::Envelope * getExtent()
Returns the geographic extension of the raster data.
A selected channel to be display.
The Style defines the styling that is to be applied to a geographic dataset (vector geometries or cov...
The CoverageStyle defines the styling that is to be applied to a subset of Coverage data...
const double & getUpperRightX() const
It returns a constant refernce to the x coordinate of the upper right corner.
TESEEXPORT Style * CreateCoverageStyle(const std::vector< te::rst::BandProperty * > &properties)
Try creates an appropriate coverage style based on given band properties.
double m_urx
Upper right corner x-coordinate.
const double & getLowerLeftY() const
It returns a constant refernce to the y coordinate of the lower left corner.
SelectedChannel * getRedChannel() const
An utility struct for representing 2D coordinates.
SelectedChannel * getBlueChannel() const
const double & getUpperRightY() const
It returns a constant refernce to the x coordinate of the upper right corner.
std::string getSourceChannelName() const
Rule * getRule(std::size_t i) const
const std::vector< Rule * > & getRules() const
double m_llx
Lower left corner x-coordinate.
An Envelope defines a 2D rectangular region.
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.
ColorCompositionType getColorCompositionType() const
The RasterSymbolizer describes how to render raster/matrix-coverage data (e.g., satellite photos...
const std::vector< Symbolizer * > & getSymbolizers() const
double m_lly
Lower left corner y-coordinate.
int getSRID() const
Returns the raster spatial reference system identifier.
SelectedChannel * getGreenChannel() const
Polygon is a subclass of CurvePolygon whose rings are defined by linear rings.
A Rule is used to attach property/scale conditions to and group the individual symbols used for rende...
double m_ury
Upper right corner y-coordinate.
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
TEMAPEXPORT te::rst::Raster * GetExtentRaster(te::rst::Raster *raster, int w, int h, const te::gm::Envelope &bbox, int bboxSRID, const te::gm::Envelope &visibleArea, int srid)
void setSourceChannelName(const std::string &name)
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
Envelope intersection(const Envelope &rhs) const
It returns an envelope that represents the point set intersection with another envelope.
SelectedChannel * getGrayChannel() const
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 isValid() const
It tells if the rectangle is valid or not.
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)
ChannelSelection specifies the false-color channel selection for a multi-spectral raster source (such...