Функції для роботи з растрами
gdalWrapper
Функція розроблено як обготка для gdal-cli
команд.
Детальний опис параметрів та результату виконання для кожної з функцій gdal-cli
наведено у окументації GDAL
Схема виклику
try {
const { result } = await funcs.gdalWrapper({
name: '<gdal command name>',
pathIn: '<path to in file>',
pathOut: '<path to output file>',
parameters: '<command params>',
funcs,
send
});
} catch (err) {
// work with error
}
Параметри
- Обов'язкові
- Необов'язкові
Параметр | Тип даних | Опис |
---|---|---|
name | string | Назва gdal-cli команди |
pathIn | string | Шлях до вхідного файлу (якщо команда вимагає) |
pathOut | string | Шлях до вихідного файлу (якщо команда вимагає) |
funcs | string | Об'єкт funcs |
Параметр | Тип даних | Опис |
---|---|---|
parameters | string | Параметри виклику команди. За замовчуванням підставляє пустий рядок |
send | Object | Об'єкт send . За замовчуванням заміняє його на консольний вивід |
Результат
Результатом виконання команди є результат виконання gdal-cli
команди
У результаті отримаємо об'єкт з наступними полями:
Назва поля | Тип даних | Опис |
---|---|---|
result | string | Результат виконання команди |
Якщо команда повертає результат у консоль - то він повертається у result
полі відповіді
Функція емітить помилку, якщо вона мала місце. Для обробки помилок потрібно використовувати структуру try-catch
Приклади
Далі наведено два приклади виклику функції:
- Отримання інформації про растр - виклик функції з парсингом відповіді
- Створення віртуального растру - виклик операції без парсингу відповіді
- Отримання інформації про растр
- Створення віртуального растру
- Виклик
- Результат
const { result } = await funcs.gdalWrapper({
name: 'gdalinfo', pathIn: unixPath(`${path}/mosaic.vrt`), parameters: '-json', funcs,
});
{
"description": "/data/softpro/work/geo/cardinal/map/raster/DEM-RGB/mosaic.vrt",
"driverShortName":"VRT",
"driverLongName":"Virtual Raster",
"files": [
"/data/softpro/work/geo/cardinal/map/raster/DEM-RGB/mosaic.vrt",
...,
"/data/softpro/work/geo/cardinal/map/raster/DEM-RGB/n52e034.tif.tif"
],
"size": [68401,32401],
"coordinateSystem": {
"wkt": "GEOGCRS[\"WGS 84\",\n DATUM[\"World Geodetic System 1984\",\n ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n LENGTHUNIT[\"metre\",1]]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n CS[ellipsoidal,2],\n AXIS[\"geodetic latitude (Lat)\",north,\n ORDER[1],\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n AXIS[\"geodetic longitude (Lon)\",east,\n ORDER[2],\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n ID[\"EPSG\",4326]]",
"dataAxisToSRSAxisMapping": [ 2, 1 ]
},
"geoTransform": [ 21.999861111111112, 0.0002777777777778, 0, 53.00013888888889, 0, -0.0002777777777778],
"metadata": {},
"cornerCoordinates": {
"upperLeft": [ 21.9998611, 53.0001389 ],
"lowerLeft":[ 21.9998611, 43.9998611 ],
"lowerRight":[ 41.0001389, 43.9998611 ],
"upperRight":[ 41.0001389, 53.0001389 ],
"center":[ 31.5, 48.5 ]
},
"wgs84Extent": {
"type":"Polygon",
"coordinates": [
[
[ 21.9998611, 53.0001389],
[ 21.9998611, 43.9998611],
[ 41.0001389, 43.9998611],
[ 41.0001389, 53.0001389],
[ 21.9998611, 53.0001389]
]
]
},
"bands": [
{
"band": 1,
"block": [ 128, 128 ],
"type": "Byte",
"colorInterpretation": "Red",
"mask": {
"flags": [ "PER_DATASET", "ALPHA" ],
"overviews": []
},
"metadata": {}
},
...,
{
"band": 4,
"block": [ 128, 128 ],
"type": "Byte",
"colorInterpretation": "Alpha",
"metadata": {}
}
]
}
- Виклик
- Результат
await funcs.gdalWrapper({
name: 'gdalbuildvrt', pathOut: '/data/softpro/work/geo/cardinal/map/raster/hillshade/mosaic.vrt', parameters: '-overwrite -b 1 -b 2 -b 3 -addalpha -hidenodata -input_file_list <rasterFileList file path>', funcs, send,
})
Результатом виконання даної команди є створення відповідного віртуального растру з назвою mosaic.vrt
за вказаним шляхом.
mapnik
Функція є обгорткою для виклику за назвою функцію мікросервісу тайлінгу
Приклад
// по назві
const mapServerAddress = funcs.mapnik('mapServerAddress');
// Декомпозиція
const { mapServerAddress, render, printMap, uploadFile } = funcs.mapnik();
if (!render) {
// Обробка випадку, якщо сервіс недоступний
}
Результат
У результаті ми отримаємо набір потрібних нам функцій та параметрів для роботи з сервісом тайлінгу
Функції роботи з сервісом тайлінгу працюють через Promise
, тому для відловлювання та обробки помилок даних функцій треба використовувати структуру try-catch
rasterInfo
Функція використовується для отримання інформації про растр
const rasterInfo = awat funcs.rasterInfo({ path, send, nocache, proj4 });
Параметри
- Обов'язкові
- Необов'язкові
Параметр | Тип даних | Опис |
---|---|---|
path | string | Шлях до растру відносно директорії <workDir>/map/raster |
nocache | boolean | Прапореці "Беремо дані про растр з кешу чи отримуємо нові та оновлюємо?" |
proj4 | string | Проекція растру у форматі proj4 text |
Параметр | Тип даних | Опис |
---|---|---|
send | Object | Об'єкт send . За замовчуванням заміняє його на консольний вивід |
Результат
У результаті отримаємо JSON
-об'єкт наступного вигляду:
Приклад
{
"proj4": "+proj=longlat +datum=WGS84 +no_defs ", // Проекція растру
"extent": [ // Екстенд в системі координат растру
21.9998611,
43.9998611,
41.0001389,
53.0001389
],
"geom": { //Геометрія в системі координат растру
"type":"Polygon",
"coordinates": [21.9998611, 53.0001389, 41.0001389, 43.9998611]
},
"wgs84Extent": { //Геометрія WgS84
"type":"Polygon",
"coordinates": [21.9998611, 53.0001389, 41.0001389, 43.9998611]
},
"bounds": [21.9998611, 53.0001389, 41.0001389, 43.9998611], // Екстенд в WGS84
"bands": "Red,Green,Blue,Alpha", // канали растри через кому
"files": [
{
"name":"mosaic.vrt",
"size":220146,
"extent": [
21.9998611,
43.9998611,
41.0001389,
53.0001389
],
"geom": {"type":"Polygon","coordinates":[ ] },
"bands":"Red,Green,Blue,Alpha",
"crs":"+proj=longlat +datum=WGS84 +no_defs",
"rasterSize":[
68401,
32401
],
"err":"",
"time":1517
}
],
"dir": false, // Чи є растр віртуальним?
"size": 220146, // Об'єм, який займає растр у байтах
"count": 1 //Кількість файлів у растрі
}
Опис полів відповіді:
Назва поля | Тип даних | Опис |
---|---|---|
proj4 | string | Проекція растру |
extent | Array<Array<int>> | Екстенд растру |
geom | json | Геометрія растру у вигляді geojson - newline delimiter |
wgs84Extent | json | Екстенд растру у системі координат EPSG:4326 у вигляді geojson - newline delimiter |
bounds | Array<int> | BBOX растру |
bands | string | Послідовність бендів растру |
files | Array<json> | Опис кожного файлу, який потрапив у вибірку |
dir | boolean | Чи є растр віртуальним? |
size | uint | Об'єм, який займає растр у байтах |
count | uint | Кількість файлів у растрі |
Якщо растр віртуальний (створили за допомогою об'єднання декількох растрів в один файл .vrt
) - то у полі files
буде більше ніж 1 об'єкт з метаданими до кожного вкладеного растру. Також значення полів count
та dir
будуть більшим за 1 та true
відповідно. Всі інші поля будуть стосуватись виключно віртуального растру.
rasterTMS
Функція створена для створення/перестворення конфігурації веб мапи.
Схема виклику
const { id, extent, url } = await funcs.rasterTMS({ path: <path to raster> });
Параметри
Назва поля | Тип даних | Опис |
---|---|---|
path | string | Шлях до растру відносно директорії <workdir>/map/raster , закодований у base64 |
Параметр path
може приймати як шлях до конкретного файлу, так і до директорії з файлами. У випадку директорії автоматично створюється віртуальний растр .vrt
, який містить усі растрові зображення з директорії.
Результат
У результаті отримаємо об'єкт з наступними полями:
Назва поля | Тип даних | Опис |
---|---|---|
id | string | Розкодоване посилання до файлу відносно директорії <workdir>/map/raster |
extent | Array<uint> | Межі растру у системі координат EPSG:4326 |
url | string | Ендпоінт для отримання тайлів |
Приклади
- Для директорії
- Для файлу
- Виклик
- Результат
const data = await funcs.rasterTMS({path: 'REVNLVJHQg=='});
{
"id": "DEM-RGB",
"extent": [21.9998611,43.9998611,41.0001389,53.0001389],
"url": "/api-user/rtile/REVNLVJHQg==/ua/{z}/{x}/{y}.png"
}
- Виклик
- Результат
const data = await funcs.rasterTMS({path: 'aGlsbHNoYWRlL240NGUwMzMudGlmLnRpZg=='});
{
"id": "hillshade/n44e033.tif.tif",
"extent": [32.9998611,43.9998611,34.0001389,45.0001389],
"url": "/api-user/rtile/aGlsbHNoYWRlL240NGUwMzMudGlmLnRpZg==/ua/{z}/{x}/{y}.png"
}