v.net.distance will not work if you are trying to find the nearest neighbors within a group of nodes, i.e. where to and from are the same set of nodes, as the closest node will be the node itself and the result will be zero-length paths. In order to find nearest neighbors within a group of nodes, you can either loop through each node as to and all other nodes as from or create a complete distance matrix with v.net.allpairs and select the lowest non-zero distance for each node.
Streets are grey lines, schools are green circles, hospitals are red crosses, shortest paths are blue lines:
# connect schools to streets as layer 2 v.net input=streets_wake points=schools_wake output=streets_net1 \ operation=connect thresh=400 arc_layer=1 node_layer=2 # connect hospitals to streets as layer 3 v.net input=streets_net1 points=hospitals output=streets_net2 \ operation=connect thresh=400 arc_layer=1 node_layer=3 # inspect the result v.category in=streets_net2 op=report # shortest paths from schools (points in layer 2) to nearest hospitals (points in layer 3) v.net.distance in=streets_net2 out=schools_to_hospitals flayer=2 turn_layer=3
# add coordinates of pollution point source of pollution as vector pollution.txt: 634731.563206905|216390.501834892 v.in.ascii input=pollution.txt output=pollution # add table to vector v.db.addtable map=pollution # add coordinates of sample points as vector samples.txt: 634813.332814905|216333.590706166 634893.462007813|216273.763350851 634918.660011082|216254.949609689 v.in.ascii input=samples.txt output=samples # add table to vector v.db.addtable map=samples # connect samples and pollution to streams v.net -c input=streams points=samples output=streams_samples \ operation=connect node_layer=3 threshold=10 \ v.net -c input=streams_samples points=pollution output=streams_samples_pollution operation=connect \ node_layer=4 threshold=10 # check vector layers v.category input=streams_samples_pollution option=report Layer/table: 1/streams_samples_pollution type count min max point 0 0 0 line 8562 40102 101351 boundary 0 0 0 centroid 0 0 0 area 0 0 0 face 0 0 0 kernel 0 0 0 all 8562 40102 101351 Layer: 3 type count min max point 3 1 3 line 0 0 0 boundary 0 0 0 centroid 0 0 0 area 0 0 0 face 0 0 0 kernel 0 0 0 all 3 1 3 Layer: 4 type count min max point 1 1 1 line 0 0 0 boundary 0 0 0 centroid 0 0 0 area 0 0 0 face 0 0 0 kernel 0 0 0 all 1 1 1 # calculate distance between sample points and pollution point source v.net.distance input=streams_samples_pollution \ output=distance_samples_to_pollution from_layer=3 to_layer=4 # check results v.report map=distance_samples_to_pollution@vnettest option=length cat|tcat|dist|length 1|1|100.0|100.0 2|1|200.0|200.0 3|1|231.446|231.446
Last changed: $Date$