@opengis/gis 0.2.116 → 0.2.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/CardIcon-FxpK90rl.js +51 -0
  2. package/dist/EntityCreatePage-Da8XgBKU.js +141 -0
  3. package/dist/EntityEditPage-QktKEAxz.js +167 -0
  4. package/dist/EntityTablePage-ii-Wz0YZ.js +286 -0
  5. package/dist/ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Bl5ZwNQX.js +70 -0
  6. package/dist/FileEdit-C7tteUeG.js +37 -0
  7. package/dist/HeaderActions.vue_vue_type_script_setup_true_lang-CKEep8BL.js +796 -0
  8. package/dist/MapSettings-CjJ7WWkn.js +672 -0
  9. package/dist/MapSettingsTabs.vue_vue_type_script_setup_true_lang-CKCK3NqY.js +29 -0
  10. package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-Bs7gz6Lt.js +408 -0
  11. package/dist/RastersTablePage-DpKkFOyo.js +359 -0
  12. package/dist/TableFormHeader.vue_vue_type_script_setup_true_lang-Mci_tseM.js +47 -0
  13. package/dist/cartocss-C_O8qG3h.js +892 -0
  14. package/dist/import-utils-BbZ1gVp-.js +123 -0
  15. package/dist/index-4aSsUBB8.js +10020 -0
  16. package/dist/index.css +1 -1
  17. package/dist/index.js +16 -17634
  18. package/dist/index.umd.cjs +41 -244
  19. package/dist/raster-Du8ZMtjf.js +664 -0
  20. package/dist/register-B2gF-GzA.js +780 -0
  21. package/dist/service-BnPCDVwm.js +2573 -0
  22. package/dist/vs-datatable-QKks38xL.js +800 -0
  23. package/module/gis/form/feedback.answer.form.json +11 -0
  24. package/module/gis/form/gis.cartocss.form.json +8 -0
  25. package/module/gis/form/gis.metadata_new.form.json +196 -0
  26. package/module/gis/form/gis.ogc_service.form.json +8 -2
  27. package/module/gis/select/layer_list_text.sql +7 -0
  28. package/module/gis/select/pg.column_name.geometry.sql +13 -0
  29. package/module/gis/table/gis.metadata_new.table.json +138 -0
  30. package/module/gis/table/site.gis.registers.table.json +1 -1
  31. package/module/test/cls/doc_status.json +31 -31
  32. package/module/test/select/core.user_uid.sql +1 -1
  33. package/package.json +3 -4
  34. package/server/routes/gis/cartocss/get.cartocss.js +1 -1
  35. package/server/routes/mapnik/controllers/clearTiles.js +8 -4
  36. package/server/routes/mapnik/controllers/createXmlMulti.js +1 -1
  37. package/server/routes/mapnik/controllers/fileSearch.js +6 -2
  38. package/server/routes/mapnik/controllers/fileStat.js +4 -3
  39. package/server/routes/mapnik/controllers/mapnikLogger.js +1 -1
  40. package/server/routes/mapnik/controllers/mapnikStat.js +1 -1
  41. package/server/routes/mapnik/controllers/rasterInfo.js +5 -2
  42. package/server/routes/mapnik/controllers/readDir.js +5 -2
  43. package/server/routes/mapnik/controllers/rtile.js +16 -3
  44. package/server/routes/mapnik/index.js +0 -1
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": {
3
+ "answer": {
4
+ "type": "TextArea",
5
+ "ua": "Відповідь",
6
+ "validators": [
7
+ "required"
8
+ ]
9
+ }
10
+ }
11
+ }
@@ -14,6 +14,14 @@
14
14
  "col": 12,
15
15
  "ua": "Група"
16
16
  },
