Инструменты пользователя

Инструменты сайта


ru:airlay:importformat

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Последняя версия Следующая версия справа и слева
ru:airlay:importformat [2019/07/08 19:48]
Калинин Александр Игоревич [JSON]
ru:airlay:importformat [2021/08/27 13:26]
Калинин Александр Игоревич [Описание формата загрузки и выгрузки формат GJR]
Строка 1: Строка 1:
-====== Описание формата загрузки и выгрузки ======+====== Описание формата загрузки и выгрузки формат GJR(RelationGeoJSON) ======
  
 ==== Navigation ==== ==== Navigation ====
Строка 8: Строка 8:
 ==== Формат ==== ==== Формат ====
  
-Формат загрузки Airlay основан на формате  [[https://tools.ietf.org/html/rfc7946|RFC7946 GeoJson]]. Были добавлены в формат **relations** и необязательность задачи геометрии для объектов, которые строятся на основе других объектов через **relations**.+Формат загрузки Airlay GJR(GeoJson Relation) основан на формате  [[https://tools.ietf.org/html/rfc7946|RFC7946 GeoJson]]. Были добавлены в формат **relations** и необязательность задачи геометрии для объектов, которые строятся на основе других объектов через **relations**.
  
 ==== Поля ==== ==== Поля ====
Строка 31: Строка 31:
  
  
-==== Формат Nodes ==== 
-**Nodes** - коллекция в которой хранятся точки. Все геометрические объекты(точки, линии, полигоны) при загрузке  разбиваться на набор точек и отношение, которое содержит эти точки.   
-<code javascript> 
-{ 
- "lat": double 
- "lon": double 
- "relations": Array<ObjectId> 
-} 
-</code> 
  
-==== Формат Relations ==== +==== Формат Features ==== 
-**Relations** - коллекция в которой находятся отношения в которых состоят точки.   +3) Features - коллекция в которой хранятся геометрические объекты с их свойствами в формате GeoJSON с нашими полями в systemProperties 
-Существует два типа отношений: геометрическое и иерархическое.   + 
-Геометрическое: позволяет строить геометрию объекта, используя указанные точки.   +==== JSON ====
-Иерархическое: используется для построения зависимостей объектов разного типа друг от друга+
 <code javascript> <code javascript>
 { {
-  "type": "geometry", +  "type": "FeatureCollection", 
-  "systemProperties":+  "features": [
-    "k": "v", +
-    "relations": Array<ObjectId> +
-  }, +
-  "properties":+
-    "k": "v" +
-  }, +
-  "geometryType": "Point, LineString, Polygon, ...", +
-  "members": [+
     {     {
-      "type": "relation", +      "type": "Feature", 
-      "id": "37afa850-82bc-4692-aaaa-e7a1bc4aa144", +      "properties":
-      "role": "inner+        "key": "value" 
-    }, +      }, 
-    +      "system":
 +        "relations":
 +          { 
 +            "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" 
 +          }
 +          { 
 +            "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142
 +          } 
 +        ], 
 +        "operation": "delete"/"create"/"relationUpdate"/"coordinatesUpdate" 
 +      }, 
 +      "geometry":
 +        "type": "Polygon", 
 +        "coordinates":
 +          [ 
 +            [ 
 +              42.73633, 
 +              44.40153 
 +            ], 
 +            [ 
 +              42.73696, 
 +              44.40228 
 +            ], 
 +            [ 
 +              42.73797, 
 +              44.40185 
 +            ], 
 +            [ 
 +              42.73732, 
 +              44.4011 
 +            ], 
 +            [ 
 +              42.73633, 
 +              44.40153 
 +            ] 
 +          ] 
 +        ] 
 +      } 
 +    
 +  ] 
 +}
 </code> </code>
-----+Для удаления объекта, значение properties.id(уникальное поле) должно соответствовать удаляемому объекту:
 <code javascript> <code javascript>
