[Qgis-developer] add rasterlayer to qgsmapcanvas

Felix Schmidt felix.schmidt at uni-weimar.de
Tue Jun 10 13:00:49 PDT 2014


I found the problem. In the hibo.py:

             self.gui = Ui_hibo ()
             self.gui.setupUi()

Without the second line everything works fine. I had called two times, 
first in the hibo.py and also in the init-function of Ui_hibo.py .

Thanks for your help =)

Felix


Am 10.06.2014 08:10, schrieb Denis Rouzaud:
> 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/31bec035/attachment-0001.html>


More information about the Qgis-developer mailing list