[Qgis-developer] update plugin to QGIS 2.0

Matthias Kuhn matthias.kuhn at gmx.ch
Fri Aug 2 06:22:23 PDT 2013


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.

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