-``` 
 { {
-  "type": "hierarchy", +  "type": "FeatureCollection", 
-  "systemProperties" : { +  "features": [
-    "k": "v" +
-  }, +
-  "properties":+
-    "k": "v" +
-  }, +
-  "members": [ +
-    { +
-      "type": "relation", +
-      "id": "37afa850-82bc-4692-aaaa-e7a1bc4aa144", +
-      "role": "parent" +
-    },+
     {     {
-      "type": "relation", +      "type": "Feature", 
-      "id": "37afa850-82bc-4692-bbbb-e7a1bc4aa144", +      "properties":
-      "role": "child"+        "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" 
 +      }
     }     }
   ]   ]
 } }
-``` +</code>  
-</code> + 
-==== Формат Features ==== +==== Иерархическая связность объектов. ====  
-3) Features - коллекция в которой хранятся геометрические объекты с их свойствами в формате GeoJSON с нашими полями в systemProperties+Данный параметр является необязательным в формате и используется для специфических бизнес задач. 
 + 
 +Для добавления иерархических связей, необходимо задать массив связей "hierarchy". Один набор данных может содержать несколько различных связей. 
 + 
 +Объект иерархии содержит
 + 
 +**"name" : string** уникальное название иерархии и массив связей "links".  
 + 
 +**"links"** содержит объекты связей уникальный идентификатор "objectId", с кем связан объект и тип связи
 + 
 +**"children"** задание дочернего объекта, который содержится в родительском(текущем объекте).
  
-==== JSON ==== 
 <code javascript> <code javascript>
 { {
-       "type": "FeatureCollection", +  "type": "FeatureCollection", 
-       "features":+  "features":
-         +    
-           "type": "Feature", +      "type": "Feature", 
-           "properties":+      "properties":
-             "key": "value"+        "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" 
 +                } 
 +              ]           
            },            },
-           "system": { +           
-             "relations": [ +              "name" : "cim", 
-               +              "links" : [ 
-                 "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" +                
-               }, +                  "type" : "children", 
-               +                  "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9" 
-                 "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142+                }, 
-               +                
-             ]+                  "type" : "children", 
 +                  "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa1c9
 +                
 +                        
            },            },
-           "geometry":+        ] 
-             "type": "Polygon", +        "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate" 
-             "coordinates":+      }, 
-               [ +      "geometry":
-                 [ +        "type": "Polygon" 
-                   42.73633, +      
-                   44.40153 +    }
-                 ], +
-                 [ +
-                   42.73696, +
-                   44.40228 +
-                 ], +
-                 [ +
-                   42.73797, +
-                   44.40185 +
-                 ], +
-                 [ +
-                   42.73732, +
-                   44.4011 +
-                 ], +
-                 [ +
-                   42.73633, +
-                   44.40153 +
-                 ] +
-               ] +
-             ] +
-           +
-         }+
   ]   ]
 } }
-</code> +</code>  
-Для удаления объектазначение properties.id(уникальное поле) должено соответствовать удаляемому объекту:+ 
 +==== MayBeLineString ====  
 +**"MayBeLineString"**, который задаёт проверку, если это LineStringто делаем его LineString, если можно построить MultiLineString то используем его, если есть в ссылках точки, то тоже пытаемся их строить. Для типов LineString и MultiLineString, если мы не можем однозначно построить объект то выдаём ошибку и не строим. 
 <code javascript> <code javascript>
 { {
Строка 163: Строка 205:
             "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142"             "objectId": "37afa850-82bc-4692-b7c7-e7a1bc4aa142"
           }           }
-        ], +        ],         
-        "deleted": true+        "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate"
       },       },
       "geometry": {       "geometry": {
-        "type": "Polygon"+        "type": "MayBeLineString"
       }       }
     }     }
