Note: A new GRASS GIS stable version has been released: GRASS GIS 7. Go directly to the new manual page here

## NAME

**v.net.visibility** - Visibility graph construction.
## KEYWORDS

vector, path, visibility
## SYNOPSIS

**v.net.visibility**

**v.net.visibility help**

**v.net.visibility** **input**=*name* **output**=*name* [**coordinate**=*x,y*[,*x,y*,...]] [**vis**=*string*] [--**overwrite**] [--**verbose**] [--**quiet**]
### Flags:

**--overwrite**
- Allow output files to overwrite existing files
**--verbose**
- Verbose module output
**--quiet**
- Quiet module output

### Parameters:

**input**=*name*
- Name of input vector map
**output**=*name*
- Name for output vector map
**coordinate**=*x,y[,**x,y*,...]
- One or more coordinates
**vis**=*string*
- Add points after computing the visibility graph

## DESCRIPTION

*v.net.visibility* computes the visibility graph of a vector
map containing lines, areas (boundaries) and points. The visibility
graph is the graph where the nodes are the end point of the lines,
boundaries or simply points. There is an edge between two nodes if they
are 'visible' to each other. Two nodes are visibible if there are no segments
in between of them, i.e. the edge does not intersect any line or boundary
in the vector map. This is useful to compute the shortest path in a
vector map from any two points. To do this, first you need to compute
the visibility graph and from it compute the shortest path using
*v.net.path* or *d.path*.
**IMPORTANT: the algorithm doesn't work well with intersecting lines
(that includes overlapping)**

## NOTES

If you compute a shortest path after computing the visibility graph
you will notice that this path might go through a vertex of a line. If
this is not what you wanted you might need to process the map
in *v.buffer*, initially whith a
small value. Example:
v.buffer input=map output=bufferedmap buffer=1 type=point,line,area,boundary

The first argument is the input map. It supports lines, boundaries
(so, areas) and points. For the algorithm was written to work with lines
and boundaries not intersecting each other (that includes overlapping).

The resulting map containing the visibility graph is given in the output map.

If you need to add additional points to compute a shortest path
between them afterwards you can use the *coordinate* parameter, e.g.:

coordinate=25556200,6686400,25556400,6686600

where 25556200,6686400 are the coordinate of the first point and
25556400,6686600 are the coordinates of the second point. Of course
you can give as many points as you need. They will be added to the
visibility graph and edges from them will be computed. You can
always add those points after computing the visibility graph. Simply
use the *vis* parameter. The input will be the original
vector map, the vis will be the computed visibility graph and the
output the new visibility graph which will be the vis + the new
points given with coordinate (edges will be computed as well).
v.net.visibility input=map vis=vis_map output=new_vis_map \
coordinate=25556200,6686400,25556400,6686600

## EXAMPLES

### Example 1

A simple example (North Carolina sample data) showing how to use the module:
v.extract input=zipcodes_wake output=areas_7_11_25 cats=7,11,25
g.region vect=zipcodes_wake
d.mon x0
d.vect areas_7_11_25
v.net.visibility input=areas_7_11_25 output=graph
d.vect graph
d.vect areas_7_11_25 color=red type=boundary

### Example 2

d.er
An example on how to use *v.buffer*
along with the module:
v.buffer input=lines output=buffered_lines buffer=1
v.net.visibility input=buffered_lines output=graph
d.vect graph
d.vect lines col=red

### Example 3

An example on how to use the coordinate parameter. This will compute the
visibility graph of the vector map lines with the point 2555678,6686343:
v.net.visibility input=lines output=graph coordinate=2555678,6686343
d.vect graph
d.vect lines col=red

### Example 4

An example (North Carolina sample data) on how to use the coordinate
parameter with the vis parameter.
Here the vector map graph is computed then a new visibility graph is computed
from it with the point 669547.97,208348.20 extra:
v.extract input=zipcodes_wake output=areas_7_11_25 cats=7,11,25
g.region vect=zipcodes_wake
d.mon x0
d.vect areas_7_11_25
v.net.visibility input=zipcodes_wake output=graph
v.net.visibility input=zipcodes_wake vis=graph output=new_graph \
coordinate=669547.97,208348.20
d.erase
d.vect areas_7_11_25
echo "symbol basic/star 20 669547.97 208348.20 black red" | d.graph -m
d.vect new_graph
d.vect areas_7_11_25 color=red type=boundary

### Example 5

An example for connections of points (Spearfish):
v.net.visibility input=archsites output=graph
g.region vect=archsites
d.mon x0
d.vect graph
d.vect archsites col=red

## KNOWN BUGS

In some cases when 3 points or nodes are collinear, some wrong edges
are added. This happens only really rarly and shouldn't be a big
problem. When two points have the exact same x coordinate and are
visible, some wrong edges are added.
## SEE ALSO

*
d.path,
v.net,
v.net.alloc,
v.net.iso,
v.net.salesman,
v.net.steiner,
v.to.db
*
## AUTHOR

Maximilian Maldacker

Mentor: Wolf Bergenheim
*Last changed: $Date: 2014-03-13 14:10:27 -0700 (Thu, 13 Mar 2014) $*

Main index - vector index - Full index

© 2003-2016 GRASS Development Team