[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