[Qgis-developer] add rasterlayer to qgsmapcanvas

Denis Rouzaud denis.rouzaud at gmail.com
Mon Jun 9 23:10:42 PDT 2014


 From a quick look, maybe the destination CRS of the map canvas is missing.

In a code, I used:

mMapCanvas->setCrsTransformEnabled( true );
mMapCanvas->setDestinationCrs( xxx );
mMapCanvas->refresh();


http://qgis.org/api/classQgsMapCanvas.html#ab7cb4f74b2c21b77783bd1f49f5878d8

Cheers,

Denis




On 08.06.2014 12:49, Felix Schmidt wrote:
> Hello everyone, did anybody assorted my code and had an idea, where 
> the problem can be located. I am so confused about the behavior of 
> this plugin. The code you can also find on Github 
> (https://github.com/MenschMarcus/HiBo-plugin)
>
>  hibo.py:
>
> # Import the PyQt and QGIS libraries
> from PyQt4 import QtCore,  QtGui
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
> from qgis.core import *
> # Initialize Qt resources from file resources.py
> import resources
> import sys
> import os
> # Import the code for the dialog
> from Ui_hibo import Ui_hibo
>
> class hibo:
>
>     def __init__(self, iface):
>         # Save reference to the QGIS interface
>         self.iface = iface
>         self.gui = Ui_hibo ()
>     self.gui.setupUi()
>
>     def connects(self):
>         #self.dlg.ui.load_button.clicked.connect(self.loadImage)
>         pass
>
>     def initGui(self):
>         # Create action that will start plugin configuration
>         self.action = QAction(QIcon("icon.png"), "HiBo", 
> self.iface.mainWindow())
>         # connect the action to the run method
>         QObject.connect(self.action, SIGNAL("activated()"), self.run)
>
>         # Add toolbar button and menu item
>         self.iface.addToolBarIcon(self.action)
>         self.iface.addPluginToMenu("&HiBo", self.action)
>
>     def unload(self):
>         # Remove the plugin menu item and icon
>         self.iface.removePluginMenu("&HiBo",self.action)
>         self.iface.removeToolBarIcon(self.action)
>
>     # run method that performs all the real work
>     def run(self):
>         # show the dialog
>         self.gui.show()
>     #print os.getcwd()
>         result = self.gui.exec_()
>         # See if OK was pressed
>         if result == 1:
>             print "test1"
>
> ui_hibo.py:
>
> #!/usr/bin/python
> # -*- coding: utf-8 -*-
>
> import sys
> import os
>
> from PyQt4 import QtCore, QtGui
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
> from qgis.core import *
> from qgis.gui import *
>
>
> try:
>     _fromUtf8 = QtCore.QString.fromUtf8
> except AttributeError:
>     def _fromUtf8(s):
>         return s
>
> try:
>     _encoding = QtGui.QApplication.UnicodeUTF8
>     def _translate(context, text, disambig):
>         return QtGui.QApplication.translate(context, text, disambig, 
> _encoding)
> except AttributeError:
>     def _translate(context, text, disambig):
>         return QtGui.QApplication.translate(context, text, disambig)
>
> class Ui_hibo(QtGui.QDialog):
>
>     def __init__(self):
>         QtGui.QDialog.__init__(self)
>     self.setupUi()
>
>     #self.connect(self.loadRaster, QtCore.SIGNAL('triggered()'), 
> self.loadRasterImage)
>     self.connect(self.canvasRaster, QtCore.SIGNAL('renderStarting()'), 
> self.startRendering)
>
>         self.setWindowTitle(self.tr("HiBo"))
>
>     def setupUi(self):
>     """setup for toolbar"""
>     self.toolbarVector     = QtGui.QToolBar('vector', self)
>     self.toolbarRaster     = QtGui.QToolBar('raster', self)
>
>     self.zoominVector     = QtGui.QAction(QtGui.QIcon("zoomin.png"), 
> 'zoominVector', self)
>     self.zoomoutVector     = QtGui.QAction(QtGui.QIcon("zoomout.png"), 
> 'zoomoutVector', self)
>     self.moveVector     = QtGui.QAction(QtGui.QIcon("move.png"), 
> 'moveVector', self)
>     self.loadVector     = QtGui.QAction(QtGui.QIcon("load.png"), 
> 'loadVector', self)
>     self.zoominRaster     = QtGui.QAction(QtGui.QIcon("zoomin.png"), 
> 'zoominRaster', self)
>     self.zoomoutRaster     = QtGui.QAction(QtGui.QIcon("zoomout.png"), 
> 'zoomoutRaster', self)
>     self.moveRaster     = QtGui.QAction(QtGui.QIcon("move.png"), 
> 'moveRaster', self)
>     self.loadRaster     = QtGui.QAction(QtGui.QIcon("load.png"), 
> 'loadRaster', self)
>     self.selectRaster    = QtGui.QAction(QtGui.QIcon("select.png"), 
> 'selectRaster', self)
>
>     self.toolbarVector.addAction(self.loadVector)
>     self.toolbarVector.addAction(self.zoominVector)
>     self.toolbarVector.addAction(self.zoomoutVector)
>     self.toolbarVector.addAction(self.moveVector)
>
>     self.toolbarRaster.addAction(self.loadRaster)
>     self.toolbarRaster.addAction(self.zoominRaster)
>     self.toolbarRaster.addAction(self.zoomoutRaster)
>     self.toolbarRaster.addAction(self.moveRaster)
>     self.toolbarRaster.addAction(self.selectRaster)
>
>     """setup for canvas"""
>     self.canvasVector    = QgsMapCanvas()
> self.canvasVector.setCanvasColor(QtGui.QColor(255,255,255,255))
>     self.canvasVector.enableAntiAliasing(True)
>     self.canvasRaster    = QgsMapCanvas()
> self.canvasRaster.setCanvasColor(QtGui.QColor(255,255,255,255))
>     self.canvasRaster.enableAntiAliasing(True)
>
>     #fileName = QFileDialog.getOpenFileName(None, "historical map", 
> ".", "Image Files (*.png *.jpg *.bmp *.tiff)")
>     fileName = "/home/felix/programming/HiBo-plugin/hibo/map.tif"
>         fileInfo = QFileInfo(fileName)
>         baseName = fileInfo.baseName()
>         rlayer = QgsRasterLayer(fileName, baseName)
>         if not rlayer.isValid():
>             print "Layer failed to load!"
>         QgsMapLayerRegistry.instance().addMapLayer(rlayer)
>     self.canvasRaster.setExtent(rlayer.extent())
>     self.canvasRaster.setLayerSet( [ QgsMapCanvasLayer(rlayer) ] )
>
>     """layout"""
>     vectorarea     = QtGui.QWidget()
>     rasterarea     = QtGui.QWidget()
>
>     layoutVector     = QtGui.QVBoxLayout()
>     layoutRaster     = QtGui.QVBoxLayout()
>
>     vectorarea.setLayout(layoutVector)
>     rasterarea.setLayout(layoutRaster)
>
>     layoutVector.addWidget(self.toolbarVector)
>     layoutVector.addWidget(self.canvasVector)
>     layoutRaster.addWidget(self.toolbarRaster)
>     layoutRaster.addWidget(self.canvasRaster)
>
>     layoutCentral = QtGui.QHBoxLayout(self)
>     layoutCentral.addWidget(vectorarea)
>     layoutCentral.addWidget(rasterarea)
>
>     def retranslateUi(self):
>         self.setWindowTitle(_translate("hibo", "hibo", None))
>
>     #here it loads only in the legend of qgis main window
>     """@QtCore.pyqtSlot()
>     def loadRasterImage(self):
>         #fileName = QFileDialog.getOpenFileName(None, "historical 
> map", ".", "Image Files (*.png *.jpg *.bmp *.tiff)")
>     fileName = "/home/felix/programming/HiBo-plugin/hibo/map.tif"
>         fileInfo = QFileInfo(fileName)
>         baseName = fileInfo.baseName()
>         rlayer = QgsRasterLayer(fileName, baseName)
>         if not rlayer.isValid():
>             print "Layer failed to load!"
>         QgsMapLayerRegistry.instance().addMapLayer(rlayer)
>     self.canvasRaster.setExtent(rlayer.extent())
>     self.canvasRaster.setLayerSet( [ QgsMapCanvasLayer(rlayer) ] )
>     #self.canvasRaster.refresh()"""
>
>     @QtCore.pyqtSlot()
>     def startRendering(self):
>     print "start rendering"
>
>
>
> Am 06.06.2014 07:40, schrieb Denis Rouzaud:
>> can you maybe show us the whole code?
>>
>> Cheers,
>>
>> Denis
>>
>> On 05.06.2014 20:55, Felix Schmidt wrote:
>>> The layer is loading in the legend and shown in the main window.
>>> What do you mean, with the symbology. In front of the layer, in the 
>>> legend, is a raster icon, if you mean this.
>>>
>>> I copied the code from the slot to the building of the ui. so the 
>>> layer is loading in the canvas by building the gui and not by 
>>> clicking in the toolbar.
>>>
>>> If I start qgis with this state of code, its starts and load load 
>>> the layer, when I start the plugin the canvas is still white and 
>>> when I clicked on the starting picture of qgis which is still there, 
>>> the layer is shown in the canvas of the plugin.
>>>
>>> It's confusing me.
>>>
>>> Felix
>>>
>>> Am 05.06.2014 20:20, schrieb Tim Sutton:
>>>> Hi
>>>>
>>>>
>>>>
>>>> On Fri, Jun 6, 2014 at 12:15 AM, Felix Schmidt 
>>>> <felix.schmidt at uni-weimar.de <mailto:felix.schmidt at uni-weimar.de>> 
>>>> wrote:
>>>>
>>>>     Same mistake with refresh() at the end.
>>>>
>>>>     Am 05.06.2014 19:11, schrieb Rouzaud Denis:
>>>>
>>>>         self.canvasRaster.refresh() at the end ?
>>>>
>>>>         On 05 Jun 2014, at 18:27, Felix Schmidt
>>>>         <felix.schmidt at uni-weimar.de
>>>>         <mailto:felix.schmidt at uni-weimar.de>> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>             Hello everyone,
>>>>             I try to load on signal, a rasterlayer to qgsmapcanvas.
>>>>             I try it like in
>>>>             the pycookbook:
>>>>
>>>>             @QtCore.pyqtSlot()
>>>>                  def loadRasterImage(self):
>>>>                  print "slot works"
>>>>                      fileName = QFileDialog.getOpenFileName(None,
>>>>             "historical map",
>>>>             ".", "Image Files (*.png *.jpg *.bmp *.tiff)")
>>>>                      fileInfo = QFileInfo(fileName)
>>>>                      baseName = fileInfo.baseName()
>>>>                      rlayer = QgsRasterLayer(fileName, baseName)
>>>>                      if not rlayer.isValid():
>>>>                          print "Layer failed to load!"
>>>>              QgsMapLayerRegistry.instance().addMapLayer(rlayer)
>>>>                  print rlayer.extent().yMinimum()
>>>>              self.canvasRaster.setExtent(rlayer.extent())
>>>>                  self.canvasRaster.setLayerSet( [
>>>>             QgsMapCanvasLayer(rlayer) ] )
>>>>
>>>>             self.canvasRaster is defined in the gui . I search for
>>>>             8h but I dont
>>>>             find a solutionen, because there are no errors.
>>>>
>>>>             It load the rasterlayer to the main program of qgis,
>>>>             but not in my
>>>>             qgsmapcanvas. it is still white.
>>>>
>>>>
>>>> Is the layer loaded, showing in the legend but just not visible? 
>>>> Check the symbology for the layer is defined properly if this is 
>>>> the case.
>>>>
>>>> Regards
>>>>
>>>> Tim
>>>>
>>>>             please help me.
>>>>
>>>>             Felix
>>>>
>>>>
>>>>
>>>>             _______________________________________________
>>>>             Qgis-developer mailing list
>>>>             Qgis-developer at lists.osgeo.org
>>>>             <mailto:Qgis-developer at lists.osgeo.org>
>>>>             http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>>>
>>>>     _______________________________________________
>>>>     Qgis-developer mailing list
>>>>     Qgis-developer at lists.osgeo.org
>>>>     <mailto:Qgis-developer at lists.osgeo.org>
>>>>     http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> Tim Sutton - QGIS Project Steering Committee Member
>>>> ==============================================
>>>> Please do not email me off-list with technical
>>>> support questions. Using the lists will gain
>>>> more exposure for your issues and the knowledge
>>>> surrounding your issue will be shared with all.
>>>>
>>>> Irc: timlinux on #qgis at freenode.net <http://freenode.net>
>>>> ==============================================
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20140610/68e9653c/attachment-0001.html>


More information about the Qgis-developer mailing list