[Qgis-developer] update plugin to QGIS 2.0

Etienne Tourigny etourigny.dev at gmail.com
Fri Aug 2 06:52:19 PDT 2013


On Fri, Aug 2, 2013 at 10:22 AM, Matthias Kuhn <matthias.kuhn at gmx.ch> wrote:
> On Fre 02 Aug 2013 15:13:04 CEST, Etienne Tourigny wrote:
>> On Fri, Aug 2, 2013 at 9:37 AM, Matthias Kuhn <matthias.kuhn at gmx.ch> wrote:
>>> Hi
>>>
>>> On Fre 02 Aug 2013 13:50:08 CEST, Etienne Tourigny wrote:
>>>>
>>>> for each band, if the point is outside of the raster extent or is
>>>> nodata, the value will be a null QVariant (i.e. QVariant()) which in
>>>> python is None.
>>>
>>> It will be a QPyNullVariant so doing
>>>
>>> value = QPyNullVariant( int )
>>> if not value:
>>>     print 'Is NULL'
>>> else:
>>>     print 'Is not NULL'
>>>
>>> if value is None:
>>>     print 'Is None'
>>> else:
>>>     print 'Is NOT None'
>>>
>>> will print:
>>> Is NULL
>>> Is NOT None
>>
>> Hi,
>>
>> I was not referring to the value of QPyNullVariant( int ), but the
>> value that results() would return in the case of nodata (which is
>> QVariant() in the c++ code)
>>
>> unless mistaken, that would be converted to None by Sip - or am I wrong?
>>
>
> The SIP API v2 for QVariant defines:
>
> An Invalid QVariant will be represented as None
> A Null QVariant will be represented as QPyNullVariant [1]
>
> Except for feature attributes (e.g. for a vectorlayer: feature['attr'])
> which is patched by QGIS to become None in case of a Null value.

thanks for the clarification

Although it seems that testing for None does the trick,,. In the case
of nodata pixels this test does seem to work:

                  bandvalue = ident[iband]
                  if bandvalue is None:
                      bandvalue = "no data"

and in c++ nodata pixels are defined as QVariant() (i.e. a null QVariant)

