v.to.db(1)
π v.to.db(1) β GRASS GIS User's Manual π
okay bestie, sit down, hydrate, because today we're talking about v.to.db, a real one from the GRASS GIS User's Manual. she takes stuff your vector map knows about itself β areas, lengths, coordinates, whole vibes β and writes it into an attribute table, or just prints it out so you can look at it. no cap, this module is lowkey the backbone of half your attribute workflows. let's get into it π«Ά
β¨ NAME β¨
v.to.db β populates attribute values from vector features. literally that's her whole job and she does it flawlessly π
π KEYWORDS π
vector, attribute table, database, area, azimuth, bounding box, category, compactness, coordinates, fractal, geometry, length, perimeter, sides, sinuous, slope
π SYNOPSIS π
v.to.db
v.to.db --help
v.to.db [-phsc] map=name [layer=string] [type=string[,string,...]]
option=string columns=name[,name,...] [units=string]
[query_layer=string] [query_column=name] [separator=character]
[--overwrite] [--help] [--verbose] [--quiet] [--ui]
π© Flags π©
-pβ Print only. no table, no writes, just show me the receipts β¨-hβ Print header.-sβ Only print SQL statements. she'll hand you the SQL and let you do the rest, main character energy.-cβ Print also totals for optionlength,area, orcount. love a lil summary π--overwriteβ Allow output files to overwrite existing files.--helpβ Print usage summary.--verboseβ Verbose module output.--quietβ Quiet module output.--uiβ Force launching GUI dialog.
ποΈ Parameters ποΈ
map=name[required] β Name of vector map. Or data source for direct OGR access.layer=stringβ Layer number or name (write 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:1type=string[,string,...]β Feature type. Forcoorvalid point/centroid, forlengthvalid line/boundary. Options:point,line,boundary,centroid. Default:point,line,boundary,centroidoption=string[required] β Value to upload. Options:cat,area,compact,fd,perimeter,length,count,coor,start,end,sides,query,slope,sinuous,azimuth,bboxcat: insert new row for each category if doesn't exist yetarea: area sizecompact: compactness of an area, calculated ascompactness = perimeter / (2 * sqrt(PI * area))fd: fractal dimension of boundary defining a polygon, calculated asfd = 2 * (log(perimeter) / log(area))perimeter: perimeter length of an arealength: line lengthcount: number of features for each categorycoor: point coordinates, X,Y or X,Y,Zstart: line/boundary starting point coordinates, X,Y or X,Y,Zend: line/boundary end point coordinates, X,Y or X,Y,Zsides: categories of areas on the left and right side of the boundary,'query_layer'is used for area categoryquery: result of a database query for all records of the geometry (or geometries) from table specified by'query_layer'optionslope: slope steepness of vector line or boundarysinuous: line sinuousity, calculated as line length / distance between end pointsazimuth: line azimuth, calculated as angle between North direction and endnode direction at startnodebbox: bounding box of area, N,S,E,W
columns=name[,name,...][required] β Name of attribute column(s) to populate. Name of attribute column(s).units=stringβ Units. Options:miles,feet,meters,kilometers,acres,hectares,radians,degreesquery_layer=stringβ Query layer number or name (read 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:1query_column=nameβ Name of attribute column used for'query'option. E.g.'cat','count(*)','sum(val)'separator=characterβ Field separator for print mode. Special characters:pipe,comma,space,tab,newline. Default:pipe
πΈ DESCRIPTION πΈ
so v.to.db loads vector map features or metrics into a database table, or prints them (or the SQL queries used to obtain them) in a form of a human-readable report. two modes, both iconic π
for uploaded/printed category values, '-1' is used for 'no category', and 'null'/'-' if the category cannot be found or if multiple categories were found. for line azimuths, '-1' is used for closed lines (start equals end). noted. memorized. tattooed π
π NOTES π
Measures of lengths and areas are always reported in meters, unless the unit parameter is set. and bestie, the units miles, feet, meters and kilometers are square for option=area. don't forget the square part, i'm begging π
Feet and acre units are always reported in their common versions (i.e. the International Foot, exactly 5280 feet in a mile), even when the coordinate reference system's standard map unit is the US Survey foot.
When calculating perimeters in Latitude-Longitude CRS, the geodesic distance between the vertices is used.
When using option=coor on a vector area map, only coordinates of centroids with unique category will be reported.
When using option=bbox on a vector area map with more than one feature per category value, the results corresponds to the bounding box of all features of same category taken together.
Line azimuth is calculated as angle from the North direction to the line endnode direction at the line statnode. By default it's reported in decimal degrees (0-360, CW) but it also may be repored in radians with unit=radians. Azimuth value -1 is used to report closed line with it's startnode and endnode being in same place. Azimuth values make sense only if every vector line has only one entry in database (unique CAT value).
If the module is apparently slow and the map attributes are stored in an external DBMS such as PostgreSQL, it is highly recommended to create an index on the key (category) column. fr fr, do it, your future self will thank you π
Uploading the vector map attributes to a database requires a table attached to a given input vector layer. The print only (-p) mode doesn't require a table. Use db.execute or v.db.addtable to create a table if needed.
Updating the table has to be done column-wise. The column will be created in the table if it doesn't already exist, except when using the print only (-p) mode. If the column exists, the --overwrite flag is required to overwrite it. no sneaky silent overwrites here, she's polite like that π«Ά
π§ͺ EXAMPLES π§ͺ
Updating attribute tables
Upload category numbers to attribute table (used for new map):
v.to.db map=soils type=centroid option=cat
Upload polygon areas to corresponding centroid record in the attribute table:
v.to.db map=soils type=centroid option=area columns=area_size unit=h
Upload line lengths (in meters) of each vector line to attribute table (use v.category in case of missing categories):
v.to.db map=roads option=length type=line columns=linelength units=me
Upload x and y coordinates from vector geometry to attribute table:
v.to.db map=pointsmap option=coor columns=x,y
Upload x, y and z coordinates from vector geometry to attribute table:
v.to.db map=pointsmap option=coor columns=x,y,z
Transfer attributes from a character column (with numeric contents) to a new integer column:
v.db.addcolumn usa_income_employment2002 col="FIPS_NUM integer"
v.to.db usa_income_employment2002 option=query columns=FIPS_NUM query_column=STATE_FIPS
Upload category numbers of left and right area, to an attribute table of boundaries common for the areas:
# add categories for boundaries of the input vector map, in layer 2:
v.category soils out=mysoils layer=2 type=boundary option=add
# add a table with columns named "left" and "right" to layer 2 of the input
# vector map:
v.db.addtable mysoils layer=2 columns="left integer,right integer"
# upload categories of left and right areas:
v.to.db mysoils option=sides columns=left,right layer=2
# display the result:
v.db.select mysoils layer=2
Compute DL, the Fractal Dimension (Mandelbrot, 1982), of the boundary defining a polygon based on the formula: D = 2 * (log perimeter) / (log area):
g.copy vect=soils,mysoils
v.db.addcolumn mysoils col="d double precision"
v.to.db mysoils option=fd column="d"
g.region vector=mysoils res=50
v.to.rast input=mysoils output=soils_fd type=area use=attr attribute_column=d
r.colors map=soils_fd color=gyr
d.mon wx0
d.rast.leg soils_fd
d.vect mysoils type=boundary
Printing reports
Report x,y,z coordinates of points in the input vector map:
v.to.db -p bugsites option=coor type=point
Report all area sizes of the input vector map:
v.to.db -p soils option=area type=boundary units=h
Report all area sizes of the input vector map, in hectares, sorted by category number (requires GNU sort utility installed):
v.to.db -p soils option=area type=boundary units=h | sort -n
Report all line lengths of the input vector map, in kilometers:
v.to.db -p roads option=length type=line units=k
Report number of features for each category in the input vector map:
v.to.db -p roads option=count type=line
π REFERENCES π
- Mandelbrot, B. B. (1982). The fractal geometry of nature. New York: W. H. Freeman.
- Xu, Y. F. & Sun, D. A. (2005). Geotechnique 55, No. 9, 691-695
π SEE ALSO π
d.what.vect, db.execute, v.category, v.db.addtable, v.db.addcolumn, v.db.connect, v.distance, v.report, v.univar, v.what
π AUTHORS π
Radim Blazek, ITC-irst, Trento, Italy Line sinuousity implemented by Wolf Bergenheim
πΎ SOURCE CODE πΎ
Available at: v.to.db source code (history)
Accessed: Saturday Jan 17 05:41:33 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
okay that's the whole page bestie, no skips, no cuts, every single flag and formula accounted for π this was GRASS 8.4.2 and you were reading the v.to.db(1) manual β go populate an attribute table and slay, you've got this πβ¨πΈπ¦
π¦ 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