Перейти к содержанию

Блок "Конструктор графа"

Блок доступен начиная с версии 0.25

img.png

Назначение

Блок преобразует два набора объектов в структуру, пригодную для обработки блоком Слой данных для 3D-Карты. Для работы с блоком его необходимо выбрать в библиотеке и перенести в область графа.

Настройки блока

Работа с настройками блока осуществляется через локальное меню (пункт Настройки):

Общие настройки блоков описаны в отдельном разделе.

Группа "Конструктор графа

Наименование Тип Обязательное Описание Пример
Способ построения графа Выпадающий список Да Выбор способа построения графа
Радиус вершины для формирования графа Целое число Да Доступно, если способ построения графа на основе географических точек и линий. Определяет радиус вокруг вершины, в котором будет происходить поиск начала или конца ребра, связанного с этой вершиной.
Граф должен быть связным Флаг Нет При включенном значении блок не будет продолжать расчет, если граф не связный

Настройка "Способ построения графа"

Возможные варианты настройки "Способ построения графа" и механизмы формирования графа:

  1. На основе географических точек и линий:
    1. Для построения необходимо два массива объектов - Ребра и Вершины.
    2. В первичных ключах каждого объекта обязательно наличие поля id, содержащего уникальный идентификатор ребра или вершины. Все объекты без идентификатора не будут учитываться в построении графа.
    3. В атрибутах каждого объекта обязательно наличие параметра coords, содержащего координаты (линии для ребер или точки для вершин). Все объекты без координат не будут учитываться в построении графа.
    4. Для координат начала и конца каждой грани ищется вершина, попадающая в радиус формирования (см. параметр "Радиус вершины для формирования графа"). Первая найденная вершина будет соотнесена с началом/концом грани.
    5. Все ребра без вершин игнорируются.
    6. Все вершины без ребер добавляются в граф (при этом граф автоматически становится несвязным).
    7. Граф проверяется на связность.
  2. На основе только географических линий:
    1. В разработке.
  3. На основе связей (без географических привязок):
    1. Для построения необходимо два массива объектов - Ребра и Вершины.
    2. В первичных ключах каждого объекта обязательно наличие поле id, содержащего уникальный идентификатор ребра или вершины. Все объекты без идентификатора не будут учитываться в построении графа.
    3. В атрибутах каждого объекта-ребра обязательно наличие параметров source_node_id и destination_node_id, отвечающих за идентификаторы начальной и конечной вершины соответственно. Все ребра без одного или обоих параметров не будут учитываться в построении графа.
    4. Граф проверяется на связность.
  4. На основе вершин с автоматическим построением ребер на основе маршрутов:
    1. В разработке.

Входы блока

Общие настройки входов блока описаны в отдельном разделе.

