[postgis-users] Raster pixel value

Tom van Tilburg tom.van.tilburg at gmail.com
Mon Dec 19 01:13:10 PST 2011


Andreas,

If you got the latest ST_Clip from the repository, I found this 
information with it:

"Addition of C-based ST_MinPossibleValue to replace the existing 
ST_MinPossibleVal which uses hard-coded values. Updated dependent 
functions and scripts/plpgsql to use new function. Deleted 
scripts/plpgsql/st_minpossibleval.sql to stop people from using it. 
Associated ticket is #1298 <http://trac.osgeo.org/postgis/ticket/1298>."


Probably this means you need the very newest version of rtpostgis with 
the minpossiblevalue included in C. Not sure wheter is available for 
windows yet.
At the moment I don't have time to test but I have the feeling this new 
function in C might make things quicker and perhaps fix the error with 
nodata values I mentioned earlier. Let me know.

Regards,
  Tom

On 19-12-2011 10:01, Andreas Forø Tollefsen wrote:
> Hi Tom,
>
> I tried both functions. The St_AreaWeightedSummaryStats() works great, 
> but it takes a lot of time to complete.
>
> However, the ST_Clip() i cannot manage to get working. Seems like 
> something is broken. Any idea what can cause this error?
> I installed the latest ST_SummaryStatsAgg() and ST_Clip() from 
> http://trac.osgeo.org/postgis/browser/trunk/raster/scripts/plpgsql
>
> The query:
> SELECT foo2.gid,
> (ss).count,
>       (ss).sum,
>       (ss).mean,
>       (ss).min,
>       (ss).max
> FROM
> (SELECT foo.gid, ST_SummaryStatsAgg(gv) ss
>      FROM (SELECT p.gid, ST_Clip(r.rast, p.cell) gv
>            FROM access r, priogrid_land p
>            WHERE ST_Intersects(r.rast, p.cell)
>           ) foo
>      GROUP BY foo.gid
>     ) foo2
>
> Results in:
>
> ERROR:  function st_minpossiblevalue(text) does not exist
> LINE 1: ...esce(nodata, ST_BandNodataValue(rast, bandstart), ST_MinPoss...
>                                                              ^
> HINT:  No function matches the given name and argument types. You 
> might need to add explicit type casts.
> QUERY:  SELECT coalesce(nodata, ST_BandNodataValue(rast, bandstart), 
> ST_MinPossibleValue(newpixtype))
> CONTEXT:  PL/pgSQL function "st_clip" line 31 at assignment
>
> ********** Error **********
>
> ERROR: function st_minpossiblevalue(text) does not exist
> SQL state: 42883
> Hint: No function matches the given name and argument types. You might 
> need to add explicit type casts.
> Context: PL/pgSQL function "st_clip" line 31 at assignment
>
>
>
> 2011/12/6 Tom van Tilburg <tom.van.tilburg at gmail.com 
> <mailto:tom.van.tilburg at gmail.com>>
>
>     Andreas,
>
>     I didn't have time to reproduce your problem yet. Did you have any
>     succes by yourself on this issue?
>     Could it have something to do with counting the non-data values as
>     value? This is what I experience with a similar function (ST_Clip)
>     that consequently gave me the value '0' instead of the nodata
>     value. The result of that is that the mean was often lower than
>     expected.
>
>     Perhaps you could rewrite your previous example to something with
>     auto-generated values in the script. That saves time in reproducing.
>
>     Cheers,
>      Tom
>
>
>
>     On 25-11-2011 18:11, Andreas Forø Tollefsen wrote:
>>     Update:
>>
>>     I think my suspicion is correct. If I do a ST_Summarystats().sum
>>     and divide this on 36 my MAX value will be 1.
>>     Hence, I think the number of values counted and the number of
>>     observations counted is not equal.
>>
>>     New query:
>>     DROP TABLE IF EXISTS mountain_phil_cell;
>>
>>     SELECT
>>     a.gid As gid,
>>     (ST_SummaryStats((ST_Union(ST_MapAlgebraExpr(ST_AsRaster(a.cell,
>>     b.rast, '32BF'), b.rast, 'rast2',
>>     '32BF','INTERSECTION','0','0',0))).rast, false)).sum / 36 As avgmnt
>>     INTO mountain_phil_cell
>>     FROM
>>     priogrid_land a LEFT JOIN
>>     mountain_phil b
>>         ON ST_Intersects(a.cell, b.rast)
>>     GROUP BY a.gid
>>     ORDER BY a.gid;
>>
>>
>>     2011/11/25 Andreas Forø Tollefsen <andreasft at gmail.com
>>     <mailto:andreasft at gmail.com>>
>>
>>         A small note regarding this issue.
>>
>>         My problem is that I never get a mean value of 1 even if all
>>         pixels inside the geometry is one.
>>
>>         Could this be because: 6x6 pixels goes into one polygon when
>>         visually controlling. If each pixel has the value 1, then
>>         this will be calculated as 36 / 36 = 1. However, if it
>>         calculates the sum to be 36 and divide by a number higher
>>         than 36 pixels, then the result will always be below 1.
>>         What i am thinking is that while it sums up the pixel values
>>         correctly, it does not count only the 36 pixels, but also
>>         neighboring pixels. Therefore: 1+1+1+1...n36 / Number of
>>         pixels higher than 36 will always lead to a number lower than 1.
>>
>>         Anyone who knows the functions well could probably answer this.
>>
>>         Best regards,
>>         Andreas
>>
>>
>>         2011/11/25 Andreas Forø Tollefsen <andreasft at gmail.com
>>         <mailto:andreasft at gmail.com>>
>>
>>             Could this have to do with the tiling of the raster?
>>             I will try to run the same query with a untiled mountain
>>             raster to see if that changes anything.
>>
>>             Btw. When loading a tiled postgis raster into qgis it
>>             shows up with many artifacts and no data areas. The same
>>             raster untiled does not show up the same way.
>>             Qgis bug?
>>
>>             Andreas
>>
>>             2011/11/25 Andreas Forø Tollefsen <andreasft at gmail.com
>>             <mailto:andreasft at gmail.com>>
>>
>>                 Hi,
>>
>>                 Thanks for all of the suggestions. I will do some
>>                 more testing. However, as for suggestion 1 i think
>>                 the pixel size should be the same as the original
>>                 raster or am I wrong?
>>
>>                 Both the mean_mnt_bin raster and the priogrid_land
>>                 shapefile can be downloaded as zip (2 mb) here:
>>                 http://gisintersect.com/mean_mnt_bin.zip
>>                 http://gisintersect.com/priogrid_land.zip
>>
>>                 Any help on getting the correct values would be very
>>                 much appreciated.
>>
>>                 My query:
>>                 DROP TABLE IF EXISTS mountain_cell;
>>
>>                 SELECT
>>                 a.gid As id,
>>                 (ST_SummaryStats((ST_Union(ST_MapAlgebraExpr(ST_AsRaster(a.cell,
>>                 b.rast, '32BF'), b.rast, 'rast2',
>>                 '32BF','INTERSECTION','0','0',0))).rast, false)).mean
>>                 As avgmnt
>>                 INTO mountain_cell
>>                 FROM
>>                 priogrid_land a LEFT JOIN
>>                 mountain b
>>                     ON ST_Intersects(a.cell, b.rast)
>>                 GROUP BY a.gid
>>                 ORDER BY a.gid;
>>
>>
>>
>>
>>
>>
>>     _______________________________________________
>>     postgis-users mailing list
>>     postgis-users at postgis.refractions.net  <mailto:postgis-users at postgis.refractions.net>
>>     http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>     _______________________________________________
>     postgis-users mailing list
>     postgis-users at postgis.refractions.net
>     <mailto:postgis-users at postgis.refractions.net>
>     http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20111219/343c088f/attachment.html>


More information about the postgis-users mailing list