v.distance(1)
💖 v.distance(1) — GRASS GIS User's Manual 💖
okay so bestie, welcome to v.distance — the GRASS GIS module that finds the nearest element in vector map to for elements in vector map from. it's giving distance, database, attribute table realness. ✨ slay.
✨ NAME ✨
v.distance — finds the nearest element in vector map ’to’ for elements in vector map ’from’.
🔑 KEYWORDS 🔑
vector, distance, database, attribute table
📜 SYNOPSIS 📜
here's the iconic synopsis, copy-paste ready, no cap:
v.distance
v.distance --help
v.distance [-pas] from=name [from_layer=string]
[from_type=string[,string,...]] to=name [to_layer=string]
[to_type=string[,string,...]] [output=name] [dmax=float]
[dmin=float] upload=string[,string,...] [column=name[,name,...]]
[to_column=name] [table=name] [separator=character] [--overwrite]
[--help] [--verbose] [--quiet] [--ui]
🚩 Flags 🚩
-p— Print output to stdout, don’t update attribute table. First column is always category of ’from’ feature calledfrom_cat. 💅-a— Calculate distances to all features within the threshold. Output may be written to stdout using the-pflag or uploaded to a new table created by thetableoption; multipleuploadoptions may be used. ✨-s— Print output as square matrix (only possible for one single upload variable). 🦋--overwrite— Allow output files to overwrite existing files. careful bestie--help— Print usage summary. 🫶--verbose— Verbose module output. 🌈--quiet— Quiet module output. 🤫--ui— Force launching GUI dialog. 👑
🎛️ Parameters 🎛️
okay so the parameters, bestie, let's get into it:
from=name[required] — Name of existing vector map (from). Or data source for direct OGR access. 💖from_layer=string— Layer number or name (from). Vector features can have category values in different layers. This number determines which layer to use. When used with direct OGR access this is the layer name. Default:1. ✨from_type=string[,string,...]— Feature type (from). Input feature type. Options:point,line,boundary,centroid,area. Default:point,line,area. 🦋to=name[required] — Name of existing vector map (to). Or data source for direct OGR access. 💖to_layer=string— Layer number or name (to). Vector features can have category values in different layers. This number determines which layer to use. When used with direct OGR access this is the layer name. Default:1. ✨to_type=string[,string,...]— Feature type (to). Input feature type. Options:point,line,boundary,centroid,area. Default:point,line,area. 🦋output=name— Name for output vector map containing lines connecting nearest elements. 🌈dmax=float— Maximum distance or-1for no limit. Map units, meters for ll. Default:-1. ✨dmin=float— Minimum distance or-1for no limit. Map units, meters for ll. Default:-1. ✨upload=string[,string,...][required] — Values describing the relation between two nearest features. Options:cat: category of the nearest featuredist: minimum distance to nearest featureto_x: x coordinate of the nearest point on the ’to’ featureto_y: y coordinate of the nearest point on the ’to’ featureto_along: distance to the nearest point on the ’to’ feature along that linear featureto_angle: angle along the nearest linear feature in the ’to’ map, measured CCW from the +x axis, in radians, between-PiandPiinclusiveto_attr: attribute of nearest feature given byto_columnoption
column=name[,name,...]— Column name(s) where values specified byuploadoption will be uploaded. 💅to_column=name— Column name of nearest feature (used withupload=to_attr). 👑table=name— Name for new attribute table. 🍓separator=character— Field separator for printing output to stdout. Special characters:pipe,comma,space,tab,newline. Default:pipe. 🦋
💅 DESCRIPTION 💅
okay so v.distance finds the nearest element in vector map (to) for elements in vector map (from). Various info about the vectors’ relationships — distance, category, etc. — may be uploaded to the attribute table attached to the first vector map, or printed to stdout. A new vector map may be created where lines connecting nearest points on features are written. dmin and/or dmax can be used to limit the search radius (in lat-long projects, give them in meters since they are calculated as geodesic distances on a sphere). periodt.
For lines to lines, say line A to line B, v.distance calculates the shortest distance of each vertex in A with each segment (not vertex) in B. The module then calculates the shortest distance of each vertex in B to each segment in A. The overall shortest distance of A points to B segments and B points to A segments is used. Additionally, v.distance checks for intersections. In case of intersections, the first intersection found is used and the distance set to zero. no cap.
For lines to areas, the distance is set to zero if a line is (partially) inside an area. The first point of the line that is inside the area is used as common point. The distance is also set to zero if the line intersects with the outer ring or any of the inner rings (isles), in which case the first intersection is used as common point. 🦋
For areas to areas, the module checks first for overlap or if one area is (partially) inside the other area. This is computationally quite intensive. If the outer rings of the two areas do not overlap, the distance is calculated as above for lines to lines, treating the outer rings as two lines. Again, the first point encountered falling into an area is used as common point, or the first intersection point. ✨
For anything else than points to lines, there can be several common locations with zero distance, and the common location would then be the result of an overlay consisting of several points, lines, or areas. v.distance selects in these cases a single point, and does not create an overlay like v.overlay. In this implementation, any shared point is as good as any other. Calculating an intersection is costlier than to check if a vertex is inside a polygon. For example, if a vertex of the boundary of the ’to’ area is inside the ’from’ area, it is a common location. For speed reasons, the distance is then set to zero and no further tests are done. iykyk.
📝 NOTES 📝
some important tea before you run off:
- If a nearest feature does not have a category, the attribute column is updated to
NULL. 💖 - The upload column(s) must already exist. Create one with
v.db.addcolumn. ✨ - In lat-long projects
v.distancegives distances (dist,from_along, andto_along) not in degrees but in meters calculated as geodesic distances on a sphere. 🦋 - If one or both of the input vector maps are 3D, the user is notified accordingly. 👑
- The
-pflag prints the results to standard output. By default the output is in form of a linear matrix. If only one variable is uploaded and a square matrix is desired, the user can set the-sflag. 🌈
✨ EXAMPLES ✨
okok bestie this is the part where it all clicks, fr fr — every single one of these is copy-paste ready 💖
💫 Find nearest lines
Find the nearest lines in vector map "ln" for points coming from vector map "pnt", but only within the given threshold, then write the related line categories into column "linecat" in an attribute table attached to vector map "pnt":
v.distance from=pnt to=ln upload=cat column=linecat
🌸 Find nearest area
For each point from vector map "pnt", find the nearest area from map "ar" within the given threshold and write the related area categories into column "areacat" in an attribute table attached to vector map "pnt" (and yes, if a point falls into an area, the distance is zero, periodt):
v.distance from=pnt to=ar upload=cat column=areacat
🦋 Create a new vector map
Make a brand-new vector map that holds lines connecting the nearest features of maps "pnt" and map "ln". The resulting vector map can be used, for example, to connect points to a network as needed for network analysis — main character move honestly:
v.distance from=pnt to=ln out=connections upload=dist column=dist
👑 Create a new vector map with from and to categories in the attribute table
Make a new vector map with lines connecting the nearest features of maps "pnt" and "ln", plus a new attribute table holding distances, from categories and to categories from the input maps:
v.distance from=pnt to=ln out=connections upload=cat,dist column=to_cat,dist table=connections
🎀 Query information
Query info from selected point(s). Heads up: v.distance takes points from a vector map as input instead of stdin, so a new vector map with query points has to be created before the map can be analysed, no cap.
Create the query map (if it's not there already):
echo "123456|654321|1" | v.in.ascii output=pnt
Then find the nearest features:
v.distance -p from=pnt to=map_to_query upload=cat
🍓 Point-in-polygon
The option dmax=0 is important here, and here's why: otherwise, for points not falling into any area, the category of the nearest area gets recorded instead. So for each point from vector map "pnt", find the area from vector map "ar" in which that individual point falls, and write the related area categories to column "areacat" in the attribute table attached to vector map "pnt":
v.distance from=pnt to=ar dmax=0 upload=cat column=areacat
🧚 Univariate statistics on results
Make a vector map holding connecting lines and go investigate the mean distance to targets. There's an alternative solution too: use the v.distance upload=dist option to upload distances straight into the bugs vector, then run v.univar on that. Also note you can upload two columns at a time, e.g. v.distance upload=cat,dist column=nearest_id,dist_to_nr.
# create working copy
g.copy vect=bugsites,bugs
# add new attribute column to hold nearest archsite category number
v.db.addcolumn map=bugs column="nrst_arch INTEGER"
v.distance from=bugs to=archsites to_type=point upload=to_attr \
to_column=cat column=nrst_arch out=vdistance_vectors_raw
# we need to give the lines category numbers, create a table, and create
# a column in that table to hold the distance data.
v.category vdistance_vectors_raw out=vdistance_vectors type=line op=add
g.remove -f type=vector name=vdistance_vectors_raw
v.db.addtable map=vdistance_vectors column="length DOUBLE"
v.to.db map=vdistance_vectors option=length column=length
# calculate statistics
v.univar vdistance_vectors column=length
💜 Print distance between points
Example for a Latitude-longitude project (EPSG 4326):
# points along the equator
echo "0|-61|1" | v.in.ascii output=pnt1 input=-
echo "0|-58|1" | v.in.ascii output=pnt2 input=-
# here, distances are in degree units
v.distance -p --q from=pnt1 to=pnt2 upload=dist
from_cat|distance
1|3
🌈 Print distance matrix
North Carolina sample data, let's go 🫶
As a linear matrix:
v.distance -pa from=hospitals to=hospitals upload=dist,to_attr to_column=NAME separator=tab
from_cat to_cat dist to_attr
1 1 0 Cherry Hospital
1 2 7489.1043632983983 Wayne Memorial Hospital
1 3 339112.17046729225 Watauga Medical Center
1 4 70900.392145909267 Central Prison Hospital
1 5 70406.227393921712 Dorothea Dix Hospital
As a square matrix (only possible with a single upload option):
v.distance -pas from=hospitals to=hospitals upload=dist separator=tab
from_cat to_cat dist
1 2 3 4 5 ...
1 0 7489.10 339112.17 70900.39 70406.23 ...
2 7489.10 0 345749.12 76025.46 75538.87 ...
3 339112.17 345749.12 0 274153.19 274558.98 ...
4 70900.39 76025.46 274153.19 0 501.11 ...
5 70406.23 75538.87 274558.98 501.11 0 ...
...
🔍 SEE ALSO
r.distancev.db.addcolumnv.what.vect
💅 AUTHORS
- Janne Soimasuo 1994, University of Joensuu, Faculty of Forestry, Finland
- Cmd line coordinates support: Markus Neteler, ITC-irst, Trento, Italy
- Updated for 5.1: Radim Blazek, ITC-irst, Trento, Italy
- Matrix-like output by Martin Landa, FBK-irst, Trento, Italy
- Improved processing speed: Markus Metz
- Distance from any feature to any feature: Markus Metz
- New table without the
-pflag: Huidae Cho Make linear matrix the default for all outputs: Moritz Lennert
📜 SOURCE CODE
Available at: v.distance source code (history)
Accessed: Saturday Jan 17 05:41:21 2026
Main index | Vector index | Topics index | Keywords index | Graphical index | Full index
© 2003-2025 GRASS Development Team, GRASS GIS 8.4.2 Reference Manual
and that's the whole page bestie, you ate that 💖 this was the GRASS GIS 8.4.2 Reference Manual version of v.distance(1), copyright © 2003-2025 GRASS Development Team, and it got accessed Saturday Jan 17 05:41:21 2026 — go forth and measure some distances, queen 👑✨
📦 where this page comes from
- fedora 44: grass 8.4.2-4.fc44 · GPL-2.0-or-later
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms