10.1.3. Create resource

Group

Для создания ресурса необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание группы ресурсов

Request JSON Object:
 
  • cls (string) – тип (для группы должен быть «resource_group»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя группы (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {"resource":
   {"cls":"resource_group",
    "parent":{"id":0},
    "display_name":"test",
    "keyname":"test_key",
    "description":"qqq"
   }
 }

PostGIS Connection

Для создания PostGIS подключения необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание PostGIS подключения

Request JSON Object:
 
  • cls (string) – тип (для группы должен быть «postgis_connection»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя подключения (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)
  • database (string) – имя БД
  • hostname (string) – адрес БД
  • password (string) – пароль
  • username (string) – логин

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "postgis_connection": {
     "database": "postgis",
     "hostname": "localhost",
     "password": "secret",
     "username": "user"
   },
   "resource": {
     "cls": "postgis_connection",
     "description": "The localhost PostGIS Connection",
     "display_name": "localhost",
     "keyname": "localhost_key",
     "parent": {
       "id": 0
     }
   }
 }

PostGIS Layer

Для создания PostGIS слоя необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание PostGIS слоя

Request JSON Object:
 
  • cls (string) – тип (для группы должен быть «postgis_layer»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя слоя (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)
  • column_geom (string) – имя колонки с геометрией (обычно wkb_geometry)
  • column_id (string) – имя колонки уникального ключа (обычно ogc_fid)
  • connection (jsonobj) – идентификатор PostGIS подключения
  • fields (string) – отметка необходимости чтения полей из базы данных («update»)
  • geometry_type (string) – тип геометрии (если равен null, то читается из базы данных)
  • schema (string) – схема базы данных, где размещается таблица
  • srs (jsonobj) – описание системы координат
  • table (string) – название таблицы

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "postgis_layer": {
     "column_geom": "wkb_geometry",
     "column_id": "ogc_fid",
     "connection": {
       "id": 31
     },
     "fields": "update",
     "geometry_type": null,
     "schema": "thematic",
     "srs": {
       "id": 3857
     },
     "table": "roads"
   },
   "resource": {
     "cls": "postgis_layer",
     "description": null,
     "display_name": "test",
     "keyname": null,
     "parent": {
       "id": 0
     }
   }
 }

Vector empty layer

Example request:

POST /api/resource/ HTTP/1.1

{
"resource":{
    "cls":"vector_layer",
    "parent":{
        "id":0
    },
    "display_name":"Foo bar",
    "keyname":null,
    "description":null
},
"resmeta":{
    "items":{

    }
},
"vector_layer":{
    "srs":{ "id":3857 },
    "geometry_type": "POINT",
    "fields": [
        {
            "keyname": "REAL_FIELD",
            "datatype": "REAL"
        },
        {
            "keyname": "INTEGER_FIELD",
            "datatype": "INTEGER"
        },
        {
            "keyname": "DATE_FIELD",
            "datatype": "DATE"
        },
        {
            "keyname": "TIME_FIELD",
            "datatype": "TIME",
            "display_name": "TIME FIELD"
        }
    ]
}
}

Vector layer with data

Создание векторного слоя включает в себя 3 этапа:

  1. Подготовка векторных данных для слоя
  2. Загрузка векторных данных
  3. Создание слоя

Vector geodata preparing

При подготовке векторных данных необходимо преобразовать их к формату ESRI Shape, при этом поле с именем ID является запрещенным. Кроме того, файл должен иметь валидную систему координат и кодировку UTF-8 или CP1251. Также геометрии должны быть валидными и иметься у всех записей, атрибуты не должны содержать непечатных символов.

Loading vector geodata

Подготовленный шейп-файл необходимо заархивировать в zip и загрузить (подробнее по загрузке файлов см. File upload).

Create vector layer

Для создания векторного слоя необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание векторного слоя

Request JSON Object:
 
  • cls (string) – тип (для векторного слоя должен быть «vector_layer»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя слоя (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)
  • source (jsonobj) – информация полученная в результате загрузки файла
  • srs (jsonobj) – система координат в которую необходимо перепроецировать входной файл. Должна соответсвоваться СК веб карты

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "resource": {
     "cls": "vector_layer",
     "description": null,
     "display_name": "ggg www",
     "keyname": null,
     "parent": {
       "id": 0
     }
   },
   "vector_layer": {
     "source": {
       "encoding": "utf-8",
       "id": "2f906bf9-0947-45aa-b271-c711fef1d2fd",
       "mime_type": "application/zip",
       "name": "ngw1_1.zip",
       "size": 2299
     },
     "srs": {
       "id": 3857
     }
   }
 }

Same steps with curl:

$ curl -F file=@/tmp/bld.zip http://<ngw url>/api/component/file_upload/upload

{"upload_meta": [{"id": "00cc4aa9-cca7-4160-b069-58070dff9399", "name": "bld.zip", "mime_type": "application/octet-stream", "size": 62149}]}

$ curl -u administrator:admin -H "Content-Type: application/json" -X POST -d '{"resource": {"cls": "vector_layer","description": "test curl create", "display_name": "buildings","keyname": null,"parent": {"id": 0}},"vector_layer": {"source": {"encoding": "utf-8","id": "00cc4aa9-cca7-4160-b069-58070dff9399","mime_type": "application/zip","name": "bld.zip","size": 62149},"srs": {"id": 3857}}}' http://<ngw url>/api/resource/

{"id": 108, "parent": {"id": 0}}

Raster layer

Создание растрового слоя включает в себя 3 этапа:

  1. Подготовка растра для слоя
  2. Загрузка растра
  3. Создание слоя

Raster preparing

В качестве растра должен выступать файл в формате GeoTIFF с 3-мя (RGB) или 4-мя (RGBA) каналами. Растр должен содержать географическую привязку, из которой возможно перепроецировать в СК веб-карты. Для каналов должны быть корректно заданы значения color interpretation. Рекомендуется использовать сжатие без искажения (LZW, DEFLATE) для снижения трафика при загрузки на сервер. Значение пиксела должно быть 1 байт (яркость от от 0 до 255).

Loading raster

Подготовленный растр необходимо загрузить (подробнее по загрузке файлов см. File upload).

Create raster layer

Для создания растрового слоя необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание растрового слоя

Request JSON Object:
 
  • cls (string) – тип (для растрового слоя должен быть «raster_layer»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя слоя (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)
  • source (jsonobj) – информация полученная в результате загрузки файла
  • srs (jsonobj) – система координат в которую необходимо перепроецировать входной файл. Должна соответсвоваться СК веб карты

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "resource": {
   "cls": "raster_layer",
   "display_name": "20150820_211250_1_0b0e",
   "parent": {"id": 101}
   },
   "raster_layer": {
     "source": {
       "id": "a2f381f9-8467-477c-87fa-3f71ecb749a5",
       "mime_type": "image/tiff",
       "size": 17549598
      },
     "srs": {"id": 3857}
   }
 }

Some steps with curl:

$ curl --user "user:password" --upload-file 'tmp/myfile.tif' http://<ngw url>/api/component/file_upload/upload


{"id": "a2f381f9-8467-477c-87fa-3f71ecb749a5", "mime_type": "image/tiff", "size": 17549598}

$ curl -u administrator:admin -H "Content-Type: application/json" -X POST -d '{ "resource": { "cls": "raster_layer", "display_name": "20150820_211250_1_0b0e", "parent": { "id": 101 } }, "raster_layer": { "source": {"id": "a2f381f9-8467-477c-87fa-3f71ecb749a5", "mime_type": "image/tiff", "size": 17549598}, "srs": {"id": 3857} } }' http://<ngw url>/api/resource/

{"id": 102, "parent": {"id": 101}}

File bucket

Создание набора файлов включает в себя 2 этапа:

  1. Загрузка файлов
  2. Вызов POST запроса создание набора файлов

File upload

Файлы необходимо загрузить (подробнее по загрузке файлов см. File upload).

Create file bucket

Для создания набора файлов необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание набора файлов

Request JSON Object:
 
  • cls (string) – тип (для набора файлов должен быть «file_bucket»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя слоя (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)
  • files (jsonobj) – перечень файлов входящих в набор (то что приходит в ответе при загрузке, files == upload_meta)

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "file_bucket": {
     "files": [
       {
         "id": "b5c02d94-e1d7-40cf-b9c7-79bc9cca429d",
         "mime_type": "application/octet-stream",
         "name": "grunt_area_2_multipolygon.cpg",
         "size": 5
       },
       {
         "id": "d8457f14-39cb-4f9d-bb00-452a381fa62e",
         "mime_type": "application/x-dbf",
         "name": "grunt_area_2_multipolygon.dbf",
         "size": 36607
       },
       {
         "id": "1b0754f8-079d-4675-9367-36531da247e1",
         "mime_type": "application/octet-stream",
         "name": "grunt_area_2_multipolygon.prj",
         "size": 138
       },
       {
         "id": "a34b5ab3-f3a5-4a60-835d-318e601d34df",
         "mime_type": "application/x-esri-shape",
         "name": "grunt_area_2_multipolygon.shp",
         "size": 65132
       },
       {
         "id": "fb439bfa-1a63-4384-957d-ae57bb5eb67b",
         "mime_type": "application/x-esri-shape",
         "name": "grunt_area_2_multipolygon.shx",
         "size": 1324
       }
     ]
   },
   "resource": {
     "cls": "file_bucket",
     "description": null,
     "display_name": "grunt_area",
     "keyname": null,
     "parent": {
       "id": 0
     }
   }
 }

Example response body:

{"id": 22, "parent": {"id": 0}}

Download file bucket

Для изменения набора файлов необходимо выполнить следующий запрос.

PUT /api/resource/(int: id)

Запрос на изменение набора файлов

Parameters:
  • id – идентификатор ресурса который необходимо изменить
Request JSON Object:
 
  • cls (string) – тип (для набора файлов должен быть «file_bucket»)
  • parent (jsonobj) – идентификатор родительского ресурса (при изменении набор файлов будет перемещен в новую группу ресурсов)
  • display_name (string) – новое имя набора
  • keyname (string) – новый ключ ресурса
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html
  • files (jsonobj) – перечень файлов которые должны входить в набор: текущие (те что надо удалить - не указываем), а также новых файлов (то что приходит в ответе при загрузке, files == upload_meta)

Example request:

PUT /api/resource/22 HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "file_bucket": {
     "files": [
       {
         "mime_type": "application/x-dbf",
         "name": "grunt_area_2_multipolygon.dbf",
         "size": 36607
       },
       {
         "mime_type": "application/x-esri-shape",
         "name": "grunt_area_2_multipolygon.shp",
         "size": 65132
       },
       {
         "mime_type": "application/x-esri-shape",
         "name": "grunt_area_2_multipolygon.shx",
         "size": 1324
       },
       {
         "id": "fb439bfa-1a63-cccc-957d-ae57bb5eb67b",
         "mime_type": "application/octet-stream",
         "name": "grunt area description.txt",
         "size": 50
       }
     ]
   },
   "resource": {
     "cls": "file_bucket",
     "description": "some new text",
     "display_name": "new grunt_area",
     "keyname": null,
     "parent": {
       "id": 0
     }
   }
 }

После выполнения запроса будет добавлен файл grunt area description.txt и удалены grunt_area_2_multipolygon.cpg, grunt_area_2_multipolygon.prj, изменено название набора и добавлено описание.

Vector (mapserver) style

Для создания векторного стиля необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание векторного стиля

Request JSON Object:
 
  • cls (string) – тип (для векторного стиля должен быть «mapserver_style»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя стиля (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "mapserver_style" : {
     "xml" : "<map><layer><class><style><color blue=\"218\" green=\"186\" red=\"190\"/><outlinecolor blue=\"64\" green=\"64\" red=\"64\"/></style></class></layer></map>"
   },
   "resource": {
     "cls": "raster_style",
     "description": null,
     "display_name": "grunt area style",
     "keyname": null,
     "parent": {
       "id": 0
     }
   }
 }

Example response body:

{"id": 24, "parent": {"id": 0}}

Стили подробнее рассмотрены в подразделе «Стили векторных слоёв».

Raster style

Для создания растрового стиля необходимо выполнить следующий запрос.

POST /api/resource

Запрос на создание растрового стиля

Request JSON Object:
 
  • cls (string) – тип (для растрового стиля должен быть «raster_style»)
  • parent (jsonobj) – идентификатор родительского ресурса (должен совпадать с идентификатором в адресе запроса: resource/0 - {«id»:0})
  • display_name (string) – имя стиля (обязательно)
  • keyname (string) – ключ (не обязательно)
  • id (int) – идентификатор
  • description (string) – описание, можно использовать html (не обязательно)

Example request:

POST /api/resource HTTP/1.1
Host: ngw_url
Accept: */*

 {
   "resource": {
     "cls": "raster_style",
     "description": null,
     "display_name": "landsat style",
     "keyname": null,
     "parent": {
       "id": 0
     }
   }
 }

Example response body:

{"id": 25, "parent": {"id": 0}}