Строка 173: Строка 215:
 } }
 </code>  </code> 
 +
 +==== LineString и MultiLineString ==== 
 +**"LineString"**, **если собственной геометрии не задано, то обязан ссылаться только на Point объекты**, в противном случаи идёт ошибка. Если образуется MultiLineString объект, выдавать ошибку.
 +
 +**"MultiLineString"**, **если собственной геометрии не задано, то обязан ссылаться только на LineString или другие MultiLineString объекты**, в противном случаи идёт ошибка.
 +
 +<code javascript>
 +{
 +  "type": "FeatureCollection",
 +  "features": [
 +    {
 +      "type": "Feature",
 +      "properties": {
 +        "id": "value"
 +      },
 +      "system": {
 +        "relations": [
 +          {
 +            "objectId": "37afa850-line-id-1"
 +          },
 +          {
 +            "objectId": "37afa850-multiline-id-1"
 +          }
 +        ],        
 +        "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate",
 +        //Если задан полигон
 +        "barycenter": 
 +         {
 +          "type": "Point", 
 +          "coordinates": [42.73633, 44.40153]
 +         },
 +         //Если задан мульти полигон полигон
 +         "barycenter": 
 +         {
 +          "type": "MultiPoint", 
 +          "coordinates": [
 +           [42.73633, 44.40153],
 +           [42.83633, 44.50153]
 +          ]
 +         }
 +      },
 +      "geometry": {
 +        "type": "MultiLineString"
 +      }
 +    },
 +    {
 +      "type": "Feature",
 +      "properties": {
 +        "id": "37afa850-line-id-1"
 +      },
 +      "system": {
 +        "relations": [
 +          {
 +            "objectId": "37afa850-point-id-1"
 +          },
 +          {
 +            "objectId": "37afa850-point-id-2"
 +          }
 +        ],        
 +        "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate"
 +      },
 +      "geometry": {
 +        "type": "LineString"
 +      }
 +    },
 +    {
 +      "type": "Feature",
 +      "properties": {
 +        "id": "37afa850-point-id-1"
 +      },
 +      "system": {
 +        "relations": [
 +        ],        
 +        "operation": "delete"/"create"/"update"/"relationUpdate"/"coordinatesUpdate"
 +      },
 +      "geometry": {
 +        "type": "Point",
 +        "coordinates": [
 +          85.3538402166585,
 +          51.9571677261215
 +        ]
 +      }
 +    }
 +  ]
 +}
 +</code> 
 +
 +==== Опции для задания стилей ==== 
 +В поле "system" можно дополнительно передать объект опции "options", который может содержать стили слоя для объекта. При задании конкретных стилей, объект перезапишет нужные стили в слое. Следовательно, можно задать не все стили в опциях, а только необходимые.
 +<code javascript>
 +"options" : {
 +        "lineOptions" : {
 +            "color" : "#006b00",
 +            "weight" : 3,
 +            "opacity" : 1,
 +            "maxZoom" : 30,
 +            "minZoom" : 10,
 +            "dashArray" : 0,
 +            "isDash" : false
 +        },
 +        "multiPolygonOptions" : {
 +            "color" : "#006b00",
 +            "weight" : 4,
 +            "opacity" : 1,
 +            "fillOpacity" : 0.5,
 +            "maxZoom" : 30,
 +            "minZoom" : 10,
 +            "convertToPointZoom" : 0,
 +            "dashArray" : 0,
 +            "isDash" : false
 +        },
 +        "pointOptions" : {
 +            "markerType" : "marker",
 +            "maxZoom" : 30,
 +            "minZoom" : 10,
 +            "iconOptions" : {
 +                "iconUrl" : "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png",
 +                "iconSize" : [ 
 +                    25, 
 +                    41
 +                ],
 +                "iconAnchor" : [ 
 +                    20, 
 +                    40
 +                ]
 +            },
 +            "markerOptions" : {
 +                "type" : "circle",
 +                "radius" : 4,
 +                "numberOfSides" : 3,
 +                "rotation" : 0,
 +                "color" : "#006b00",
 +                "weight" : 4,
 +                "fillOpacity" : 0.5,
 +                "fillColor" : "#006b00",
 +                "dashArray" : 0,
 +                "isDash" : false
 +            }
 +        }
 +    }
 +</code>
ru/airlay/importformat.txt · Последнее изменение: 2021/08/27 13:26 — Калинин Александр Игоревич