<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<br>
<br>
<div class="moz-cite-prefix">On 30-09-15 17:52, Paulo van Breugel
wrote:<br>
</div>
<blockquote cite="mid:560C0520.9030509@gmail.com" type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<br>
<br>
<div class="moz-cite-prefix">On 30-09-15 17:47, Anna Petrášová
wrote:<br>
</div>
<blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
type="cite">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Sep 30, 2015 at 11:20 AM,
Paulo van Breugel <span dir="ltr"><<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>
<div class="h5"> <br>
<br>
<div>On 30-09-15 16:18, Anna Petrášová wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Sep 30,
2015 at 9:27 AM, Paulo van Breugel <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:p.vanbreugel@gmail.com"
target="_blank">p.vanbreugel@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote"><span>On
Wed, Sep 30, 2015 at 11:53 AM,
Pietro <span dir="ltr"><<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:peter.zamb@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:peter.zamb@gmail.com">peter.zamb@gmail.com</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">On
Wed, Sep 30, 2015 at 9:51 AM,
Paulo van Breugel<br>
<span><<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>>
wrote:<br>
><br>
><br>
> On Wed, Sep 30, 2015 at
2:02 AM, Anna Petrášová <<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:kratochanna@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:kratochanna@gmail.com">kratochanna@gmail.com</a></a>><br>
> wrote:<br>
>><br>
>><br>
>><br>
>> On Tue, Sep 29,
2015 at 6:09 PM, Paulo van
Breugel<br>
>> <<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>>
wrote:<br>
>>><br>
>>> This must be a
very basic question, but I
can't find an easy/direct
way<br>
>>> to do this. In
python, if I have an array
with values with a length
equal to<br>
>>> the number of
rows in an attribute table
of a (point) vector layer,
how can<br>
>>> I write those
values to a new column in
that attribute table. I can
of<br>
>>> course first
create the column, but than
how to update that column
with the<br>
>>> values in the
array?<br>
>><br>
>><br>
>> it should be pretty
easy to do with pygrass,
unfortunately there is no<br>
>> example on
assigning attributes in the
official documentation [1],
but it<br>
>> should be pretty
easy, something like that
(not tested):<br>
>><br>
>> with
VectorTopo('myvector',
mode='w') as vectormap:<br>
>> for feature in
vectormap:<br>
>>
feature.attrs['mycolumn'] =
value<br>
>><br>
>><br>
> Thanks, but that seems
to write the vector back
without attribute table<br>
<br>
</span>You have to save the
changes in the database out
from your cycle, with:<br>
<br>
vectormap.table.conn.commit()<br>
</blockquote>
<div><br>
</div>
</span>
<div>Thanks Pietro. I am, however,
not sure I understand (I tried
to use it, but thanks to my
limited experience in Python /
pygrass not much luck). Just to
be more specific, I am trying to
create a script that divides
points in training and test
groups, similar to v.kcv, but
with points clustered in space.
E.g.,<br>
<br>
<span
style="font-family:monospace,monospace">#
Create vector<br>
grass.run_command("v.random",
output="testB", npoints=10,
overwrite=True)<br>
grass.run_command("v.db.addtable",
map="testB", columns="X DOUBLE
PRECISION,Y DOUBLE
PRECISION,GR INTEGER")<br>
grass.run_command("v.to.db",
map="test", option="coor",
columns="X,Y")<br>
<br>
# Create groups<br>
vectmap = 'test'<br>
cvals =
array(grass.vector_db_select(vectmap,
layer = int(1), columns =
'X,Y')['values'].values()).astype(np.float)<br>
centroids,_ = kmeans(cvals,2)<br>
idx,_ = vq(cvals,centroids)<br>
<br>
</span></div>
<div><span
style="font-family:monospace,monospace">#
write results to tabel<br>
</span></div>
<div><span
style="font-family:monospace,monospace">Now
I would like to write idx to
the column 'GR' in the
attribute table of 'test'.<br>
</span><br>
</div>
<div>p.s. I am first creating the
XY columns now, but is there a
function to get the coordinates
(cvals) in pygrass directly?<br>
</div>
<div><br>
<br>
</div>
</div>
</div>
</div>
</blockquote>
<div>I don't fully understand the example,
</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
Thanks for the quick response. I basically have a list
with values (idx in the example above) which I like to
add as a column to the attribute table of an existing
vector (point layer). The length of idx is equal to
the number of rows in the attribute table. The
solution of Anna seems like an elegant solution (and
easier and more flexible than other solutions I tried
using e.g., sqlite3). However, as I wrote, I end up
with a vector without attribute table. You wrote that
I "have to save the changes in the database out from
your cycle, with: vectormap.table.conn.commit()". I
am, however, not sure what you mean with 'out from
your cycle' or how to implement that. <br>
</div>
</blockquote>
<div><br>
</div>
<div>probably after the for cycle ends you would call this
'vectormap.table.conn.commit()', if it doesn't works,
try to put it in the cycle (I am not sure what is
supposed to work).</div>
</div>
</div>
</div>
</blockquote>
<br>
I did try both, with no luck so-far. I'll give it another try
though, perhaps I did something else wrong.<br>
</blockquote>
<br>
Tried out again, but after running the code below, I end up with an
empty vector layer (no points and no attribute table). Same if I put
the vectormap.table.conn.commit() in the for cycle.<br>
<br>
<pre>import grass.script as grass</pre>
<pre>from grass.pygrass.vector import VectorTopo</pre>
<pre>grass.run_command("v.random", output="testB", npoints=10, overwrite=True)</pre>
<pre>grass.run_command("v.db.addtable", map="testB", columns="GR INTEGER")</pre>
<pre>with VectorTopo('testB', mode='w') as vectormap:</pre>
<pre> for feature in vectormap:</pre>
<pre> feature.attrs['GR'] = 9</pre>
<pre> vectormap.table.conn.commit()</pre>
<pre>
</pre>
<br>
<blockquote cite="mid:560C0520.9030509@gmail.com" type="cite">
<blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"><span class=""> <br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div>but yes, you can get coordinates:</div>
<div><br>
</div>
<div><font face="monospace, monospace"><span
style="font-size:12.8px">with
VectorTopo('myvector', mode='w') as
vectormap:</span><br
style="font-size:12.8px">
<span style="font-size:12.8px"> for
feature in vectormap:</span><br
style="font-size:12.8px">
<span style="font-size:12.8px">
print feature.x</span></font><br>
</div>
<div><span
style="font-family:monospace,monospace;font-size:12.8px">
print feature.y</span><font
face="monospace, monospace"><span
style="font-size:12.8px"><br>
</span></font></div>
</div>
</div>
</div>
</blockquote>
<br>
</span> Great, thanks. I did not find this in the
manual. If it is not there, perhaps it would be
something worth including? I would not mind providing
a text, but I am not sure what would be the best way
to do that.<br>
</div>
</blockquote>
<div><br>
</div>
<div>Technically, it's in the manual:</div>
<div><a moz-do-not-send="true"
href="https://grass.osgeo.org/grass70/manuals/libpython/pygrass_vector.html#geometry-classes">https://grass.osgeo.org/grass70/manuals/libpython/pygrass_vector.html#geometry-classes</a></div>
<div><br>
</div>
<div>but we are lacking more examples of often used
constructions. Some other examples are available in the
recent workshop we did:</div>
<div><br>
</div>
<div><a moz-do-not-send="true"
href="https://github.com/wenzeslaus/python-grass-addon/blob/master/02_pygrass_library.ipynb">https://github.com/wenzeslaus/python-grass-addon/blob/master/02_pygrass_library.ipynb</a><br>
</div>
</div>
</div>
</div>
</blockquote>
<br>
Thanks, I will have a look at it.<br>
<blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"> <br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> </div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> <br>
</div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span><font
color="#888888"><br>
Pietro<br>
</font></span></blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>