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...