You should just divide the area of your polygon by the area of one of your 
pixel.

I want to investigate this example a little bit further. What is the size of 
your raster in pixels? I understand that you did not tile it. Did you?

Pierre


From: postgis-users-boun...@postgis.refractions.net 
[mailto:postgis-users-boun...@postgis.refractions.net] On Behalf Of Andreas 
Forø Tollefsen
Sent: 24 février 2011 09:53
To: Paragon Corporation
Cc: PostGIS Users Discussion
Subject: Re: [postgis-users] ST_Value from Polygon

Great.
Thank you so much. I should have noticed that these were unioned numbers.
Btw. are there any way of getting the count of pixels within a polygon without 
actually aggregating them or union them?

Andreas
2011/2/24 Paragon Corporation <l...@pcorp.us<mailto:l...@pcorp.us>>
Andreas,
Sorry should have recognized what you're doing.  The intersection returns a 
polygon which is a union of the clipped raster pixel squares.  So you need to 
use Sum of area instead and then divide by the area of a pixel to get the 
equivalent of your count.

So

SELECT gid, SUM(ST_Area((foo.geomval).geom))/ [put your pixel area size here]  
as ct
FROM (SELECT globshort.rid, priogrid_land.cell, priogrid_land.gid, 
ST_Intersection(globshort.rast, priogrid_land.cell) AS geomval FROM globshort, 
priogrid_land) AS foo
WHERE gid >= 139358 AND gid <= 139365
GROUP BY gid
ORDER BY gid

________________________________
From: Andreas Forø Tollefsen 
[mailto:andrea...@gmail.com<mailto:andrea...@gmail.com>]
Sent: Thursday, February 24, 2011 8:33 AM
To: PostGIS Users Discussion
Cc: Paragon Corporation

Subject: Re: [postgis-users] ST_Value from Polygon

I am a bit unsure whether my results are actually correct. According to a total 
count using the below query, I get very different results between the cells.
Since the raster does actually cover the whole vector cell, i would assume that 
the count should be similar in all cells. Meaning, the pixel count should be 
the same.
What i get is different, and it seems that the query is not providing me with 
the number of pixels within the grid cell.
Any idea why this is so different?

SELECT gid, count((foo.geomval).val) as ct
FROM (SELECT globshort.rid, priogrid_land.cell, priogrid_land.gid, 
ST_Intersection(globshort.rast, priogrid_land.cell) AS geomval FROM globshort, 
priogrid_land) AS foo
WHERE gid >= 139358 AND gid <= 139365
GROUP BY gid
ORDER BY gid

Result:
139358;632
139359;1030
139360;912
139361;731
139362;760
139363;1230
139364;1314
139365;1014

The attached image shows the raster pixels within one cell.


2011/2/24 Andreas Forø Tollefsen 
<andrea...@gmail.com<mailto:andrea...@gmail.com>>
Thanks!
That solved it.

This will probably take a lot of time. I have 259200 polygons measuring 0.5 x 
0.5 decimal degrees while the raster dataset is of global cover and has a 
pixelsize of 0.00277777777777778x0.00277777777777778.

Andreas


2011/2/23 Paragon Corporation <l...@pcorp.us<mailto:l...@pcorp.us>>
Andrea,

Try

SELECT DISTINCT ON(gid) gid, (foo.geomval).val, COUNT((foo.geomval).val) AS ct
FROM (SELECT globshort.rid, priogrid_land.cell, priogrid_land.gid, 
ST_Intersection(globshort.rast, priogrid_land.cell) AS geomval FROM globshort, 
priogrid_land) AS foo
WHERE gid > 151000 AND gid < 151010
GROUP BY gid, (foo.geomval).val
ORDER BY gid, ct DESC

________________________________
From: 
postgis-users-boun...@postgis.refractions.net<mailto:postgis-users-boun...@postgis.refractions.net>
 
[mailto:postgis-users-boun...@postgis.refractions.net<mailto:postgis-users-boun...@postgis.refractions.net>]
 On Behalf Of Andreas Forø Tollefsen
Sent: Wednesday, February 23, 2011 4:05 AM
To: PostGIS Users Discussion
Subject: Re: [postgis-users] ST_Value from Polygon
Hi. Thanks Regina and Leo,
I have been testing the raster and geom intersection a bit. I guess what i need 
is to use the ST_Intersection together with a max(count) function.
So my result will be the rastervalue with the highest count within each of the 
grid cells.
However, as far as i know, there is now Max(COUNT) function in postgresql.

Any idea how i can modify the below query to only return the rastervalue within 
the grid cell occuring most frequently?
Consequently i want only one row for each gid, and the maximum occuring 
rastervalue.

SELECT gid, (foo.geomval).val, COUNT((foo.geomval).val) AS ct
FROM (SELECT globshort.rid, priogrid_land.cell, priogrid_land.gid, 
ST_Intersection(globshort.rast, priogrid_land.cell) AS geomval FROM globshort, 
priogrid_land) AS foo
WHERE gid > 151000 AND gid < 151010
GROUP BY gid, (foo.geomval).val;

gid; val; ct
151001;14;381
151001;150;9
151001;50;7
151001;140;91
151001;40;1
151001;70;2
151001;130;4
151001;200;48
151001;100;3
151001;;0
151001;190;1
151001;20;203
151001;11;111
151001;210;16
151001;30;105


2011/2/23 Paragon Corporation <l...@pcorp.us<mailto:l...@pcorp.us>>
Have you looked at ST_Intersection.  I'm not sure how large your grids are so 
might still be a bit too slow.


http://www.postgis.org/documentation/manual-svn/RT_ST_Intersection.html

Below is a link to our slides from our North Carolina GIS meeting that may 
answer some of your questions (shows some Raster examples) as well as the 3D 
ones people have asked.

http://www.postgis.us/presentations

Hope that helps,
Regina and Leo
________________________________
From: 
postgis-users-boun...@postgis.refractions.net<mailto:postgis-users-boun...@postgis.refractions.net>
 
[mailto:postgis-users-boun...@postgis.refractions.net<mailto:postgis-users-boun...@postgis.refractions.net>]
 On Behalf Of Andreas Forø Tollefsen
Sent: Tuesday, February 22, 2011 4:28 AM
To: PostGIS Users Discussion
Subject: [postgis-users] ST_Value from Polygon
Hi all,

I am working with a large raster dataset that i want to aggregate into vector 
grids.
The raster dataset is a landcover dataset, and i want to find which of the 
raster values are the most dominant within each of the vector grid cells.

I have been looking at the ST_Value function, but this is not usable together 
with the cell polygon.

I have written a script that gives me the raster value of the centroid of each 
cell, but i want to find which raster class is the largest.
Hence i need to calculate the area of each raster class within each cell and 
select the largest class.

Any idea? So far i have only come this far:

DROP TABLE IF EXISTS globshortpoly;
SELECT priogrid_land.cell, ST_Value(rast, ST_Centroid(cell))
INTO globshortpoly
FROM priogrid_land, globshort
WHERE rast && priogrid_land.cell
LIMIT 1000

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net<mailto:postgis-users@postgis.refractions.net>
http://postgis.refractions.net/mailman/listinfo/postgis-users


_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net<mailto:postgis-users@postgis.refractions.net>
http://postgis.refractions.net/mailman/listinfo/postgis-users



_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to