[GRASS-user] Re: two questions on setting a new layer for for
mlennert at club.worldonline.be
Mon Nov 28 05:28:39 EST 2011
On 22/11/11 08:44, G. Allegri wrote:
> I've solved my needs about the creation of a new layer, but I feel that
> the mechanism a bit counter-intuitive.
> A new layer can be created *only* through an intemediary vector
> >> v.category input=rivers output=rivers_tmp layer=2
> >> g.remove vect=rivers
> >> g.rename vect=rivers_tmp,rivers
> Directly creating a new connection on a new layer produces the new
> layer, but the categories are not attached:
> >> v.db.connect map=rivers table=rivers_clone layer=2
> and the vector *seems* to have a new layer, but it cannot be used.
> I see the same results if I create a new layer through the wxGUI (vector
> attributes window -> new layer). A new layer is shown, but it cannot be
> used (eg cannot be displayed). I will open a ticket on this.
Please note that this is not a bug, but apparently a misunderstanding of
how the layer mechanism works.
Layers are not a database connection tool. The closest I can get in
terms of a short definition of layers is that they are a tool for
thematically grouping objects in a vector map. For example, you can have
a series of field boundaries in a map and none of them have a category
value in layer 1 as layer 1 is 'fields' and the category values of
fields (= polygons) are with the centroids. However, if some of these
boundary lines are also hiking paths, you can give them category numbers
in layer 2 and thus layer 2 becomes the thematic layer "hiking paths".
Another example would be weather stations for which you have a whole
battery of measures every day and instead of putting them all into one
attribute table, you wish to have one table per day. You could then
create one layer per day and each station would then have to have a
category number in each layer.
Any layer can, but does not have to, be connected to an attribute table.
For any element in the map which has a category number in that layer,
the system will then look into the attribute table and search for this
category number in the key column. If that category number is not
present in that column, then there are no attributes for that element.
- You create a link between a layer and a table, but if no element in
the map has a category value in that layer, then your link is useless.
In other words, a layer only makes sense when you actually give category
values to elements in your map in that layer.
- Layers can be useful without tables, and so one probably should see
these two concepts (layers and database connections) as separate, though
The fact that v.category creates a new map with the results of the
manipulation of the category values is probably a welcome security. If
you delete all your category values by accident (e.g. you forget to
specify the type when you want to delete category values from
boundaries, but not centroids), the fact that the result is a new map
reduces the chances for catastrophe. If you a sure that you will never
make a mistake, you can always script the two steps (no need for the
v.category input=rivers output=rivers_tmp layer=2
g.rename vect=rivers_tmp,rivers --o
I agree that it would be helpful to have an opion in v.category to copy
the values from one layer to another (i.e. something like option=copy
More information about the grass-user