<div dir="ltr">Dear Stefan,<div>Dear all,</div><div><br></div><div>thank you for your tipps, and especially the recommendations regarding the use of the igraph library. In fact, I decided to use do most of the network analysis now in igraph/R. I use GRASS and the report option of <a href="http://v.net">v.net</a> to get a table of all vertices and edges my graph/network consists of. Subsequently, I load these tables in igraph and conduct specific analysis. That seems a very convenient way to obtain most of the information I am looking for.</div><div><br></div><div>/J</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 13, 2017 at 3:17 PM, Stefan Blumentrath <span dir="ltr"><<a href="mailto:Stefan.Blumentrath@nina.no" target="_blank">Stefan.Blumentrath@nina.no</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="NO-BOK" link="blue" vlink="purple">
<div class="m_-7837248210527295337WordSection1">
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Hi Johannes,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Sorry for the delayed response.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">You could try <a href="http://v.net" target="_blank">v.net</a> and then use igraph.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">See:
<a href="https://github.com/NINAnor/gudbrand_hydro/blob/master/v.igraph.order.py" target="_blank">
https://github.com/NINAnor/<wbr>gudbrand_hydro/blob/master/v.<wbr>igraph.order.py</a><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">as an example for network analysis using a GRASS python script in combination with igraph.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">What you would need is to compute the paths between all possible combinations of sampling sites (using e.g. <a href="http://igraph.org/python/doc/igraph.GraphBase-class.html#get_shortest_paths" target="_blank">http://igraph.org/python/doc/<wbr>igraph.GraphBase-class.html#<wbr>get_shortest_paths</a>).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Once you got a unique list of edges you can use v.extract I guess to get your subnetwork…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Or if you continue with network analysis you could just use:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><a href="http://igraph.org/python/doc/igraph.GraphBase-class.html#subgraph_edges" target="_blank">http://igraph.org/python/doc/<wbr>igraph.GraphBase-class.html#<wbr>subgraph_edges</a><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Hope that is somehow useful…<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Cheers<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Stefan<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> grass-user [mailto:<a href="mailto:grass-user-bounces@lists.osgeo.org" target="_blank">grass-user-bounces@<wbr>lists.osgeo.org</a>]
<b>On Behalf Of </b>Johannes Radinger<br>
<b>Sent:</b> torsdag 28. september 2017 13.04<br>
<b>To:</b> Markus Metz <<a href="mailto:markus.metz.giswork@gmail.com" target="_blank">markus.metz.giswork@gmail.com</a><wbr>><br>
<b>Cc:</b> GRASS user list <<a href="mailto:grass-user@lists.osgeo.org" target="_blank">grass-user@lists.osgeo.org</a>><span class=""><br>
<b>Subject:</b> Re: [GRASS-user] Extract subnet from grass vector network based on selected nodes<u></u><u></u></span></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal"><span lang="EN-GB">Hi all,<u></u><u></u></span></p><div><div class="h5">
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB">I just tried two different tools that both work to extract a subnetwork that connects a set of selected nodes:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB">1) v.net.allpairs works fine and a subnetwork is extracted. However, this definitely needs some clean up and layer/attribute operations to get the connected tables/cats from the original network<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB">2) v.net.steiner also works fine. However, it seems that this approach takes slightly longer than v.net.allpairs.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span lang="EN-GB">In general both approaches are rather slow if one wants to extract a subnetwork based on e.g. >1000 selected nodes from a very large network. For example, my initial (large) network consists
 of >100000 lines which makes any further analysis rather slow. Thus, I wanted to minimize the network to one that still connects my target nodes but skips parts that are not needed.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span lang="EN-GB">Thank you for you suggestions, anyway.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB">/Johannes<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal"><span lang="EN-GB">On Thu, Sep 28, 2017 at 10:06 AM, Markus Metz <</span><a href="mailto:markus.metz.giswork@gmail.com" target="_blank"><span lang="EN-GB">markus.metz.giswork@gmail.com</span></a><span lang="EN-GB"><wbr>> wrote:<u></u><u></u></span></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span lang="EN-GB"><br>
<br>
On Thu, Sep 28, 2017 at 9:43 AM, Moritz Lennert <</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.worldonline.be</span></a><span lang="EN-GB">> wrote:<br>
><br>
> On 28/09/17 08:51, Markus Metz wrote:<br>
>><br>
>><br>
>><br>
>> On Wed, Sep 27, 2017 at 11:55 PM, Moritz Lennert <</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.worldonline.be</span></a><span lang="EN-GB"> <mailto:</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.<wbr>worldonline.be</span></a><span lang="EN-GB">>>
 wrote:<br>
