123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <h2>DESCRIPTION</h2>
- <em>v.net.alloc</em> allocates subnets for nearest centers. Center
- nodes must be opened (costs >= 0). Costs of center nodes are used in
- the calculation.
- <p>
- Costs may be either line lengths, or attributes saved in a
- database table. These attribute values are taken as costs of whole
- segments, not as costs to traverse a length unit (e.g. meter) of the
- segment. For example, if the speed limit is 100 km / h, the cost to
- traverse a 10 km long road segment must be calculated as
- <br>
- length / speed = 10 km / (100 km/h) = 0.1 h.
- <br>
- Supported are cost assignments for both arcs and nodes,
- and also different costs for both directions of a vector line.
- For areas, costs will be calculated along boundary lines.
- <p>
- The input vector needs to be prepared with <em>v.net operation=connect</em>
- in order to connect points representing center nodes to the network.
- <p>
- The nearest center can be determined using either costs from the
- nearest center or costs to the nearest center with option
- <b>method</b>. See example below.
- <p>
- By default, the category value of the nearest center is used as
- category value for output lines. With the <b>-u</b> flag, output lines
- become unique categories and an attribute table is created with the
- fields <em>cat, ocat, center</em>. The <em>ocat</em> field holds the
- original line category in <b>arc_layer</b> and the <em>center</em>
- field holds the center category in <b>node_layer</b>. Additionally,
- original line categories are copied from the input <b>arc_layer</b> to
- layer 2 in the output, together with any attribute table.
- <p>
- Application of flag <b>-t</b> enables a turntable support. This flag
- requires additional parameters <b>turn_layer</b> and
- <b>turn_cat_layer</b> that are otherwise ignored. The turntable allows
- to model e.g. traffic code, where some turns may be prohibited. This
- means that the input layer is expanded by turntable with costs of every
- possible turn on any possible node (intersection) in both directions.
- Turntable can be created by the <em><a href="v.net.html">v.net</a></em>
- module. For more information about turns in the vector network analyses
- see
- <a href="https://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
- <h2>NOTES</h2>
- Nodes and arcs can be closed using cost = -1.
- <p>
- Center nodes can also be assigned to vector nodes using
- <em><a href="wxGUI.vdigit.html">wxGUI vector digitizer</a></em>.
- <h2>EXAMPLES</h2>
- <p>1. Subnetwork allocation using distance:
- <p><img src="v_net_alloc.png" alt="v.net.alloc example using distance" border="1">
- <br>
- <p>2. Subnetwork allocation using traveling time:
- <p><img src="v_net_alloc_time.png" alt="v.net.alloc example using time" border="1">
- <br>
- <p>Example 1: <em>Calculating subnets for 3 center nodes using distances</em>
- <div class="code"><pre>
- # Spearfish
- # center nodes:
- echo "591235.5|4926306.62|1
- 596591.8|4917042.5|2
- 602722.9|4923544.2|3" | v.in.ascii in=- out=centernodes
- g.copy vect=roads,myroads
- # connect points to network
- v.net myroads points=centernodes out=myroads_net op=connect thresh=200
- # allocate, specifying range of center cats (easier to catch all):
- v.net.alloc myroads_net out=myroads_net_alloc center_cats=1-100000 node_layer=2
- # report categories
- v.category myroads_net_alloc option=report
- </pre></div>
- To display the result, run for example:
- <div class="code"><pre>
- # show result
- g.region vector=myroads_net
- d.mon x0
- d.vect myroads_net layer=1
- # the result has to be selected by category number of the relevant node:
- d.vect myroads_net_alloc cat=1 col=red layer=1
- d.vect myroads_net_alloc cat=2 col=green layer=1
- d.vect myroads_net_alloc cat=3 col=yellow layer=1
- # center nodes
- d.vect myroads_net col=red icon=basic/triangle fcol=green size=12 layer=2
- </pre></div>
- <p>Example 2: <em>Calculating subnets for 3 center nodes using traveling time</em><br>
- <div class="code"><pre>
- # Spearfish
- # center nodes:
- echo "591235.5|4926306.62|1
- 596591.8|4917042.5|2
- 602722.9|4923544.2|3" | v.in.ascii in=- out=centernodes
- g.copy vect=roads,myroads
- # create lines map connecting points to network
- v.net myroads points=centernodes out=myroads_net op=connect thresh=500 arc_layer=1 node_layer=2
- # set up costs
- # create unique categories for each road in layer 3
- v.category in=myroads_net out=myroads_net_time opt=add cat=1 layer=3 type=line
- # add new table for layer 3
- v.db.addtable myroads_net_time layer=3 col="cat integer,label varchar(43),length double precision,speed double precision,cost double precision,bcost double precision"
- # copy road type to layer 3
- v.to.db myroads_net_time layer=3 qlayer=1 opt=query qcolumn=label columns=label
- # upload road length in miles
- v.to.db myroads_net_time layer=3 type=line option=length col=length unit=miles
- # set speed limits in miles / hour
- v.db.update myroads_net_time layer=3 col=speed val="5.0"
- v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='interstate'"
- v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='primary highway, hard surface'"
- v.db.update myroads_net_time layer=3 col=speed val="50.0" where="label='secondary highway, hard surface'"
- v.db.update myroads_net_time layer=3 col=speed val="25.0" where="label='light-duty road, improved surface'"
- v.db.update myroads_net_time layer=3 col=speed val="5.0" where="label='unimproved road'"
- # define traveling costs as traveling time in minutes:
- # set forward costs
- v.db.update myroads_net_time layer=3 col=cost val="length / speed * 60"
- # set backward costs
- v.db.update myroads_net_time layer=3 col=bcost val="length / speed * 60"
- # subnetwork allocation with fastest paths
- v.net.alloc in=myroads_net_time arc_layer=3 node_layer=2 arc_column=cost arc_backward_column=bcost out=myroads_net_alloc_time center_cats=1-3
- </pre></div>
- To display the result, run for example:
- <div class="code"><pre>
- # show result
- g.region vector=myroads_net
- d.mon x0
- d.vect myroads_net type=line layer=1
- # the result has to be selected by category number of the relevant node:
- d.vect myroads_net_alloc_time cat=1 col=red layer=1
- d.vect myroads_net_alloc_time cat=2 col=green layer=1
- d.vect myroads_net_alloc_time cat=3 col=yellow layer=1
- # center nodes
- d.vect myroads_net_time col=red icon=basic/triangle fcol=green size=12 type=point layer=2
- </pre></div>
- <p>Example 3: <em>Differences between costs from centers and costs to centers</em><br>
- Each lane of the two-lane road is a one-way road.
- <p>1. Subnetwork allocation from centers:
- <p><img src="v_net_alloc_from_centers.png" alt="v.net.alloc example from centers" border="1">
- <br>
- A center reaches any point following the one-way lanes.
- <p>2. Subnetwork allocation to centers:
- <p><img src="v_net_alloc_to_centers.png" alt="v.net.alloc example to centers" border="1">
- <br>
- Any node reaches reaches the nearest center following the one-way lanes.
- <p>
- In case of an accident, the ambulance should come from the nearest
- 'from' hospital and go to the nearest 'to' hospital.
- <div class="code"><pre>
- # North Carolina
- # center nodes are hospitals:
- # connect hospitals to streets as layer 2
- v.net input=streets_wake points=hospitals output=streets_hospitals operation=connect thresh=400 arc_layer=1 node_layer=2
- v.to.db map=streets_hospitals layer=1 type=line option=cat columns=cat
- # close oneway roads
- v.db.update map=streets_hospitals column=TF_COST value=-1 where="ONE_WAY = 'FT'"
- v.db.update map=streets_hospitals column=FT_COST value=-1 where="ONE_WAY = 'TF'"
- # add costs to newly created lines
- v.db.update map=streets_hospitals column=TF_COST value=0 where="cat > 49746"
- v.db.update map=streets_hospitals column=FT_COST value=0 where="cat > 49746"
- # from centers
- v.net.alloc in=streets_hospitals out=streets_hospitals_alloc_from center_cats=1-10000 arc_column=FT_COST arc_backward_column=TF_COST
- # to centers
- v.net.alloc in=streets_hospitals out=streets_hospitals_alloc_to method=to center_cats=1-10000 arc_column=FT_COST arc_backward_column=TF_COST
- </pre></div>
- <h2>SEE ALSO</h2>
- <em><a href="d.path.html">d.path</a></em>,
- <em><a href="v.net.html">v.net</a></em>,
- <em><a href="v.net.iso.html">v.net.iso</a></em>,
- <em><a href="v.net.path.html">v.net.path</a></em>,
- <em><a href="v.net.steiner.html">v.net.steiner</a></em>,
- <em><a href="v.net.salesman.html">v.net.salesman</a></em>
- <h2>AUTHOR</h2>
- Radim Blazek, ITC-Irst, Trento, Italy<br>
- Documentation: Markus Neteler, Markus Metz
- <h3>TURNS SUPPORT</h3>
- The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.
- Eliska Kyzlikova, Stepan Turek, Lukas Bocan and Viera Bejdova participated at the project.
- Implementation: Stepan Turek
- Documentation: Lukas Bocan
- Mentor: Martin Landa
- <!--
- <p>
- <i>Last changed: $Date$</i>
- -->
|