---
name: "v.lrs.create"
section: "1grass"
platform: "linux"
package: "grass-doc"
version: "8.4.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/v.lrs.create"
---

# v.lrs.create(1grass)

Creates a linear reference system.

## NAME

**v.lrs.create**  - Creates a linear reference system.

## KEYWORDS

vector, linear reference system, network

## SYNOPSIS

**v.lrs.create**\
 **v.lrs.create --help**\
 **v.lrs.create** **in\_lines**=*name* **out\_lines**=*name*  \[**err**=*name*\]  **points**=*name*  \[**llayer**=*string*\]   \[**player**=*string*\]  **lidcol**=*string* **pidcol**=*string*  \[**start\_mp**=*string*\]   \[**start\_off**=*string*\]   \[**end\_mp**=*string*\]   \[**end\_off**=*string*\]   \[**rsdriver**=*string*\]   \[**rsdatabase**=*string*\]  **rstable**=*string*  \[**threshold**=*float*\]   \[--**overwrite**\]  \[--**help**\]  \[--**verbose**\]  \[--**quiet**\]  \[--**ui**\]

### Flags:

- **--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:

- **in\_lines**=*name* **\[required\]**

  Name of input vector map\
   Input vector map containing lines

- **out\_lines**=*name* **\[required\]**

  Output vector map where oriented lines are written

- **err**=*name*

  Output vector map of errors

- **points**=*name* **\[required\]**

  Name of input vector map\
   Input vector map containing reference points

- **llayer**=*string*

  Layer number or name\
   Line layer\
   Default: *1*

- **player**=*string*

  Layer number or name\
   Point layer\
   Default: *1*

- **lidcol**=*string* **\[required\]**

  Column containing line identifiers for lines

- **pidcol**=*string* **\[required\]**

  Column containing line identifiers for points

- **start\_mp**=*string*

  Column containing milepost position for the beginning of next segment\
   Default: *start\_mp*

- **start\_off**=*string*

  Column containing offset from milepost for the beginning of next segment\
   Default: *start\_off*

- **end\_mp**=*string*

  Column containing milepost position for the end of previous segment\
   Default: *end\_mp*

- **end\_off**=*string*

  Column containing offset from milepost for the end of previous segment\
   Default: *end\_off*

- **rsdriver**=*string*

  Driver name for reference system table\
   Options: *dbf, mysql, odbc, ogr, pg, sqlite*\
   Default: *sqlite*

- **rsdatabase**=*string*

  Database name for reference system table\
   Default: *$GISDBASE/$LOCATION\_NAME/$MAPSET/sqlite/sqlite.db*

- **rstable**=*string* **\[required\]**

  Name of table where the reference system will be written\
   New table is created by this module

- **threshold**=*float*

  Maximum distance of point to line allowed\
   Default: *1*

## DESCRIPTION

*v.lrs.create* generates a LRS (Linear Reference System) from vector line and point data.

It is highly recommended to work with polylines instead of segmented vector lines. The command *v.build.polylines* creates this map structure.

## NOTES

The mileposts (point) vector map columns *start\_mp*, *start\_off*, *end\_mp*, *end\_off* must be of ’double precision’ type. For milepost ordering, it is sufficient to enter increasing numbers into the *start\_mp* column indicating the order along the vector line.

The *lidcol* and *pidcol* columns contain the line IDs which relate mileposts and vector line(s) to each other.

When creating a LRS with this module, any existing *rstable* will be replaced.

## EXAMPLE

This example is written for the Spearfish dataset.

As first step, bus route data are prepared.\

```
# break into segments for correct route selection
v.clean roads_net out=busroute_tmp tool=break
# make polyline for easier line selection by coordinate pairs
v.build.polylines busroute_tmp out=busroute_tmp2
# reverse delete: reduce route map to bus route (enter in one line)
v.edit -r busroute_tmp2 tool=delete coords=590273,4927304,\
590346,4927246,590414,4927210,590438,4927096,590468,4926966,\
590491,4926848,590566,4926798,590637,4926753,590701,4926698,\
590830,4926726,590935,4926751,590993,4926830,590972,4926949,\
590948,4927066,590922,4927182,590957,4927251 threshold=5
# vector line needs to be polyline
v.build.polylines busroute_tmp2 out=busroute_tmp3
v.category busroute_tmp3 out=busroute op=add
g.remove -f type=vector name=busroute_tmp,busroute_tmp2,busroute_tmp3
```

The result can be visualized:\

```
g.region vector=busroute n=n+100 s=s-100 w=w-100 e=e+100
d.mon x0
d.vect roads_net
d.vect busroute col=red width=2
```

The vector map ’busroute’ needs have an attribute table which contain an integer column *lidcol* with value be ’22’ for this example (bus route):\

```
v.db.addtable busroute col="lid integer"
v.db.update busroute col=lid value=22
v.db.select busroute
cat|lid
1|22
```

A new point map ’busstops’ shall contain mileposts (bus stops) along this line (use *thresh* to define maximal accepted deviation from this line):\

```
# generate points map
echo "590263|4927361
590432|4927120
590505|4926776
590660|4926687
590905|4926742
590972|4926949
591019|4927263" | v.in.ascii out=busstops
d.vect busstops icon=basic/triangle col=blue
d.vect busstops disp=cat lcol=blue
```

The milepost attributes table needs to be created with specific columns:\

```
v.db.addtable busstops col="lid integer, start_mp double precision, \
            start_off double precision, end_mp double precision, \
            end_off double precision"
v.db.update busstops col=lid value=22
```

Since the digitizing order of v.in.ascii above reflects the bus stop order along the route, we can simply copy the category number as milepost order number in column *start\_mp*:\

```
v.db.update busstops col=start_mp qcol=cat
# verify table
v.db.select busstops
cat|lid|start_mp|start_off|end_mp|end_off
1|22|1|||
2|22|2|||
3|22|3|||
4|22|4|||
5|22|5|||
6|22|6|||
7|22|7|||
# visualize with start_mp to check order
d.erase
d.vect roads_net
d.vect busroute col=red width=2
d.vect busstops icon=basic/triangle col=blue
d.vect busstops disp=attr attrcol=start_mp lcol=blue
```

Offsets (*start\_off*, *end\_off*) can be later used in case the route or mileposts get modified.

As second step, the linear reference network is created:\

```
v.lrs.create busroute points=busstops out=route_lrs err=lrs_error \
             lidcol=lid pidcol=lid rstable=route_lrs threshold=50
```

This creates the maps ’route\_lrs’ containing the LRS and ’lrs\_error’ containing the errors if any. The resulting LRS table and map can be shown:\

```
# show LRS table
db.select table=route_lrs
d.vect route_lrs col=blue width=2
```

## SEE ALSO

*v.build.polylines,* *v.lrs.segment,* *v.lrs.where,* *v.lrs.label*

*LRS tutorial,*\
 *Introducing the Linear Reference System in GRASS*

## AUTHORS

Radim Blazek, ITC-irst/MPA Solutions\
 Documentation update (based on above journal article and available fragments): Markus Neteler

## SOURCE CODE

Available at: v.lrs.create source code (history)

Accessed: Monday Feb 24 17:51:17 2025

Main index \| Vector index \| Topics index \| Keywords index \| Graphical index \| Full index

© 2003-2025 GRASS Development Team, GRASS GIS 8.4.1 Reference Manual
