Распространение в изолированной границе - PullRequest
3 голосов
/ 17 апреля 2020

Я новичок в PostGis и изучаю возможности pgrouting. Требование состоит в том, чтобы отслеживать активы в пределах пола. Например, наши данные состоят из небольшого количества информации о зданиях, этажах и активах на этаже. Каждое здание изолировано (не связано друг с другом, но каждое здание имеет несколько этажей. Я хотел выбрать этаж и проследить (кратчайший путь) активов на выбранном этаже.

Как построить топологию в этом случае? Я посмотрел документацию и есть pgr_labelGraph для обозначения подсети.

Может кто-нибудь помочь мне с некоторыми указаниями о том, как я могу подойти к этой проблеме.

Что касается datamodel, Building имеет несколько этажей. Оба соединены с помощью внешнего ключа. Мы собрали все geom-объекты в общую таблицу, которая понравилась через внешний ключ, с каждым объектом internal_floor.

Заранее спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Используйте свое воображение для следующего визуального представления здания:

  • у вас есть здание
  • здание имеет этажи
  • этажи имеют залы и комнаты
  • связь между этажами осуществляется по лестнице и лифту
  • на первом этаже есть выходная дверь, которая соединяется с внешней стороной

Как подготовить график для прокладки от одного помещение в другое?

2-этажное здание

  • Узлы: снаружи, двери комнаты, лестницы и двери лифта и все узлы вдоль Прихожая: a1 ~ a4 & b1 ~ b4
  • Черные края в центре зала,
  • Синие края go от середины зала до двери комнаты ,
  • Ребра, соединяющие этажи, - это лестница и шахта лифта соответственно

Таблица ребер для маршрутизации может иметь такую ​​информацию:

для (stair_door1, stair_door2) край:

  • id = 1
  • source = 15 (при условии, что star_door1 имеет идентификатор 15)
  • target = 66 (при условии, что star_door2 имеет идентификатор 16)
  • cost = 1.5 (подниматься наверх медленнее)
  • reverse_cost = 0,6 (спуск по лестнице быстрее)

для края (elevator_door1, elevator_door2):

  • id = 1
  • source = 15 (при условии, что star_door1 имеет идентификатор 15)
  • target = 66 (при условии, что star_door2 имеет идентификатор 16)
  • cost = 0.3
  • reverse_cost = 0.3

И так для каждого ребра.

Вы должны решить, каковы затраты, если у вас есть доступная геометрия, вы можете использовать длину и использовать неориентированный график.

Как только вы у вас есть таблица ребер и таблица вершин (запомните график G = {E, V})), который вы можете использовать, например, pgr_dijkstra

Это все, что вам нужно для маршрутизации, поскольку вы можете видеть, что геометрии не нужны, et c, но для окончательного применения в таблице ребер и вершин вам могут потребоваться геометрии, т.е. mes (как имена узлов), номер этажа и т. д. c, но дополнительные столбцы в таблицах зависят от приложения.

...