Существует два типа связей геометрические и иерархические. Для корректной работы инструментов редактирования связей\пролётов и корректного отображения необходимо придерживаться ниже указанной топологии.
В текущей топологии участвуют объекты воздушная линия, участок воздушной линии, пролёт воздушной линии, опора, точечная подстанция(ПС, ТП, РП, КТП), площадная подстанция, РУ, кабельная линия, кабельный участок, муфта, концы кабельного участка.
Все описанные объекты имеют различный тип, который необходимо указать в атрибутах в виде атрибута type.
Далее нам необходимо построить связи между объектами. Геометрические связи позволяют строить одни объекты на основе геометрии других объектов. В том числе при редактировании геометрии изменять информацию сразу во всех связанных объектах.
Для создания геометрических связей используется специальный атрибут relations. Как показано в примере ниже
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "id": "value" }, "system": { "relations": [ { "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" }, { "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142" } ] "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate" }, "geometry": { "type": "Polygon" } } ] }
Рассмотрим соединение ВЛ - ТП, в данном примере мы имеем линию, где на конце находится точечный объект ТП. Если рассматривать иерархию сверху вниз, то на верху стоит линия, которая имеет связи с участками и система строит геометрию на основе дочерних элементов. Далее, участок ссылается на пролёты, так-же геометрия строится на основе них. Пролёты в свою очередь представлены линией из двух точек на конце, опора и ТП. В середине линии пролёты ссылаются на две опоры. В конечном счёте вся геометрия строится на координатах опор и ТП или других объектах на концах линии.
Система имеет инструмент редактирования связей редактор пролётов. Инструмент работает от нижнего уровня точечных объектов, опор, точечных ПС, ТП, РП, РУ, муфт и крайних точек кабельных линий. Чтобы найти связи доступные для редактирования используются геометрические и иерархические связи с родительскими объектами.
Иерархические связи необходимы для создания связи между объектами, если явной геометрической связи нет. К примеру связи ВЛ и площадной ПС. Допустим система не имеет явной геометрической связи с подстанцией и мы хотим задать её в системе. Мы знаем, что ПС должна иметь связь с ВЛ и нам для работы редактора пролётов необходимо это указать. ПС представлена полигоном, если сделать геометрическую связь линии и полигона, то объект ВЛ будет строится, как полигон, что не является корректным. Поэтому используется иерархическая связь hierarchy с ключевым названием direct
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "id": "value" }, "system": { "relations": [ { "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" }, { "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142" } ], "hierarchy" : [ { "name" : "direct", "links" : [ { "type" : "children", "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" }, { "type" : "children", "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" } ] } ] "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate" }, "geometry": { "type": "Polygon" } } ] }
Рассмотрим соединение ВЛ - ПС, в данном примере мы имеем линию, где на конце находится точечный объект РУ, который связан через ПС с линией с помощью иерархической связи. Изначально система не знает о геометрической связи РУ и пролёта на конце линии. Для работы редактора пролётов мы указываем иерархическую связь ПС и линии, тогда мы сможем связать пролёты данной линии и особые точки ПС. В данном случаи мы не можем напрямую связать площадную ПС и линию, так-как необходимо наличии точки построения линии. В качестве особой точки выступает объект РУ, который находится на территории площадной подстанции. Поэтому мы создаём две иерархические связи РУ и ПС, ПС и Линия, после чего инструмент может использовать пролёты линии для присоединения к РУ.
В конечном итоге после обработки инструментом связывания, мы создаём геометрическую связь РУ и пролёта и возвращаем в мастер систему.
Рассмотрим соединение КЛ - ПС с двумя участками, в данном примере мы имеем линию, где на конце находится точечный объект РУ, который связан через ПС с линией с помощью иерархической связи аналогично предыдущему примеру, на другом конце мы имеем другой кабельный участок соединённый через муфту. Кабельная линия в отличии от ВЛ не имеет явных пролётов и опор, но имеет координаты поворотных точек. Для работы редактора необходимы особые точки для КЛ, чтобы через них соединять объекты. Поэтому мы можем использовать крайние точки, как особые или муфты если мы соединяем два кабельных участка. Если, мы не имеем такой объект, как муфта, то мы задаём крайние точки в виде особых с помощью геометрических связей. Поворотные точки же не задаются отдельным объектом, а хранятся внутри кабельного участка, как показано ниже.
{ "type": "FeatureCollection", "features": [ { "type" : "Feature", "properties" : { "type" : "lines", }, , "system": { "relations": [ { "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa144" }, { "geometry": 1 }, { "objectId": "c2d22a4c-043d-4c1e-b33f-1f048f093be6" } ] }, "geometry" : { "type" : "LineString", "coordinates" : [ [ 92.951215, 56.005946 ], [ 92.951261, 56.005812 ], [ 92.950578, 56.005647 ], [ 92.950085, 56.005536 ], [ 92.949632, 56.00544 ], [ 92.94945, 56.005808 ] ] } } ] }