[postgis-users] Incorrect Results for ST_ValueCount with large polygons
Michael Treglia
mtreglia at gmail.com
Fri Jun 22 14:12:06 PDT 2018
Hi again all,
Sorry for the multiple messages on this - realizing the query I posted was
somewhat off from what I intended - below are examples that are getting at
what I'm going for but exhibiting the issue I described (sometimes
including pixels in counts aren't actually be within polygons [i.e., the
categorical value isn't actually within the polygon based on visual
inspection & this same analysis with other tools]).
Simpler/quicker:
SELECT bbl, (pvc).VALUE, SUM((pvc).COUNT) AS tot_pix
FROM base_rasters.landcover6in
INNER join results_scratch.polys_test
ON ST_Intersects(landcover6in.rast, polys_test.geom_2263),
ST_ValueCount(ST_Clip(landcover6in.rast,polys_test.geom_2263),1, TRUE,
ARRAY[1, 2, 3, 4, 5, 6, 7]) AS pvc
GROUP BY (pvc).VALUE, bbl
ORDER BY bbl, (pvc).VALUE;
A longer, less efficient version that gives the same results (but unions
the clipped raster tiles):
SELECT
bbl, (value_count).value, SUM((value_count).count) AS count
FROM
(
select
bbl,
rid,
ST_ValueCount(
ST_Union(ST_Clip(rast, geom_2263, TRUE)), 1, TRUE, ARRAY[1, 2, 3,
4, 5, 6, 7]
) value_count
FROM
(SELECT bbl, geom_2263 FROM results_scratch.polys_test) v,
(SELECT rid, rast FROM base_rasters.landcover6in) r
WHERE ST_Intersects(rast, geom_2263)
GROUP BY bbl, rid, geom_2263
) i
GROUP BY bbl, value
ORDER BY bbl, value
On Thu, Jun 21, 2018 at 4:23 PM, Michael Treglia <mtreglia at gmail.com> wrote:
> Hi all,
>
> I'm basically trying to compute # of pixels of land cover type by polygon,
> for lots of polygons.
>
> I'm working with a query a query like this:
> SELECT bbl, (pvc).VALUE, SUM((pvc).COUNT) AS tot_pix
> FROM base_rasters.landcover6in
> INNER join results_scratch.polys_test
> ON ST_Intersects(landcover6in.rast, polys_test.geom_2263),
> ST_ValueCount(ST_Clip(landcover6in.rast,polys_test.geom_2263),1) AS
> pvc
> GROUP BY (pvc).VALUE, bbl
> ORDER BY (pvc).VALUE;
>
> For smaller polygons, spot-checking, it looks like I'm generally getting
> the right results. However, for larger polygons, not always. For example,
> though a polygon might not have roads, I'm getting non-0 counts for road
> pixels within a polygon (polygons have unique identifiers as 'bbl'). The
> total area of pixels counted ends up being larger than the polygon (larger
> than would be attributable to differences between polygons edges & pixels)
>
> I'm thinking it's an issue when there are multiple raster tiles
> included... but not entirely sure. Any suggestions on whether there's
> something off in this query that might be causing an issue like I describe?
>
> Thanks in advance for any suggestions!
> Mike
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20180622/d0f9de3b/attachment.html>
More information about the postgis-users
mailing list