[Qgis-developer] update plugin to QGIS 2.0

Etienne Tourigny etourigny.dev at gmail.com
Fri Aug 2 04:50:08 PDT 2013


from the api http://www.qgis.org/api/classQgsRasterIdentifyResult.html#a8537d25fdff215e7e9650b71a0a16783

results() returns a QMap<int, QVariant> (one item for each band), it
does not return a tuple, so you should actually call

ident = layer.dataProvider().identify(QgsPoint(x,y),QgsRaster.IdentifyFormatValue).results()

and then test that ident is not empty (i,e. ident is not None and
ident.iterkeys() is not None)

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.


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


More information about the Qgis-developer mailing list