Наименование входа Тип Обязательный Описание
Ребра JSON Да Список ребер графа
Вершины JSON Нет Вход необходим, если выбран способ построения "На основе географических точек и линий" или "На основе связей (без географических привязок)"
Пример входа Ребра
[
  {
    "pkey": {
      "id": 1
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 1",
      "ord": 1,
      "coords": "[[0, 0], [1, 1], [5,0]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 1"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 2
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 2",
      "ord": 2,
      "coords": "[[5, 0], [5, 1], [5, 2], [5, 4], [5, 5]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 2"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 3
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 3",
      "ord": 3,
      "coords": "[[5,5], [2, 8], [0,5]]",
      "edge_direction": 0,
      "weight": 3,
      "popup": "Edge 3"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 4
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 4",
      "ord": 4,
      "coords": "[[0,5], [0,4], [0,3], [0,2], [0,1], [0,0]]",
      "edge_direction": 0,
      "weight": 3,
      "popup": "Edge 4"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 5
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 5",
      "ord": 5,
      "coords": "[[0,0], [2,3], [5,5]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 5"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 6
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 6",
      "ord": 6,
      "coords": "[[3,3], [7,7], [9,9]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 6"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 7
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 7",
      "ord": 7,
      "coords": "[[47, 45], [10, 35], [46, 16]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 7"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 8
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 8",
      "ord": 8,
      "coords": "[[0, 18], [25, 25], [31, 46]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 8"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 9
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 9",
      "ord": 9,
      "coords": "[[10, 35], [25, 11], [46, 16]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": "Edge 9"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 10
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": " Edge 10",
      "ord": 10,
      "coords": "[[25, 11], [0, 18], [46, 16]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": " Edge 10"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 11
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": " Edge 11",
      "ord": 11,
      "coords": "[[47, 45], [47, 32], [47, 16], [46, 16]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": " Edge 11 (W=2, D=0)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 12
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": " Edge 12",
      "ord": 12,
      "coords": "[[10, 35], [0, 18], [47, 45]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": " Edge 12"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 13
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": " Edge 13",
      "ord": 13,
      "coords": "[[46, 16], [31, 46], [47, 45]]",
      "edge_direction": 0,
      "weight": 2,
      "popup": " Edge 13"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 14
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 14",
      "ord": 14,
      "coords": "[[10, 2], [13, 0], [20, 2]]",
      "edge_direction": 0,
      "weight": 50,
      "popup": "Edge 14 (W=30, D=1)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 15
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Edge 15",
      "ord": 15,
      "coords": "[[10, 2], [13, 4], [20, 2]]",
      "edge_direction": 0,
      "weight": 40,
      "popup": "Edge 15 (W=40, D=0)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 992
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE 11-6",
      "ord": 992,
      "coords": "[[34, 39], [39, 39], [44, 40], [45, 44], [47, 45]]",
      "edge_direction": 0,
      "weight": 53,
      "popup": "EDGE 11-6 (W=53, D=0)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 993
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE 11-12",
      "ord": 993,
      "coords": "[[34, 39], [31, 46]]",
      "edge_direction": 0,
      "weight": 12,
      "popup": "EDGE 11-12 (W=12, D=1)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 995
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE LINK (n14-n15)",
      "ord": 995,
      "coords": "[[12,1], [12,3]]",
      "edge_direction": 0,
      "weight": 1,
      "popup": "EDGE LINK (n14-n15)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 996
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE LINK (n13-n14)",
      "ord": 996,
      "coords": "[[10,2], [12,1]]",
      "edge_direction": 0,
      "weight": 1,
      "popup": "EDGE LINK (n13-n14)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 997
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE LINK (n17-n11)",
      "ord": 997,
      "coords": "[[20,2],[25, 15], [34,39]]",
      "edge_direction": 0,
      "weight": 100,
      "popup": "EDGE LINK (n17-n11) (W=1, D=0)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 998
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE LINK (n3-n5)",
      "ord": 998,
      "coords": "[[5, 5], [6, 6]]",
      "edge_direction": 0,
      "weight": 1,
      "popup": "EDGE LINK (n3-n5)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  },
  {
    "pkey": {
      "id": 999
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "EDGE LINK (n2-n13)",
      "ord": 999,
      "coords": "[[5, 0], [10,2]]",
      "edge_direction": 0,
      "weight": 1,
      "popup": "EDGE LINK (n2-n15)"
    },
    "child": [],
    "_source": "e5d39145-93b3-4bef-8842-e7a69e910d19"
  }
]
Пример входа Вершины
[
  {
    "pkey": {
      "id": 1
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 1",
      "ord": 1,
      "coords": "[0, 0]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 2
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 2",
      "ord": 2,
      "coords": "[5, 0]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 3
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 3",
      "ord": 3,
      "coords": "[5, 5]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 4
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 4",
      "ord": 4,
      "coords": "[0, 5]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 5
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 5",
      "ord": 5,
      "coords": "[6,6]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 6
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 6",
      "ord": 6,
      "coords": "[47, 45]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 7
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 7",
      "ord": 7,
      "coords": "[10, 35]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 8
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 8",
      "ord": 8,
      "coords": "[25, 11]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 9
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 9",
      "ord": 9,
      "coords": "[46, 16]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 10
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 10",
      "ord": 10,
      "coords": "[0, 18]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 11
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 11",
      "ord": 11,
      "coords": "[34, 39]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 12
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 12",
      "ord": 12,
      "coords": "[31, 46]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 13
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 13",
      "ord": 13,
      "coords": "[10,2]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 14
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 14",
      "ord": 14,
      "coords": "[12,1]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 15
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 15",
      "ord": 15,
      "coords": "[12,3]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  },
  {
    "pkey": {
      "id": 17
    },
    "_params": {
      "ts": [],
      "lazy": [],
      "key_field": "id"
    },
    "attrs": {
      "name": "Node 17",
      "ord": 17,
      "coords": "[20,2]"
    },
    "child": [],
    "_source": "0b362bb0-fa89-40ba-81d2-ae8003eb34e7"
  }
]

Выходы блока

Общие настройки выходов блока описаны в отдельном разделе.

Наименование выхода Тип Описание
Граф JSON Структура из двух массивов объектов, связанных между собой
Структура выхода Граф
{
    "id": <Уникальный идентификатор, генерируется при создании графа.>,
    "_source: <Блок-родитель графа>,
    "nodes": [<Массив объектов-вершин>],
    "edges": [<Массив объектов-граней>],
    "isMathGraph": <Флаг, показывающий то, что граф математический (без координат). Не обязательный параметр.>
}

Описание работы блока

Блок принимает на вход данные в виде массивов объектов «Рёбра» и «Вершины» и объединяет их в единый объект «Граф».