[GRASS-user] populating dbtable with value sequence

Shaun Langley shaunlangley at gmail.com
Thu Apr 18 09:32:13 PDT 2013


I have a possible solution!

1. add column to new table "newcol"
2. initialize first value

val=1

3. update values incrementally

for i in `v.category foo option=print`; do 
	v.db.update foo column=newcol value=$val where="cat=$i"
	val=val+1
done


On Apr 18, 2013, at 11:16 AM, Shaun Langley <shaunlangley at gmail.com> wrote:

> 
> On Apr 18, 2013, at 9:48 AM, Moritz Lennert <mlennert at club.worldonline.be> wrote:
> 
>> On 18/04/13 15:52, Shaun Langley wrote:
>>> **This question is also posted on stackexchange.com
>>> <http://stackexchange.com>**
>>> 
>>> I have a vector map that includes 100 points. These points were created
>>> using |v.extract| to randomly sample a larger map of 10k points. As
>>> such, the 'cat' values range from 1 to more than 10k. What I would like
>>> to do is to update the attribute table by rescaling these values to 1 to
>>> 100.
>>> 
>>> Here's what I've experienced. If I use
>>> 
>>> |v.category input=pts100 output=foo option=del
>>> v.category input=foo output=pts100 option=add --o|
>>> 
>>> Then when the 'cat' values /appear/ rescaled when I print them with
>>> 
>>> |v.category input=pts100 option=print|
>>> 
>>> However, if I look at the dbtable with
>>> 
>>> |db.select pts100|
>>> 
>>> the 'cat' values have not changed (presumably because it is the key column).
>>> 
>>> So I'm thinking I will need to add a new column using |v.db.addcol|, but
>>> I don't know how to specify the range of value to populate the new
>>> column. From what I can tell, I have to specify a single value.
>>> 
>>> Ideas?
>> 
>> Either
>> 
>> - v.distance (possibly with dmax=0) to get the cat values from the new points into the old map and then v.reclass to use the new values as cat values.
>> 
> 
> It isn't clear to me how this can be used to rescale the cat values.  Points map has cat values that are (for example)
> 
> 120
> 343
> 444
> 521
> 1334
> 
> I don't necessarily have to rescale the cat values if I can create a new column in which the values are scaled 1-100 (it's not feasible to do this by hand given the quantity of values I'd have to change.  I need to script it.)
> 
> 
>> or
>> 
>> - v.db.addcol YourOldMap col='newcat int'
>> - populate that column with values from 1 to 100
>> - v.reclass as above
>> 
> 
> This is the kind of solution I was thinking I'd need to employ, but I need to automate the propagation of new values.
> 
> 
>> It might be an idea to add to v.category the possibility to propagate cat value changes to the attribute table. You could file a wish on the bugtracker.
>> 
>> Moritz
> 



More information about the grass-user mailing list