[Qgis-developer] update plugin to QGIS 2.0
Matthias Kuhn
matthias.kuhn at gmx.ch
Fri Aug 2 07:02:23 PDT 2013
On Fre 02 Aug 2013 15:52:19 CEST, Etienne Tourigny wrote:
> 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"
>
Ah, now I see.
QVariant() constructs an invalid QVariant and not a NULL QVariant. [1]
Glad we could sort this out :-)
Kind Regards
Matthias
[1] http://qt-project.org/doc/qt-4.8/qvariant.html#QVariant
> 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