Skip to content

Spatial graph

Definition

The spatial graph describes the shape of spaces, as well as their adjacency and connectivity. Edge elements and boundary elements reference edges.

Planar graph

spatial-graph

Under the hood the spatial graph leverages the concept of a planar graph. A graph with nodes and edges where the nodes have positions and therefore a loop of edges creates a face. Adopted to spatial data the graph face is a space and the edge is a wall.

Adjacency

adjacency-graph

The direct result of two spaces sharing the same edge is that they are adjacent. This requires no further computation and is always the ground truth.

Connectivity

connectivity-graph

Connectivity of spaces is defined by taking adjacency and the element that references the edge into account. If an edge is simply a space divider or a wall with a door opening is on that edge the spaces on each sides of the edge are connected.

JSON example

The spatial graph is in 2d space. Using the x and z axis.
See coordinate system.

jsonc
//  (v1)--e1--(v2)--e5--(v5)
//   |         |         |
//   e4   s1   e2   s2   e6
//   |         |         |
//  (v4)--e3--(v3)--e7--(v6)

{
  "spatialGraph": {
    "vertices": [
      { "type": "spatialGraph:vertex", "id": "v1", "position": [0, 0] },
      { "type": "spatialGraph:vertex", "id": "v2", "position": [2, 0] },
      { "type": "spatialGraph:vertex", "id": "v3", "position": [2, 2] },
      { "type": "spatialGraph:vertex", "id": "v4", "position": [0, 2] },
      { "type": "spatialGraph:vertex", "id": "v5", "position": [4, 0] },
      { "type": "spatialGraph:vertex", "id": "v6", "position": [4, 2] }
    ],
    "edges": [
      { "type": "spatialGraph:edge", "id": "e1", "vertices": ["v1", "v2"] },
      // e2 is the shared edge
      { "type": "spatialGraph:edge", "id": "e2", "vertices": ["v2", "v3"] },
      { "type": "spatialGraph:edge", "id": "e3", "vertices": ["v3", "v4"] },
      { "type": "spatialGraph:edge", "id": "e4", "vertices": ["v4", "v1"] },
      { "type": "spatialGraph:edge", "id": "e5", "vertices": ["v2", "v5"] },
      { "type": "spatialGraph:edge", "id": "e6", "vertices": ["v5", "v6"] },
      { "type": "spatialGraph:edge", "id": "e7", "vertices": ["v6", "v3"] }
    ]
  },
  "spaces": [
    {
      "type": "layout:space",
      "id": "s1",
      "boundaries": [{ "edges": ["e1", "e2", "e3", "e4"] }]
    },
    {
      "type": "layout:space",
      "id": "s2",
      "boundaries": [{ "edges": ["e5", "e6", "e7", "e2"] }]
    }
  ]
}