[GRASS-dev] [GRASS GIS] #3300: v.rast.stats: wrong results for non-first category values in the case of multiple category values per feature
GRASS GIS
trac at osgeo.org
Mon Feb 27 03:46:38 PST 2017
#3300: v.rast.stats: wrong results for non-first category values in the case of
multiple category values per feature
----------------------------------+-------------------------
Reporter: mlennert | Owner: grass-dev@…
Type: defect | Status: new
Priority: normal | Milestone: 7.2.1
Component: Vector | Version: unspecified
Keywords: v.rast.stats overlap | CPU: Unspecified
Platform: Unspecified |
----------------------------------+-------------------------
From a discussion and test on the users mailing list
[http://lists.osgeo.org/pipermail/grass-user/2017-February/076024.html
[1]]:
v.rast.stats seems to incorrectly take into account the non-first cat
values when there are multiple cat value per polygon.
See the attached image for an example of a situation with several polygons
of which polygon 3 overlaps with respectively 1 and 2.
I also created a second file with only the 2
non-overlapping polygons (cat 1 and 2). The two input file were created in
QGIS so as to be able to have "nice" topologically incorrect data.
I'll attach a .pack file of the test vector map with the three overlapping
polygons.
test_nooverlap can be created from test with
{{{
v.extract -d test cat=1,2 out=test_nooverlap
}}}
I then imported the two files into GRASS GIS with v.in.ogr and ran
{{{
v.rast.stats map=test raster=elevation column_prefix=e
v.rast.stats map=test_nooverlap raster=elevation column_prefix=e
}}}
And here are the results:
{{{
> v.db.select test
cat|id|e_number|e_minimum|e_maximum|e_range|e_average|e_stddev|e_variance|e_coeff_var|e_sum|e_first_quartile|e_median|e_third_quartile|e_percentile_90
1|1|242621|76.8941955566406|145.712738037109|68.8185424804688|114.397437714797|13.5650727983398|184.01120002426|11.8578467047128|27755220.7358017|104.996|115.337|124.654|131.38
2|2|131854|77.3364105224609|126.733070373535|49.3966598510742|99.4588066985328|10.6819214497898|114.103445859479|10.7400458585508|13114041.4984283|91.5773|98.7388|106.926|114.645
3|3|99039|71.4758224487305|139.941131591797|68.4653091430664|107.223648245541|13.7481896908839|189.012719776527|12.8219752972784|10619322.8985901|97.4993|105.891|118.752|126.703
> v.db.select test_nooverlap
cat|id|e_number|e_minimum|e_maximum|e_range|e_average|e_stddev|e_variance|e_coeff_var|e_sum|e_first_quartile|e_median|e_third_quartile|e_percentile_90
1|1|242621|76.8941955566406|145.712738037109|68.8185424804688|114.397437714797|13.5650727983398|184.01120002426|11.8578467047128|27755220.7358017|104.996|115.337|124.654|131.38
2|2|131854|77.3364105224609|126.733070373535|49.3966598510742|99.4588066985328|10.6819214497898|114.103445859479|10.7400458585508|13114041.4984283|91.5773|98.7388|106.926|114.645
}}}
The values for polygons 1 and 2 are strictly
identical. Overlapping areas are thus correctly taken into account.
To test even further, I ran
{{{
v.extract -d test cat=3 out=test3
}}}
to get the entire polygon with cat=3.
Then
{{{
v.rast.stats test3 rast=elevation colprefix=e -c
> v.db.select test3
cat|id|e_number|e_minimum|e_maximum|e_range|e_average|e_stddev|e_variance|e_coeff_var|e_sum|e_first_quartile|e_median|e_third_quartile|e_percentile_90
3|3|224074|71.4758224487305|141.793502807617|70.3176803588867|110.21428988784|13.2281044492473|174.982747320197|12.0021681968|24696156.7923279|100.265|110.004|120.916|127.836
}}}
There thus seems to be a bug in v.rast.stats as it does not calculate
the correct values for the polygon with cat=3 when there area polygons
with multiple cat values. Running v.to.db with op=area on test3 I get an
area that corresponds to the number of pixels identified in test3, i.e.
224074.
When I run
{{{
v.overlay ain=test3 bin=test_nooverlap op=not out=t3_no1_2
v.to.db -p t3_no1_2 op=area
}}}
I get an area that corresponds to the number of pixels identified for
polygon 3 in test, i.e. 99039. v.rast.stats thus only takes into account
the non-overlapped part of polygon 3.
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3300>
GRASS GIS <https://grass.osgeo.org>
More information about the grass-dev
mailing list