On 15/05/2019 0:46, Veronica Andreo wrote:
Hi all,

I was working today with a very simple vector map which corresponds to clusters (circular polygons) that overlap and it is just fine that they overlap. So, i received a shapefile with 3 of these clusters. Two of them overlaped. When I import them into GRASS with v.import I get an extra centroid and area where 2 of the polygons overlap.

Problem arises when I want to query a raster map with those polygons since originally the attribute table contained only 3 polygons (which is just fine). However, v.what.rast will only upload values for 2 of those three polygons because it finds 2 centroids with the same category, AFAIU.


Here's how to get the raster values for all polygons (including those which are overlaps). It involves the somewhat non-intuitive process of creating another layer. I imported a simple polygon shapefile with three overlapping areas. Here are the categories:


micha@TP480:~$ v.category polys opt=report
Layer/table: 1/polys
type       count        min        max
point          0          0          0
line           0          0          0
boundary       0          0          0
centroid      12          1          3
area           0          0          0
face           0          0          0
kernel         0          0          0
all           12          1          3
Layer: 2
type       count        min        max
point          0          0          0
line           0          0          0
boundary       0          0          0
centroid       4          2          3
area           0          0          0
face           0          0          0
kernel         0          0          0
all            4          2          3


So, as you found, you get two layers, with all original areas split up at overlaps in layer 1, and just the overlap areas in layer 2.  Now add a third layer, with new category values (option=add):


micha@TP480:~$ v.category polys option=add layer=3 out=polys_3layers

Layer/table: 1/polys_3layers
type       count        min        max
point          0          0          0
line           0          0          0
boundary       0          0          0
centroid      12          1          3
area           0          0          0
face           0          0          0
kernel         0          0          0
all           12          1          3
Layer: 2
type       count        min        max
point          0          0          0
line           0          0          0
boundary       0          0          0
centroid       4          2          3
area           0          0          0
face           0          0          0
kernel         0          0          0
all            4          2          3
Layer: 3
type       count        min        max
point          0          0          0
line           0          0          0
boundary       0          0          0
centroid       7          1          7
area           0          0          0
face           0          0          0
kernel         0          0          0
all            7          1          7


This gives me three layers, and the new layer 3 has individual cat values for each polygon. So I'm ready to add a database table and column to that layer for the raster value, and then run v.what.rast:


micha@TP480:~$ v.db.addtable polys_3layers layer=3 columns="rast_value DOUBLE"

micha@TP480:~$ v.what.rast polys_3layers rast=dem_4m column=rast_value layer=3 type=centroid
Reading features from vector map...
Update vector attributes...
 100%
v.what.rast complete. 7 records updated.
micha@TP480:~$ v.db.select polys_3layers layer=3
cat|rast_value
1|488.3321
2|492.7044
3|481.2958
4|498.173
5|501.3336
6|493.2202
7|471.7223

Does this help?



I tried with

v.clean input=clusters output=clusters_clean1 tool=break,rmdupl,rmsa,rmdac

and

v.clean input=clusters type=centroid output=clusters_clean2 tool=rmdupl

but nothing seemed to do the kind of cleaning I wanted. I ended up using brute force and removing the extra centroid manually in the GUI. That helped with v.what.rast (all cats in the attr table were updated) but part of the original and correct geometry was clearly gone. I am sure that's not the right combination nor the right way either.

In the wiki [0], I only found this piece of text: "If the input polygons have logical errors.... You can investigate overlapping areas in the imported vector with 'd.vect yourmap type=area layer=2' (only overlapping areas have a category in layer 2 after import). Additionally you may show the centroids of layer=2 to easier find tiny overlapping areas with 'd.vect yourmap type=centroid layer=2'"

However, it says nothing about how to proceed further as to keep correctly overlapping polygons, each with its own centroid and remove the duplicated ones that are generated when importing.

Can someone please share the set of steps that should be followed in these cases? Maybe it's a silly question, but I'm more a raster person so I am very easily lost with vector issues.

Thanks much in advance!
Vero


_______________________________________________
grass-user mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/grass-user
-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

_______________________________________________
grass-user mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to