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 <[email protected]
<mailto:[email protected]>>
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 <[email protected]
<mailto:[email protected]>>
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 <[email protected]
<mailto:[email protected]>>
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 <[email protected]
<mailto:[email protected]>>
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
[email protected]
<mailto:[email protected]>
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
[email protected]
<mailto:[email protected]>
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users