>
> Matthias
>
> [1]
> http://pyqt.sourceforge.net/Docs/PyQt4/python_v3.html#qvariant
>
>>>
>>> Sorry for the smart-arsing ;)
>>>
>>> -- Matthias
>>>
>>>>
>>>>
>>>> cheers
>>>> Etienne
>>>>
>>>> On Fri, Aug 2, 2013 at 7:13 AM, Otto Dassau <dassau at gbd-consult.de> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> thanks for your hints, I think I am on the right track now. I had a look at
>>>>> the value tool plugin and tried to adapt the method accordingly:
>>>>>
>>>>> def sampleRaster20(self, layer, x, y):
>>>>>    #success, data = layer.dataProvider().identify(QgsPoint(x,y))
>>>>>    success, data = layer.dataProvider().identify(QgsPoint(x,y),QgsRaster.IdentifyFormatValue).results()
>>>>>    for band, value in data.items():
>>>>>       return value
>>>>>
>>>>> But now I get another error message
>>>>>
>>>>>  File
>>>>>  "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>  line 448, in printValue self.showValues() File
>>>>>  "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>  line 454, in showValues self.plot() File
>>>>>  "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>  line 526, in plot w = float(self.sampleRaster(self.InRastW.currentText(),
>>>>>  self.xCoord, self.yCoord))/10 File
>>>>>  "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>  line 300, in sampleRaster return self.sampleRaster20(layer, x, y) File
>>>>>  "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>  line 285, in sampleRaster20 success, data =
>>>>>  layer.dataProvider().identify(QgsPoint(x,y), QgsRaster.IdentifyFormatValue
>>>>>  ).results() ValueError: need more than 1 value to unpack
>>>>>
>>>>> Do you have an idea for this, too?
>>>>>
>>>>> Thanks
>>>>> Otto
>>>>>
>>>>> Am Thu, 1 Aug 2013 16:00:08 -0300
>>>>> schrieb Etienne Tourigny <etourigny.dev at gmail.com>:
>>>>>
>>>>>> Have a look at the source of the value tool plugin, it calls the identify()
>>>>>> method and has been updated to 2.0 api.
>>>>>>
>>>>>> Etienne
>>>>>>
>>>>>> On Thu, Aug 1, 2013 at 1:58 PM, Otto Dassau <dassau at gbd-consult.de> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I want to update a plugin from 1.8 to QGIS 2.0 and it throws following
>>>>>>> error:
>>>>>>>
>>>>>>> Traceback (most recent call last):
>>>>>>> File
>>>>>>>
>>>>>>>
>>>>>>> "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>>> line 447, in printValue self.showValues() File
>>>>>>>
>>>>>>>
>>>>>>> "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>>> line 453, in showValues self.plot() File
>>>>>>>
>>>>>>>
>>>>>>> "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>>> line 514, in plot w = float(self.sampleRaster(self.InRastW.currentText(),
>>>>>>> self.xCoord, self.yCoord))/10 File
>>>>>>>
>>>>>>>
>>>>>>> "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>>> line 299, in sampleRaster return self.sampleRaster20(layer, x, y) File
>>>>>>>
>>>>>>>
>>>>>>> "/home/dassau/.qgis2/python/plugins/weibullanalyse/weibullanalysedialog.py",
>>>>>>> line 284, in sampleRaster20 success, data =
>>>>>>> layer.dataProvider().identify(QgsPoint(x,y))
>>>>>>>
>>>>>>> TypeError:
>>>>>>> QgsRasterDataProvider.identify(QgsPoint, QgsRaster.IdentifyFormat,
>>>>>>> QgsRectangle theExtent=QgsRectangle(), int theWidth=0, int theHeight=0):
>>>>>>> not enough arguments
>>>>>>>
>>>>>>> I found at
>>>>>>> http://hub.qgis.org/wiki/quantum-gis/API_changes_for_version_20 the
>>>>>>> section QgsRasterDataProvider which should fit. And the Method, where I
>>>>>>> assume the error occurs should be this
>>>>>>>
>>>>>>> # get value at mouse position QGIS <= 1.8 (working for 1.8)
>>>>>>> def sampleRaster18(self, layer, x, y):
>>>>>>>    success, data = layer.identify(QgsPoint(x,y))
>>>>>>>    for band, value in data.items():
>>>>>>>      return value
>>>>>>>
>>>>>>> now what I tried but doesn't work (see error above)
>>>>>>>
>>>>>>> # get value at mouse position QGIS >= 2.0 (not working yet :()
>>>>>>> def sampleRaster20(self, layer, x, y):
>>>>>>>    success, data = layer.dataProvider().identify(QgsPoint(x,y))
>>>>>>>    for band, value in data.items():
>>>>>>>      return value
>>>>>>>
>>>>>>> my problem is, that I don't understand how to implement in sampleRaster20
>>>>>>> the new method from the API_changes_for_version_20 website which says:
>>>>>>>
>>>>>>> QMap<int, QVariant> identify( const QgsPoint & thePoint, IdentifyFormat
>>>>>>> theFormat, const QgsRectangle &theExtent = QgsRectangle(), int theWidth =
>>>>>>> 0, int theHeight = 0 )
>>>>>>>
>>>>>>> can anybody help?
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> Otto
>>>>>>> _______________________________________________
>>>>>>> Qgis-developer mailing list
>>>>>>> Qgis-developer at lists.osgeo.org
>>>>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Geoinformatik Büro Dassau - http://www.gbd-consult.de
>>>>> FOSSGIS consulting , training , support  and analysis
>>>>> Ackerstrasse 144c  ,  D - 40233 Düsseldorf  , Germany
>>>>> Tel: +49-(0)211-47468178 , Mobil: +49-(0)171-4687540
>>>>>
>>>>> --
>>>>> Community Advisor - QGIS Project Steering Committee
>>>> _______________________________________________
>>>> Qgis-developer mailing list
>>>> Qgis-developer at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>
>>>
>
>


More information about the Qgis-developer mailing list