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