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)
73 QGridLayout* displayLayout =
new QGridLayout(
m_ui->m_frame);
77 displayLayout->setContentsMargins(0,0,0,0);
79 QGridLayout* eyeBirdDisplayLayout =
new QGridLayout(
m_ui->m_eyeBirdFrame);
82 eyeBirdDisplayLayout->setContentsMargins(0,0,0,0);
84 QGridLayout* zoomInDisplayLayout =
new QGridLayout(
m_ui->m_zoomInFrame);
87 zoomInDisplayLayout->setContentsMargins(0,0,0,0);
98 connect(
m_ui->m_zoomInActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onZoomAreaToggled(
bool)));
99 connect(
m_ui->m_zoomOutActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onZoomOutToggled(
bool)));
100 connect(
m_ui->m_panActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onPanToggled(
bool)));
102 connect(
m_ui->m_geomActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onGeomToggled(
bool)));
103 connect(
m_ui->m_extentActionToolButtontoolButton, SIGNAL(toggled(
bool)),
this, SLOT(
onBoxToggled(
bool)));
122 m_ui->m_previewToolButton->setIcon(QIcon::fromTheme(
"check"));
123 m_ui->m_zoomInActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"zoom-area"));
124 m_ui->m_zoomOutActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"zoom-out"));
125 m_ui->m_panActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"pan"));
126 m_ui->m_recomposeActionToolButton->setIcon(QIcon::fromTheme(
"zoom-extent"));
127 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"placemark"));
128 m_ui->m_geomActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"edit-polygon"));
129 m_ui->m_extentActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"edit-box"));
130 m_ui->m_readPixelActionToolButton->setIcon(QIcon::fromTheme(
"color-picker"));
131 m_ui->m_extraDisplaysToolButton->setIcon(QIcon::fromTheme(
"view-map-display-extra"));
132 m_ui->m_monoLabel->setPixmap(QIcon::fromTheme(
"bullet-black").pixmap(16,16));
133 m_ui->m_redLabel->setPixmap(QIcon::fromTheme(
"bullet-red").pixmap(16,16));
134 m_ui->m_greenLabel->setPixmap(QIcon::fromTheme(
"bullet-green").pixmap(16,16));
135 m_ui->m_blueLabel->setPixmap(QIcon::fromTheme(
"bullet-blue").pixmap(16,16));
136 m_ui->m_monoToolButton->setIcon(QIcon::fromTheme(
"channel-gray"));
137 m_ui->m_compositionToolButton->setIcon(QIcon::fromTheme(
"channels"));
138 m_ui->m_redToolButton->setIcon(QIcon::fromTheme(
"channel-red"));
139 m_ui->m_greenToolButton->setIcon(QIcon::fromTheme(
"channel-green"));
140 m_ui->m_blueToolButton->setIcon(QIcon::fromTheme(
"channel-blue"));
142 m_ui->m_previewToolButton->setVisible(
false);
150 m_layer->setVisibility(m_visibility);
161 m_visibility = m_layer->getVisibility();
165 std::list<te::map::AbstractLayerPtr> list;
166 list.push_back(m_layer);
170 m_mapDisplay->setMouseTracking(
true);
171 m_mapDisplay->setLayerList(list);
172 m_mapDisplay->setSRID(m_layer->getSRID(),
false);
175 m_mapDisplay->setExtent(e,
false);
179 std::auto_ptr<te::da::DataSet> ds(m_layer->getData());
181 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
184 int w = m_mapDisplay->getWidth();
185 int h = m_mapDisplay->getHeight();
186 double resX = inputRst->getResolutionX();
187 double resY = inputRst->getResolutionY();
188 te::gm::Coord2D cc(inputRst->getExtent()->getCenter().x, inputRst->getExtent()->getCenter().y);
189 te::gm::Coord2D bowerLeftWorld(cc.x - (resX * ( w / 2 )), cc.y - (resY * ( h / 2 )));
190 te::gm::Coord2D bowerUpperWorld(cc.x + (resX * ( w / 2 )), cc.y + (resY * ( h / 2 )));
192 te::gm::Envelope env(bowerLeftWorld.x, bowerLeftWorld.y, bowerUpperWorld.
x, bowerUpperWorld.
y);
194 m_mapDisplay->setExtent(env,
false);
197 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
198 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
204 getCompositionInfo();
209 std::list<te::map::AbstractLayerPtr> list;
210 list.push_back(layer);
211 list.push_back(m_layer);
213 m_mapDisplay->setLayerList(list);
214 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
215 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
218 m_mapDisplay->setExtent(e,
true);
228 std::list<te::map::AbstractLayerPtr> list;
229 list.push_back(m_layer);
231 m_mapDisplay->setLayerList(list);
232 m_zoomInMapDisplay->setList(list, m_layer->getSRID());
233 m_eyeBirdMapDisplay->setList(list, m_layer->getSRID());
236 m_mapDisplay->setExtent(e,
true);
241 return m_mapDisplay->getExtent();
253 reprojectedBBOX.
transform(m_mapDisplay->getSRID(), m_layer->getSRID());
257 std::auto_ptr<te::da::DataSet> ds(m_layer->getData());
259 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
268 int w = (int)endGrid.
x - (
int)startGrid.
x;
269 int h = (int)startGrid.
y - (
int)endGrid.
y;
271 raster =
te::map::GetExtentRaster(inputRst.get(), w, h, reprojectedBBOX, m_mapDisplay->getSRID(), ibbox, m_layer->getSRID());
275 raster =
te::map::GetExtentRaster(inputRst.get(), m_mapDisplay->getWidth(), m_mapDisplay->getHeight(), reprojectedBBOX, m_mapDisplay->getSRID(), ibbox, m_layer->getSRID());
286 QPixmap* draft = m_mapDisplay->getDraftPixmap();
287 draft->fill(Qt::transparent);
290 Canvas canvas(m_mapDisplay->width(), m_mapDisplay->height());
294 bool hasToDelete =
false;
311 m_mapDisplay->repaint();
322 m_ui->m_toolsFrame->setVisible(!asPreview);
323 m_ui->m_label->setVisible(!asPreview);
324 m_ui->m_previewToolButton->setVisible(asPreview);
326 hideExtraDisplaysTool(asPreview);
331 m_mapDisplay->installEventFilter(m_panTool);
336 m_mapDisplay->installEventFilter(m_zoomTool);
343 m_ui->m_ccFrame->setVisible(!hide);
348 m_ui->m_toolLine->setVisible(!hide);
349 hidePickerTool(hide);
357 m_ui->m_pointActionToolButtontoolButton->setVisible(!hide);
362 m_ui->m_geomActionToolButtontoolButton->setVisible(!hide);
367 m_ui->m_extentActionToolButtontoolButton->setVisible(!hide);
372 m_ui->m_readPixelActionToolButton->setVisible(!hide);
377 m_ui->m_extraDisplaysToolButton->setChecked(
false);
379 m_ui->m_extraLine->setVisible(!hide);
380 m_ui->m_extraDisplaysToolButton->setVisible(!hide);
387 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"pointer-selection"));
388 m_pointCursor = Qt::ArrowCursor;
392 m_ui->m_pointActionToolButtontoolButton->setIcon(QIcon::fromTheme(
"placemark"));
393 m_pointCursor = Qt::CrossCursor;
399 assert(m_layer.get());
401 if(m_ui->m_extraDisplaysToolButton->isChecked())
404 m_zoomInMapDisplay->drawCursorPosition((
double) coordinate.rx(), (double)coordinate.ry());
410 m_mapDisplay->getDraftPixmap()->fill(QColor(0, 0, 0, 0));
419 canvasInstance.draw(geom);
422 m_mapDisplay->repaint();
426 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
431 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
436 te::gm::Coord2D pixelLocation = inputRst->getGrid()->geoToGrid((
double) coordinate.rx(), (double)coordinate.ry());
437 m_currentColumn = pixelLocation.
x;
438 m_currentRow = pixelLocation.
y;
441 xStr.append(QString::number(coordinate.rx(),
'f', 5));
443 yStr.append(QString::number(coordinate.ry(),
'f', 5));
444 QString cStr(tr(
"Column: "));
445 cStr.append(QString::number(m_currentColumn));
446 QString lStr(tr(
"Line: "));
447 lStr.append(QString::number(m_currentRow));
457 m_ui->m_label->setText(label);
465 emit envelopeAcquired(env);
471 emit geomAquired(poly);
477 emit pointPicked(point.x(), point.y());
486 emit mapDisplayExtentChanged();
495 setCurrentTool(zoomArea);
504 setCurrentTool(zoomOut);
524 connect(pp, SIGNAL(pointPicked(QPointF&)),
this, SLOT(onPointPicked(QPointF&)));
560 m_ui->m_extraDisplaysFrame->setVisible(checked);
561 m_eyeBirdMapDisplay->setEnabled(checked);
562 m_zoomInMapDisplay->setEnabled(checked);
569 m_mapDisplay->setExtent(env);
576 std::string name = m_ui->m_redComboBox->itemText(index).toStdString();
578 m_symbolizer->getChannelSelection()->getRedChannel()->setSourceChannelName(name);
580 m_mapDisplay->refresh();
585 std::string name = m_ui->m_greenComboBox->itemText(index).toStdString();
587 m_symbolizer->getChannelSelection()->getGreenChannel()->setSourceChannelName(name);
589 m_mapDisplay->refresh();
594 std::string name = m_ui->m_blueComboBox->itemText(index).toStdString();
596 m_symbolizer->getChannelSelection()->getBlueChannel()->setSourceChannelName(name);
598 m_mapDisplay->refresh();
603 std::string name = m_ui->m_monoComboBox->itemText(index).toStdString();
605 m_symbolizer->getChannelSelection()->getGrayChannel()->setSourceChannelName(name);
607 m_mapDisplay->refresh();
612 if(m_symbolizer->getChannelSelection()->getGrayChannel() == 0)
616 m_symbolizer->getChannelSelection()->setGrayChannel(scMono);
621 getCompositionInfo();
623 m_mapDisplay->refresh();
628 if(m_symbolizer->getChannelSelection()->getRedChannel() == 0)
632 m_symbolizer->getChannelSelection()->setRedChannel(scRed);
637 getCompositionInfo();
639 m_mapDisplay->refresh();
644 if(m_symbolizer->getChannelSelection()->getGreenChannel() == 0)
648 m_symbolizer->getChannelSelection()->setGreenChannel(scGreen);
653 getCompositionInfo();
655 m_mapDisplay->refresh();
660 if(m_symbolizer->getChannelSelection()->getBlueChannel() == 0)
664 m_symbolizer->getChannelSelection()->setBlueChannel(scBlue);
669 getCompositionInfo();
671 m_mapDisplay->refresh();
676 if(m_symbolizer->getChannelSelection()->getRedChannel() == 0)
680 m_symbolizer->getChannelSelection()->setRedChannel(scRed);
683 if(m_symbolizer->getChannelSelection()->getGreenChannel() == 0)
687 m_symbolizer->getChannelSelection()->setGreenChannel(scGreen);
690 if(m_symbolizer->getChannelSelection()->getBlueChannel() == 0)
694 m_symbolizer->getChannelSelection()->setBlueChannel(scBlue);
699 getCompositionInfo();
701 m_mapDisplay->refresh();
706 emit previewClicked();
714 m_mapDisplay->installEventFilter(m_tool);
719 m_ui->m_redComboBox->clear();
720 m_ui->m_greenComboBox->clear();
721 m_ui->m_blueComboBox->clear();
722 m_ui->m_monoComboBox->clear();
724 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
730 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
734 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
736 m_ui->m_redComboBox->addItem(QString::number(i));
737 m_ui->m_greenComboBox->addItem(QString::number(i));
738 m_ui->m_blueComboBox->addItem(QString::number(i));
739 m_ui->m_monoComboBox->addItem(QString::number(i));
757 std::size_t nRules = cs->
getRules().size();
763 const std::vector<te::se::Symbolizer*>& symbolizers = rule->
getSymbolizers();
764 assert(!symbolizers.empty());
768 assert(m_symbolizer);
770 if(m_symbolizer->getChannelSelection())
772 m_ui->m_monoComboBox->setEnabled(
false);
773 m_ui->m_redComboBox->setEnabled(
false);
774 m_ui->m_greenComboBox->setEnabled(
false);
775 m_ui->m_blueComboBox->setEnabled(
false);
781 m_ui->m_compositionToolButton->setChecked(
true);
784 setComboBoxText(m_ui->m_redComboBox, name);
786 setComboBoxText(m_ui->m_greenComboBox, name);
788 setComboBoxText(m_ui->m_blueComboBox, name);
790 m_ui->m_redComboBox->setEnabled(
true);
791 m_ui->m_greenComboBox->setEnabled(
true);
792 m_ui->m_blueComboBox->setEnabled(
true);
796 m_ui->m_monoToolButton->setChecked(
true);
799 setComboBoxText(m_ui->m_redComboBox, name);
801 m_ui->m_monoComboBox->setEnabled(
true);
805 m_ui->m_redToolButton->setChecked(
true);
808 setComboBoxText(m_ui->m_redComboBox, name);
810 m_ui->m_redComboBox->setEnabled(
true);
814 m_ui->m_greenToolButton->setChecked(
true);
817 setComboBoxText(m_ui->m_greenComboBox, name);
819 m_ui->m_greenComboBox->setEnabled(
true);
823 m_ui->m_blueToolButton->setChecked(
true);
826 setComboBoxText(m_ui->m_blueComboBox, name);
828 m_ui->m_blueComboBox->setEnabled(
true);
835 QString name = value.c_str();
839 for(
int i = 0; i < cb->count(); ++i)
841 if(cb->itemText(i) == name)
843 cb->setCurrentIndex(i);
852 cb->setCurrentIndex(cb->count() - 1);
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.
#define TE_OPAQUE
For an RGBA color this is the value of the alpha-channel for totally opaque.
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...
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
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.
#define TE_TRANSPARENT
For an RGBA color this is the value of the alpha-channel for totally transparent. ...
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
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)
TEGEOMEXPORT Geometry * GetGeomFromEnvelope(const Envelope *const e, int srid)
It creates a Geometry (a polygon) from the given envelope.
ChannelSelection specifies the false-color channel selection for a multi-spectral raster source (such...