17
+ "cartocss_key": {
18
+ "ua": "Ключ",
19
+ "col": 12,
20
+ "type": "Text",
21
+ "validators": [
22
+ "required"
23
+ ]
24
+ },
17
25
  "source_path": {
18
26
  "ua": "Path",
19
27
  "col": 12,
@@ -0,0 +1,196 @@
1
+ {
2
+ "title": "Додати метадані",
3
+ "schema": {
4
+ "h4": {
5
+ "type": "HTML",
6
+ "title": false,
7
+ "text": "<h4 style='color:#003366;'><center><b>Просторове охоплення даних</b></center></h4>"
8
+ },
9
+ "scale": {
10
+ "type": "MarkedText",
11
+ "mask": "1:9999999",
12
+ "en": "Z maximum",
13
+ "ua": "Масштаб",
14
+ "placeholder": "Вкажіть масштаб набору даних",
15
+ "col": 6,
16
+ "i": "Числовий масштаб (рівень деталізації), поданий як знаменник масштабу карти або відстань для просторового розрізнення (в плані, по вертикалі, кутового), або рівень деталізації. Обов’язковий, якщо еквівалентна шкала або відстань розрізнення можуть бути вказаними"
17
+ },
18
+ "character_encoding": {
19
+ "type": "Autocomplete",
20
+ "data": "meta.encoding",
21
+ "en": "code",
22
+ "placeholder": "Оберіть з випадаючого списку",
23
+ "ua": "Код набору символів",
24
+ "disabled": true,
25
+ "defaultValue": "UTF-8",
26
+ "col": 3,
27
+ "validators": [
28
+ "required"
29
+ ]
30
+ },
31
+ "resource_language": {
32
+ "type": "Autocomplete",
33
+ "i": "Звертаємо увагу на те, що форму потрібно заповнювати українською мовою",
34
+ "data": "meta.language",
35
+ "en": "Language",
36
+ "disabled": true,
37
+ "placeholder": "Оберіть з випадаючого списку",
38
+ "ua": "Інформація про мову метаданих",
39
+ "defaultValue": "1",
40
+ "col": 3,
41
+ "validators": [
42
+ "required"
43
+ ]
44
+ },
45
+ "katottg": {
46
+ "type": "Autocomplete",
47
+ "data": "atu.nsdi.ato_level",
48
+ "host": "https://data.gki.com.ua",
49
+ "i": "Вкажіть приналежність до адміністративно-територіальної одиниці України",
50
+ "placeholder": "Оберіть територію покриття набору даних",
51
+ "ua": "Територіальна приналежність",
52
+ "col": 9,
53
+ "set": {
54
+ "resource_level": "resource_level",
55
+ "geom": "geom"
56
+ },
57
+ "validators": [
58
+ "required"
59
+ ]
60
+ },
61
+ "resource_level": {
62
+ "type": "Autocomplete",
63
+ "data": "level",
64
+ "ua": "Рівень",
65
+ "placeholder": "Оберіть з випадаючого списку",
66
+ "i": "Вкажіть рівень охоплення даних",
67
+ "col": 3,
68
+ "validators": [
69
+ "required"
70
+ ]
71
+ },
72
+ "geom": {
73
+ "type": "Geom",
74
+ "title": false,
75
+ "i": "Вкажіть межі просторового охоплення даних за допомогою прямокутника",
76
+ "height": "400",
77
+ "fullScreen": true,
78
+ "tools": [
79
+ "polygon"
80
+ ]
81
+ },
82
+ "h3": {
83
+ "type": "HTML",
84
+ "title": false,
85
+ "text": "<h4 style='color:#003366;'><center><b>Основна інформація</b></center></h4>"
86
+ },
87
+ "register_id": {
88
+ "type": "Autocomplete",
89
+ "data": "layer_list_text",
90
+ "i": "Характерна унікальна назва, що ідентифікує ресурс (набір даних або комплект наборів даних)",
91
+ "ua": "Назва ресурсу чи сервісу",
92
+ "en": "Header",
93
+ "col": 12,
94
+ "validators": [
95
+ "required"
96
+ ]
97
+ },
98
+ "metadata_owner_id": {
99
+ "type": "Autocomplete",
100
+ "ua": "Суб'єкт, що є власником ресурсу",
101
+ "data": "account_id",
102
+ "i": "Вкажіть держателя даних. Якщо його немає в переліку, додайте про нього дані, натиснувши кнопку 'Додати запис'",
103
+ "col": 6,
104
+ "validators": [
105
+ "required"
106
+ ]
107
+ },
108
+ "metadata_producer_id": {
109
+ "type": "Autocomplete",
110
+ "ua": "Виробник даних",
111
+ "placeholder": "Оберіть з випадаючого списку виробника даних чи додайте нового",
112
+ "data": "account_id",
113
+ "col": 6,
114
+ "i": "Вкажіть виробника даних. Якщо його немає в переліку, додайте про нього дані, натиснувши кнопку 'Додати запис'",
115
+ "validators": [
116
+ "required"
117
+ ]
118
+ },
119
+ "topic_category": {
120
+ "type": "Autocomplete",
121
+ "data": "topic_category",
122
+ "multiple": true,
123
+ "ua": "Тематична категорія ресурсу",
124
+ "i": "Код тематичної категорії за класифікатором базових категорій, що визначені в ISO 19115-1:2014",
125
+ "col": 6,
126
+ "ru": "Категории наборов данных",
127
+ "en": "Dataset categories",
128
+ "validators": [
129
+ "required"
130
+ ]
131
+ },
132
+ "service_type": {
133
+ "type": "Autocomplete",
134
+ "placeholder": "Оберіть тип сервісу з випадаючого списку",
135
+ "ua": "Тип сервісу",
136
+ "col": 6,
137
+ "disabled": true,
138
+ "defaultValue": "web_service",
139
+ "options": [
140
+ {
141
+ "id": "web_service",
142
+ "text": "Веб-сервіс"
143
+ }
144
+ ],
145
+ "validators": [
146
+ "required"
147
+ ]
148
+ },
149
+ "keywords": {
150
+ "type": "Tags",
151
+ "multi": true,
152
+ "tags": true,
153
+ "ua": "Ключові слова",
154
+ "placeholder": "Для збереження натисніть Enter",
155
+ "help": "Для збереження натисніть Enter",
156
+ "i": "Слова або фрази, що описують ресурс та використовуються для індексування в пошукових системах."
157
+ },
158
+ "h5": {
159
+ "type": "HTML",
160
+ "title": false,
161
+ "text": "<h4 style='color:#003366;'><center><b>Детальний опис</b></center></h4>"
162
+ },
163
+ "md_scope": {
164
+ "type": "TextArea",
165
+ "en": "Description",
166
+ "placeholder": "Додайте детальний опис",
167
+ "i": "Реферативний опис, призначення, структури, складу та змісту набору геопросторових даних та інші відомості про ресурс",
168
+ "ua": "Стислий опис ресурсу"
169
+ },
170
+ "h9": {
171
+ "type": "HTML",
172
+ "title": false,
173
+ "text": "<h4 style='color:#003366;'><center><b>Інше</b></center></h4>"
174
+ },
175
+ "standards": {
176
+ "type": "Autocomplete",
177
+ "i": "Вказується позначення та назва стандарту (стандартів) та/або профілю, яким відповідає набір елементів метаданих",
178
+ "ua": "Інформація про відповідність метаданих стандартам",
179
+ "options": [
180
+ {
181
+ "id": "4",
182
+ "text": "ISO/TS 19139:2007, Geographic information - Metadata – XML Schema Implementation"
183
+ }
184
+ ],
185
+ "defaultValue": "4",
186
+ "disable": true
187
+ }
188
+ },
189
+ "style": {
190
+ "layout": "mapFirst",
191
+ "label_style": "vertical",
192
+ "header": "fixed"
193
+ },
194
+ "reload": true,
195
+ "width": 5000
196
+ }
@@ -3,7 +3,10 @@
3
3
  "name": {
4
4
  "type": "Text",
5
5
  "ua": "Назва",
6
- "col": 12
6
+ "col": 12,
7
+ "validators": [
8
+ "required"
9
+ ]
7
10
  },
8
11
  "group_id": {
9
12
  "type": "Autocomplete",
@@ -35,7 +38,10 @@
35
38
  "url": {
36
39
  "type": "Text",
37
40
  "ua": "Посилання",
38
- "col": 8
41
+ "col": 8,
42
+ "validators": [
43
+ "required"
44
+ ]
39
45
  },
40
46
  "html": {
41
47
  "type": "Textarea",
@@ -0,0 +1,7 @@
1
+ select service_id as id, name || '(Сервіс)' as name from gis.services
2
+ union all
3
+ select ogc_service_id as id, name || '(OGC)' as name from gis.ogc_service
4
+ union all
5
+ select raster_id as id, name || '(Растр)' as name from gis.rasters
6
+ union all
7
+ select cartocss_id as id, name || '(CSS)' from gis.cartocss
@@ -0,0 +1,13 @@
1
+ SELECT
2
+ column_name,
3
+ column_name||coalesce(' ('||
4
+ pg_catalog.col_description(
5
+ format('%I.%I', table_schema, table_name)::regclass::oid,
6
+ ordinal_position
7
+ )||')',''
8
+ )AS column_comment
9
+ FROM
10
+ information_schema.columns
11
+ WHERE
12
+ table_schema||'.'||table_name = '{{parent}}'
13
+ AND udt_name = 'geometry'
@@ -0,0 +1,138 @@
1
+ {
2
+ "key": "metadata_id",
3
+ "table": "gis.metadata_new",
4
+ "order": "cdate desc",
5
+ "setting": [
6
+ "card",
7
+ "export",
8
+ "add"
9
+ ],
10
+ "meta": {
11
+ "title": "katottg"
12
+ },
13
+ "form": "gis.metadata_new.form",
14
+ "ua": "Метадані",
15
+ "card": false,
16
+ "public": true,
17
+ "columns": [
18
+ {
19
+ "ua": "Назва ресурсу",
20
+ "name": "register_id",
21
+ "data": "layer_list_text",
22
+ "format": "select"
23
+ },
24
+ {
25
+ "ua": "Суб'єкт, що є власником",
26
+ "name": "metadata_owner_id",
27
+ "format": "select",
28
+ "data": "account_id"
29
+ },
30
+ {
31
+ "ua": "Виробники даних",
32
+ "name": "metadata_producer_id",
33
+ "format": "select",
34
+ "data": "account_id"
35
+ },
36
+ {
37
+ "ua": "Територіальна приналежність",
38
+ "name": "katottg",
39
+ "format": "text"
40
+ },
41
+ {
42
+ "ua": "Рівень",
43
+ "name": "resource_level",
44
+ "data": "level",
45
+ "format": "select"
46
+ },
47
+ {
48
+ "ua": "Тематична категорія ресурсу",
49
+ "name": "topic_category",
50
+ "option": "topic_category",
51
+ "format": "select"
52
+ },
53
+ {
54
+ "ua": "Масштаб",
55
+ "name": "scale",
56
+ "format": "text",
57
+ "hidden": true
58
+ },
59
+ {
60
+ "ua": "Код набору символів",
61
+ "name": "character_encoding",
62
+ "format": "Autocomplete",
63
+ "data": "meta.encoding",
64
+ "hidden": true
65
+ },
66
+ {
67
+ "ua": "Мова",
68
+ "name": "resource_language",
69
+ "format": "Autocomplete",
70
+ "data": "meta.language",
71
+ "hidden": true
72
+ },
73
+ {
74
+ "ua": "Суб'єкт, що є власником ресурсу",
75
+ "name": "metadata_owner_id",
76
+ "data": "account_id",
77
+ "format": "select",
78
+ "hidden": true
79
+ },
80
+ {
81
+ "ua": "Виробники даних",
82
+ "name": "metadata_producer_id",
83
+ "data": "account_id",
84
+ "format": "select",
85
+ "hidden": true
86
+ },
87
+ {
88
+ "ua": "Ключові слова",
89
+ "name": "keywords",
90
+ "format": "text",
91
+ "hidden": true
92
+ },
93
+ {
94
+ "ua": "Стислий опис",
95
+ "name": "md_scope",
96
+ "format": "text",
97
+ "hidden": true
98
+ }
99
+ ],
100
+ "filterList": [
101
+ {
102
+ "ua": "Назва ресурсу",
103
+ "name": "register_id",
104
+ "data": "layer_list_text",
105
+ "type": "Text"
106
+ },
107
+ {
108
+ "ua": "Суб'єкт, що є власником",
109
+ "name": "metadata_owner_id",
110
+ "type": "Autocomplete",
111
+ "data": "account_id"
112
+ },
113
+ {
114
+ "ua": "Виробники даних",
115
+ "name": "metadata_producer_id",
116
+ "type": "Autocomplete",
117
+ "data": "account_id"
118
+ },
119
+ {
120
+ "ua": "Територіальна приналежність",
121
+ "name": "katottg",
122
+ "type": "Text"
123
+ },
124
+ {
125
+ "ua": "Рівень",
126
+ "name": "resource_level",
127
+ "data": "level",
128
+ "type": "Check"
129
+ },
130
+ {
131
+ "ua": "Тематична категорія ресурсу",
132
+ "name": "topic_category",
133
+ "data": "meta.topic_category",
134
+ "type": "Autocomplete",
135
+ "multi": true
136
+ }
137
+ ]
138
+ }
@@ -23,7 +23,7 @@
23
23
  "sql": [
24
24
  {
25
25
  "name": "is_export_sql",
26
- "sql": "select jsonb_path_exists(columns, '$[*] ? (@.is_export == true)') as is_export"
26
+ "sql": "select exists (select 1 from jsonb_array_elements(columns) as elem where coalesce((elem->>'is_export')::boolean, false)) as is_export"
27
27
  }
28
28
  ],
29
29
  "columns": [
@@ -1,32 +1,32 @@
1
- [
2
- {
3
- "id": "1",
4
- "text": "Діючий",
5
- "color": "#1ab394"
6
- },
7
- {
8
- "id": "2",
9
- "text": "Зупинений",
10
- "color": "#ed82c8"
11
- },
12
- {
13
- "id": "3",
14
- "text": "Скасований",
15
- "color": "#4a4a4a"
16
- },
17
- {
18
- "id": "5",
19
- "text": "Проектний",
20
- "color": "#6495ed"
21
- },
22
- {
23
- "id": "7",
24
- "text": "Очікує розгляду",
25
- "color": "#92b8ef"
26
- },
27
- {
28
- "id": "10",
29
- "text": "Архівний",
30
- "color": "#d48428"
31
- }
1
+ [
2
+ {
3
+ "id": "1",
4
+ "text": "Діючий",
5
+ "color": "#1ab394"
6
+ },
7
+ {
8
+ "id": "2",
9
+ "text": "Зупинений",
10
+ "color": "#ed82c8"
11
+ },
12
+ {
13
+ "id": "3",
14
+ "text": "Скасований",
15
+ "color": "#4a4a4a"
16
+ },
17
+ {
18
+ "id": "5",
19
+ "text": "Проектний",
20
+ "color": "#6495ed"
21
+ },
22
+ {
23
+ "id": "7",
24
+ "text": "Очікує розгляду",
25
+ "color": "#92b8ef"
26
+ },
27
+ {
28
+ "id": "10",
29
+ "text": "Архівний",
30
+ "color": "#d48428"
31
+ }
32
32
  ]
@@ -1 +1 @@
1
- select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
1
+ select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/gis",
3
- "version": "0.2.116",
3
+ "version": "0.2.117",
4
4
  "type": "module",
5
5
  "author": "Softpro",
6
6
  "main": "./dist/index.js",
@@ -55,17 +55,16 @@
55
55
  "@opengis/core": "^0.0.23",
56
56
  "@opengis/fastify-table": "^2.0.147",
57
57
  "@opengis/filter": "0.1.33",
58
- "@opengis/form": "^0.0.120",
58
+ "@opengis/form": "^0.0.133",
59
59
  "@opengis/table": "^0.0.27",
60
60
  "@vitejs/plugin-vue": "^5.2.4",
61
- "axios": "^1.13.6",
62
61
  "eslint": "^8.57.1",
63
62
  "eslint-config-airbnb": "19.0.4",
64
63
  "eslint-plugin-import": "^2.32.0",
65
64
  "eslint-plugin-vue": "^9.33.0",
66
65
  "@vue/eslint-config-typescript": "^12.0.0",
67
66
  "vue-eslint-parser": "^10.4.0",
68
- "lucide-vue-next": "^0.514.0",
67
+ "lucide-vue-next": "^0.577.0",
69
68
  "sass-embedded": "1.86.3",
70
69
  "typescript": "^5.9.3",
71
70
  "vite": "^6.4.1",
@@ -13,7 +13,7 @@ export default async function checkCarto({
13
13
  pg = pgClients.client, params,
14
14
  }, reply) {
15
15
  const time = Date.now();
16
- if (!config.mapServerAddress) {
16
+ if (!config.mapnik?.server) {
17
17
  return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
18
18
  }
19
19
 
@@ -52,6 +52,8 @@ export default async function clearTiles({
52
52
  return reply.status(404).send({ error: 'raster / cartocss not found', code: 404 });
53
53
  }
54
54
 
55
+ const relpath = [config.mapnik?.folder, carto.cartocss_id ? 'vector' : 'raster', raster.source_path || (carto.cartocss_id && carto.source_path ? carto.source_path : params.id)].filter(Boolean).join('/');
56
+
55
57
  if (query.debug) {
56
58
  const md5 = raster.source_path
57
59
  ? createHash('md5').update(raster.source_path).digest('hex')
@@ -69,11 +71,13 @@ export default async function clearTiles({
69
71
  };
70
72
  }
71
73
 
74
+ const opt = {
75
+ path: carto.cartocss_id ? null : relpath, // for rasters only
76
+ name: carto.cartocss_id ? `/data/map/${relpath}` : null, // required for cartocss
77
+ };
78
+
72
79
  try {
73
- const data = await ClearTile({
74
- path: carto.cartocss_id ? null : raster.source_path, // for rasters only
75
- name: carto.cartocss_id && carto.source_path ? `vector/${carto.source_path}` : params.id, // required for cartocss
76
- });
80
+ const data = await ClearTile(opt);
77
81
 
78
82
  // if empty directory not found (no tiles rendered yet)
79
83
  if (data.result === 'skip') {
@@ -24,7 +24,7 @@ import checkRasterFile from '../../../plugins/mapnik/funcs/checkRasterFile.js';
24
24
  export default async function createXmlMulti({
25
25
  pg = pgClients.client, params, query,
26
26
  }, reply) {
27
- if (!config.mapServerAddress) {
27
+ if (!config.mapnik?.server) {
28
28
  return reply.code(400).send({
29
29
  error: 'mapnik grpc service address not set',
30
30
  code: 400,
@@ -1,10 +1,12 @@
1
+ import { config } from '@opengis/fastify-table/utils.js';
2
+
1
3
  import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
2
4
 
3
5
  const { FileSearch } = mapnik();
4
6
 
5
7
  const maxLimit = 100;
6
8
 
7
- // example: GET /api/gis-files?dir=tiles/3828667893214610450/13/4884&key=1&size=1675&period=5m
9
+ // example: GET /api/gis-file-search?dir=raster/dpt&key=Аркуш_5_1_изм_ДПТ_смт_Карнаухівка_А2_modified_k
8
10
  export default async function fileSearch({
9
11
  query,
10
12
  }, reply) {
@@ -23,8 +25,10 @@ export default async function fileSearch({
23
25
  return reply.status(400).send({ error: 'not enough query params: key / period / size', code: 400 });
24
26
  }
25
27
 
28
+ const relpath = `raster/${[config.mapnik?.folder, dir].filter(Boolean).join('/')}`;
29
+
26
30
  const result = await FileSearch({
27
- path: dir, key, period, size,
31
+ path: relpath, key, period, size,
28
32
  });
29
33
 
30
34
  return {
@@ -4,11 +4,11 @@ import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
4
4
 
5
5
  const { FileStat } = mapnik();
6
6
 
7
- // example: GET /api/gis-files?path=tiles/3828667893214610450/13/4884/2828.png
7
+ // example: GET /api/gis-file-info?path=raster/henplan_osnovne_kreslennia.tif
8
8
  export default async function fileStat({
9
9
  query,
10
10
  }, reply) {
11
- if (!config.mapServerAddress) {
11
+ if (!config.mapnik?.server) {
12
12
  return reply.status(400).send({ error: 'mapnik server not configured', code: 400 });
13
13
  }
14
14
 
@@ -22,6 +22,7 @@ export default async function fileStat({
22
22
  return reply.status(400).send({ error: 'not enough query params: path', code: 400 });
23
23
  }
24
24
 
25
- const data = await FileStat({ path });
25
+ const relpath = `raster/${[config.mapnik?.folder, path].filter(Boolean).join('/')}`;
26
+ const data = await FileStat({ path: relpath });
26
27
  return { data };
27
28
  }
@@ -7,7 +7,7 @@ const { GetLogs } = mapnik();
7
7
  export default async function mapnikLogger({
8
8
  params,
9
9
  }, reply) {
10
- if (!config.mapServerAddress) {
10
+ if (!config.mapnik?.server) {
11
11
  return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
12
12
  }
13
13
 
@@ -7,7 +7,7 @@ const { GetStat } = mapnik();
7
7
  export default async function mapnikStat({
8
8
  params, query,
9
9
  }, reply) {
10
- if (!config.mapServerAddress) {
10
+ if (!config.mapnik?.server) {
11
11
  return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
12
12
  }
13
13
 
@@ -6,11 +6,12 @@ const { GetRasterInfo } = mapnik();
6
6
 
7
7
  const { prefix = '/api' } = config;
8
8
 
9
+ // example: GET /api/gis-raster/9be8f8c51746
9
10
  export default async function rasterInfo({
10
11
  pg = pgClients.client, params, query,
11
12
  }, reply) {
12
13
  const time = Date.now();
13
- if (!config.mapServerAddress) {
14
+ if (!config.mapnik?.server) {
14
15
  return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
15
16
  }
16
17
 
@@ -30,8 +31,10 @@ export default async function rasterInfo({
30
31
 
31
32
  const proj4 = raster.proj4 || (raster.srid && pg.pk?.['public.spatial_ref_sys'] ? await pg.query('select proj4text from public.spatial_ref_sys where srid=$1', [raster.srid]).then(el => el.rows?.[0]?.proj4text) : undefined);
32
33
 
34
+ const relpath = ['raster', config.mapnik?.folder, 'raster', raster.source_path].filter(Boolean).join('/');
35
+
33
36
  const { data, cache } = await GetRasterInfo({
34
- path: raster.source_path,
37
+ path: relpath,
35
38
  proj4,
36
39
  ttl: query.nocache ? '0' : '1h',
37
40
  });