>>  ><br>
>>  > On 27/09/17 21:03, Markus Metz wrote:<br>
>>  >><br>
>>  >><br>
>>  >><br>
>>  >> On Wed, Sep 27, 2017 at 4:07 PM, Moritz Lennert <</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.worldonline.be</span></a><span lang="EN-GB"> <mailto:</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.<wbr>worldonline.be</span></a><span lang="EN-GB">>
 <mailto:</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.<wbr>worldonline.be</span></a><span lang="EN-GB"> <mailto:</span><a href="mailto:mlennert@club.worldonline.be" target="_blank"><span lang="EN-GB">mlennert@club.<wbr>worldonline.be</span></a><span lang="EN-GB">>>>
 wrote:<br>
>>  >>  ><br>
>>  >>  ><br>
>>  >>  ><br>
>>  >>  > Le 27 septembre 2017 13:11:54 GMT+02:00, Johannes Radinger <</span><a href="mailto:johannesradinger@gmail.com" target="_blank"><span lang="EN-GB">johannesradinger@gmail.com</span></a><span lang="EN-GB"> <mailto:</span><a href="mailto:johannesradinger@gmail.com" target="_blank"><span lang="EN-GB">johannesradinger@<wbr>gmail.com</span></a><span lang="EN-GB">>
 <mailto:</span><a href="mailto:johannesradinger@gmail.com" target="_blank"><span lang="EN-GB">johannesradinger@<wbr>gmail.com</span></a><span lang="EN-GB"> <mailto:</span><a href="mailto:johannesradinger@gmail.com" target="_blank"><span lang="EN-GB">johannesradinger@<wbr>gmail.com</span></a><span lang="EN-GB">>>>
 a écrit :<br>
>>  >>  > >Hi,<br>
>>  >>  > ><br>
>>  >>  > >I have a GRASS vector network that represents a river network (with<br>
>>  >>  > >many<br>
>>  >>  > >first order tributaries) and that has additional connected nodes that<br>
>>  >>  > >represent sampling sites.<br>
>>  >>  > ><br>
>>  >>  > >I'd like to extract a minimum subnetwork of the full network that still<br>
>>  >>  > >connects a set of selected nodes (e.g. identified by their cat).<br>
>>  >>  > >However,<br>
>>  >>  > >network edges (i.e. river segments) that are not necessary to connect<br>
>>  >>  > >the<br>
>>  >>  > >sampling points should be excluded in the new subnetwork. Is there a<br>
>>  >>  > >function or process in GRASS GIS to extract such a subnetwork that<br>
>>  >>  > >fully<br>
>>  >>  > >connects a set of selected nodes?<br>
>>  >>  ><br>
>>  >>  > not sure but maybe v.net.spanningtree ?<br>
>>  >><br>
>>  >> v.net.spanningtree calculates a tree covering all nodes in the network, not only selected nodes, therefore v.net.spanningtree does not apply here.<br>
>>  ><br>
>>  ><br>
>>  > If you connect only the selected nodes to the network, wouldn't that work ? Or does v.net.spanningtree consider all connections between lines as nodes ?<br>
>><br>
>> v.net.spanningtree considers all internal nodes of the network. See also<br>
>> </span><a href="https://en.wikipedia.org/wiki/Spanning_tree" target="_blank"><span lang="EN-GB">https://en.wikipedia.org/wiki/<wbr>Spanning_tree</span></a><span lang="EN-GB"><br>
><br>
><br>
> Ok, thanks. So, one would need to "disconnect" lines at non-selected nodes for this to work.<u></u><u></u></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span lang="EN-GB">or use v.net.steiner (see my previous reply)<u></u><u></u></span></p>
<div>
<p class="MsoNormal"><span lang="EN-GB">><br>
> And maybe some clarification on what is meant by "nodes" in the sentence "A spanning tree is a minimum cost subnetwork connecting all nodes in an undirected network" in the man page might help future users.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB">Yes, that would help. I needed to look at the library fn NetA_spanning_tree() to be sure.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal">Markus M<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">><br>
> Moritz <u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>
</div>

</blockquote></div><br></div>