# pgRouting Manual (3.6)

## TRSP - Family of functions

When points are also given as input:

Proposed

Warning

Proposed functions for next mayor release.

- They are not officially in the current release.

- They will likely officially be part of the next mayor release:

  - The functions make use of ANY-INTEGER and ANY-NUMERICAL

  - Name might not change. (But still can)

  - Signature might not change. (But still can)

  - Functionality might not change. (But still can)

  - pgTap tests have being done. But might need more.

  - Documentation might need refinement.

- pgr_trsp - Proposed - Vertex - Vertex routing with restrictions.

- pgr_trspVia - Proposed - Via Vertices routing with restrictions.

- pgr_trsp_withPoints - Proposed - Vertex/Point routing with restrictions.

- pgr_trspVia_withPoints - Proposed - Via Vertex/point routing with restrictions.

Warning

Read the Migration guide about how to migrate from the deprecated TRSP functionality to the new signatures or replacement functions.

Experimental

Warning

Possible server crash

- These functions might create a server crash

Warning

Experimental functions

- They are not officially of the current release.

- They likely will not be officially be part of the next release:

  - The functions might not make use of ANY-INTEGER and ANY-NUMERICAL

  - Name might change.

  - Signature might change.

  - Functionality might change.

  - pgTap tests might be missing.

  - Might need c/c++ coding.

  - May lack documentation.

  - Documentation if any might need to be rewritten.

  - Documentation examples might need to be automatically generated.

  - Might need a lot of feedback from the comunity.

  - Might depend on a proposed function of pgRouting

  - Might depend on a deprecated function of pgRouting

- pgr_turnRestrictedPath - Experimental - Routing with restrictions.

## Introduction

Road restrictions are a sequence of road segments that can not be taken in a sequential manner. Some restrictions are implicit on a directed graph, for example, one way roads where the wrong way edge is not even inserted on the graph. But normally on turns like no left turn or no right turn, hence the name turn restrictions, there are sometimes restrictions.

### TRSP algorithm

The internal TRSP algorithm performs a lookahead over the dijkstra algorithm in order to find out if the attempted path has a restriction. This allows the algorithm to pass twice on the same vertex.

### Parameters

Parameter | Type | Description
--- | --- | ---
Edges SQL | `TEXT` | Edges SQL query as described.
Restrictions SQL | `TEXT` | Restrictions SQL query as described.
via vertices | `ARRAY[` ANY-INTEGER `]` | Array of ordered vertices identifiers that are going to be visited.

Where:

ANY-INTEGER:

  SMALLINT, INTEGER, BIGINT

### Restrictions

On road networks, there are restrictions such as left or right turn restrictions, no U turn restrictions.

A restriction is a sequence of edges, called path and that path is to be avoided.

Restrictions on the road network

These restrictions are represented on a table as follows:

    /* -- r1 */
    CREATE TABLE restrictions (
        id SERIAL PRIMARY KEY,
        path BIGINT[],
        cost FLOAT
    );
    /* -- r2 */
    INSERT INTO restrictions (path, cost) VALUES
    (ARRAY[4, 7], 100),
    (ARRAY[8, 11], 100),
    (ARRAY[7, 10], 100),
    (ARRAY[3, 5, 9], 4),
    (ARRAY[9, 16], 100);
    /* -- r3 */
    SELECT * FROM restrictions;
    /* -- r4 */

Note

The table has an identifier, which maybe is needed for the administration of the restrictions, but the algorithms do not need that information. If given it will be ignored.

### Edges SQL

Column | Type | Default | Description
--- | --- | --- | ---
`id` | ANY-INTEGER |  | Identifier of the edge.
`source` | ANY-INTEGER |  | Identifier of the first end point vertex of the edge.
`target` | ANY-INTEGER |  | Identifier of the second end point vertex of the edge.
`cost` | ANY-NUMERICAL |  | Weight of the edge (`source`, `target`)

`reverse_cost`

ANY-NUMERICAL

-1

Weight of the edge (`target`, `source`)

- When negative: edge (`target`, `source`) does not exist, therefore it’s not part of the graph.

Where:

ANY-INTEGER:

  `SMALLINT`, `INTEGER`, `BIGINT`

ANY-NUMERICAL:

  `SMALLINT`, `INTEGER`, `BIGINT`, `REAL`, `FLOAT`

#### Restrictions SQL

Column | Type | Description
--- | --- | ---
`path` | `ARRAY` [ANY-INTEGER] | Sequence of edge identifiers that form a path that is not allowed to be taken. - Empty arrays or `NULL` arrays are ignored. - Arrays that have a `NULL` element will raise an exception.
`Cost` | ANY-NUMERICAL | Cost of taking the forbidden path.

Where:

ANY-INTEGER:

  `SMALLINT`, `INTEGER`, `BIGINT`

ANY-NUMERICAL:

  `SMALLINT`, `INTEGER`, `BIGINT`, `REAL`, `FLOAT`

## See Also

Indices and tables

- Index

- Search Page