@opengis/gis 0.1.62 → 0.1.64

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/gis",
3
- "version": "0.1.62",
3
+ "version": "0.1.64",
4
4
  "type": "module",
5
5
  "author": "Softpro",
6
6
  "main": "dist/import-file.js",
package/plugin.js CHANGED
@@ -1,9 +1,16 @@
1
1
  import fp from 'fastify-plugin';
2
2
 
3
- import { config, addHook, getMeta, pgClients } from '@opengis/fastify-table/utils.js';
3
+ import { config, addHook, getMeta, pgClients, execMigrations } from '@opengis/fastify-table/utils.js';
4
4
 
5
5
  config.prefix = config.prefix || '/api';
6
6
 
7
+ import { join, dirname } from 'path';
8
+ import { fileURLToPath } from 'url';
9
+
10
+ const dir = dirname(fileURLToPath(import.meta.url));
11
+
12
+ execMigrations(join(dir, 'server/migrations'), pgClients.client).catch(err => console.error(err.toString()));
13
+
7
14
  const columnType = {
8
15
  text: 'text',
9
16
  date: 'date',
@@ -0,0 +1,240 @@
1
+ create schema if not exists gis;
2
+
3
+ CREATE TABLE if not exists gis.services
4
+ (
5
+ service_id text NOT NULL DEFAULT next_id(),
6
+ name text NOT NULL, -- Назва сервісу
7
+ service_key text, -- Унікальний ключ
8
+ description text, -- Опис сервісу
9
+ keywords text[], -- Ключові слова
10
+ category text, -- Категорія сервісу
11
+ service_type text NOT NULL, -- Тип сервісу
12
+ holder text, -- (Опційно) Власник/Утримучач/Відповідальний
13
+ version text DEFAULT '1.0.0'::text, -- Версія сервісу
14
+ source_type text, -- Тип джерела
15
+ service_url text, -- Поислання на сервіс (якщо source_type = 'service')
16
+ source_path text, -- Шлях до файлу або таблиця в БД
17
+ query text, -- Умова для сервісу
18
+ geom_type text, -- Тип геометрії для цього шару
19
+ geometry_column text, -- Назва колонки гемотрії
20
+ sql_list jsonb, -- Перелік sql підзапитів для додаткової інформації
21
+ attributes jsonb, -- Атрибути (для зберігання інформації)
22
+ filters jsonb, -- Фільтри
23
+ popup jsonb, -- Налаштування попапів
24
+ cartocss text, -- Стилі css
25
+ layers jsonb, -- Налаштування шарів mapbox
26
+ srid integer DEFAULT 4326, -- Просторова референтна система
27
+ bbox geometry(Polygon,4326), -- Область покриття сервісу
28
+ center geometry(Point,4326), -- Центр покриття
29
+ is_public boolean NOT NULL DEFAULT false, -- Чи є сервіс публічним?
30
+ is_active boolean DEFAULT true, -- Позначка доступності сервісу
31
+ is_downloadable boolean DEFAULT false, -- Чи можна завантажити дані з цього сервісу?
32
+ metadata jsonb, -- Додаткові метадані
33
+ access_restrictions text, -- Опис обмеження доступу
34
+ metadata_url text, -- Опціонально посилання на документ XML або метадані
35
+ thumbnail_url text, -- Опціонально посилання на фото прев'ю
36
+ config jsonb, -- Опціональна конфігурація
37
+ created_by text NOT NULL,
38
+ updated_by text,
39
+ updated_at timestamp without time zone,
40
+ created_at timestamp without time zone NOT NULL DEFAULT now(),
41
+ image text, -- Зображення
42
+ group_id text, -- Id-групи
43
+ style text, -- Стилі (кольори, товщина лінії тощо)
44
+ interface text, -- Інтерфейс
45
+ legend jsonb, -- Layer legend
46
+ card json,
47
+ CONSTRAINT services_pkey PRIMARY KEY (service_id),
48
+ CONSTRAINT services_group_id_fkey FOREIGN KEY (group_id)
49
+ REFERENCES gis.group_list (group_id)
50
+ );
51
+
52
+ DROP INDEX if exists gis.gis_services_category_gin_idx;
53
+
54
+ CREATE INDEX gis_services_category_gin_idx
55
+ ON gis.services
56
+ USING gin
57
+ (category COLLATE pg_catalog."default" gin_trgm_ops);
58
+
59
+ DROP INDEX if exists gis.gis_services_category_gin_idx_lower;
60
+
61
+ CREATE INDEX gis_services_category_gin_idx_lower
62
+ ON gis.services
63
+ USING gin
64
+ (lower(category) COLLATE pg_catalog."default" gin_trgm_ops);
65
+
66
+ DROP INDEX if exists gis.gis_services_description_gin_idx;
67
+
68
+ CREATE INDEX gis_services_description_gin_idx
69
+ ON gis.services
70
+ USING gin
71
+ (description COLLATE pg_catalog."default" gin_trgm_ops);
72
+
73
+ DROP INDEX if exists gis.gis_services_description_gin_idx_lower;
74
+
75
+ CREATE INDEX gis_services_description_gin_idx_lower
76
+ ON gis.services
77
+ USING gin
78
+ (lower(description) COLLATE pg_catalog."default" gin_trgm_ops);
79
+
80
+ DROP INDEX if exists gis.gis_services_holder_gin_idx;
81
+
82
+ CREATE INDEX gis_services_holder_gin_idx
83
+ ON gis.services
84
+ USING gin
85
+ (holder COLLATE pg_catalog."default" gin_trgm_ops);
86
+
87
+ DROP INDEX if exists gis.gis_services_holder_gin_idx_lower;
88
+
89
+ CREATE INDEX gis_services_holder_gin_idx_lower
90
+ ON gis.services
91
+ USING gin
92
+ (lower(holder) COLLATE pg_catalog."default" gin_trgm_ops);
93
+
94
+ DROP INDEX if exists gis.gis_services_name_gin_idx;
95
+
96
+ CREATE INDEX gis_services_name_gin_idx
97
+ ON gis.services
98
+ USING gin
99
+ (name COLLATE pg_catalog."default" gin_trgm_ops);
100
+
101
+ DROP INDEX if exists gis.gis_services_name_gin_idx_lower;
102
+
103
+ CREATE INDEX gis_services_name_gin_idx_lower
104
+ ON gis.services
105
+ USING gin
106
+ (lower(name) COLLATE pg_catalog."default" gin_trgm_ops);
107
+
108
+ DROP INDEX if exists gis.gis_services_service_type_btree_idx;
109
+
110
+ CREATE INDEX gis_services_service_type_btree_idx
111
+ ON gis.services
112
+ USING btree
113
+ (service_type COLLATE pg_catalog."default");
114
+
115
+ DROP INDEX if exists gis.gis_services_source_path_btree_idx;
116
+
117
+ CREATE INDEX gis_services_source_path_btree_idx
118
+ ON gis.services
119
+ USING btree
120
+ (source_path COLLATE pg_catalog."default");
121
+
122
+ DROP INDEX if exists gis.gis_services_source_path_gin_idx;
123
+
124
+ CREATE INDEX gis_services_source_path_gin_idx
125
+ ON gis.services
126
+ USING gin
127
+ (source_path COLLATE pg_catalog."default" gin_trgm_ops);
128
+
129
+ DROP INDEX if exists gis.gis_services_source_path_gin_idx_lower;
130
+
131
+ CREATE INDEX gis_services_source_path_gin_idx_lower
132
+ ON gis.services
133
+ USING gin
134
+ (lower(source_path) COLLATE pg_catalog."default" gin_trgm_ops);
135
+
136
+ DROP INDEX if exists gis.services_service_key_idx;
137
+
138
+ CREATE UNIQUE INDEX services_service_key_idx
139
+ ON gis.services
140
+ USING btree
141
+ (service_key COLLATE pg_catalog."default");
142
+
143
+ -- Add new columns if they do not exist
144
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS service_id text;
145
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS name text;
146
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS service_key text;
147
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS description text;
148
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS keywords text[];
149
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS category text;
150
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS service_type text;
151
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS holder text;
152
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS version text;
153
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS source_type text;
154
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS service_url text;
155
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS source_path text;
156
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS query text;
157
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS geom_type text;
158
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS geometry_column text;
159
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS sql_list jsonb;
160
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS attributes jsonb;
161
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS filters jsonb;
162
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS popup jsonb;
163
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS cartocss text;
164
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS layers jsonb;
165
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS srid integer;
166
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS bbox geometry(Polygon,4326);
167
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS center geometry(Point,4326);
168
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS is_public boolean;
169
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS is_active boolean;
170
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS is_downloadable boolean;
171
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS metadata jsonb;
172
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS access_restrictions text;
173
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS metadata_url text;
174
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS thumbnail_url text;
175
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS config jsonb;
176
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS created_by text;
177
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS updated_by text;
178
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS updated_at timestamp without time zone;
179
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS created_at timestamp without time zone;
180
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS image text;
181
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS group_id text;
182
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS style text;
183
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS interface text;
184
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS legend jsonb;
185
+ ALTER TABLE gis.services ADD COLUMN IF NOT EXISTS card json;
186
+
187
+ -- Set default values
188
+ ALTER TABLE gis.services ALTER COLUMN service_id SET DEFAULT next_id();
189
+ ALTER TABLE gis.services ALTER COLUMN version SET DEFAULT '1.0.0';
190
+ ALTER TABLE gis.services ALTER COLUMN srid SET DEFAULT 4326;
191
+ ALTER TABLE gis.services ALTER COLUMN is_public SET DEFAULT false;
192
+ ALTER TABLE gis.services ALTER COLUMN is_active SET DEFAULT true;
193
+ ALTER TABLE gis.services ALTER COLUMN is_downloadable SET DEFAULT false;
194
+ ALTER TABLE gis.services ALTER COLUMN created_at SET DEFAULT now();
195
+
196
+ -- Set NOT NULL constraints
197
+ ALTER TABLE gis.services ALTER COLUMN service_id SET NOT NULL;
198
+ ALTER TABLE gis.services ALTER COLUMN name SET NOT NULL;
199
+ ALTER TABLE gis.services ALTER COLUMN service_type SET NOT NULL;
200
+ ALTER TABLE gis.services ALTER COLUMN is_public SET NOT NULL;
201
+ ALTER TABLE gis.services ALTER COLUMN created_by SET NOT NULL;
202
+ ALTER TABLE gis.services ALTER COLUMN created_at SET NOT NULL;
203
+
204
+ COMMENT ON TABLE gis.services IS 'Сервіси';
205
+ COMMENT ON COLUMN gis.services.name IS 'Назва сервісу';
206
+ COMMENT ON COLUMN gis.services.service_key IS 'Унікальний ключ';
207
+ COMMENT ON COLUMN gis.services.description IS 'Опис сервісу';
208
+ COMMENT ON COLUMN gis.services.keywords IS 'Ключові слова';
209
+ COMMENT ON COLUMN gis.services.category IS 'Категорія сервісу';
210
+ COMMENT ON COLUMN gis.services.service_type IS 'Тип сервісу';
211
+ COMMENT ON COLUMN gis.services.holder IS '(Опційно) Власник/Утримучач/Відповідальний';
212
+ COMMENT ON COLUMN gis.services.version IS 'Версія сервісу';
213
+ COMMENT ON COLUMN gis.services.source_type IS 'Тип джерела';
214
+ COMMENT ON COLUMN gis.services.service_url IS 'Поислання на сервіс (якщо source_type = ''service'')';
215
+ COMMENT ON COLUMN gis.services.source_path IS 'Шлях до файлу або таблиця в БД';
216
+ COMMENT ON COLUMN gis.services.query IS 'Умова для сервісу';
217
+ COMMENT ON COLUMN gis.services.geom_type IS 'Тип геометрії для цього шару';
218
+ COMMENT ON COLUMN gis.services.geometry_column IS 'Назва колонки гемотрії';
219
+ COMMENT ON COLUMN gis.services.sql_list IS 'Перелік sql підзапитів для додаткової інформації';
220
+ COMMENT ON COLUMN gis.services.attributes IS 'Атрибути (для зберігання інформації)';
221
+ COMMENT ON COLUMN gis.services.filters IS 'Фільтри';
222
+ COMMENT ON COLUMN gis.services.popup IS 'Налаштування попапів';
223
+ COMMENT ON COLUMN gis.services.cartocss IS 'Стилі css';
224
+ COMMENT ON COLUMN gis.services.layers IS 'Налаштування шарів mapbox';
225
+ COMMENT ON COLUMN gis.services.srid IS 'Просторова референтна система';
226
+ COMMENT ON COLUMN gis.services.bbox IS 'Область покриття сервісу';
227
+ COMMENT ON COLUMN gis.services.center IS 'Центр покриття';
228
+ COMMENT ON COLUMN gis.services.is_public IS 'Чи є сервіс публічним?';
229
+ COMMENT ON COLUMN gis.services.is_active IS 'Позначка доступності сервісу';
230
+ COMMENT ON COLUMN gis.services.is_downloadable IS 'Чи можна завантажити дані з цього сервісу?';
231
+ COMMENT ON COLUMN gis.services.metadata IS 'Додаткові метадані';
232
+ COMMENT ON COLUMN gis.services.access_restrictions IS 'Опис обмеження доступу';
233
+ COMMENT ON COLUMN gis.services.metadata_url IS 'Опціонально посилання на документ XML або метадані';
234
+ COMMENT ON COLUMN gis.services.thumbnail_url IS 'Опціонально посилання на фото прев''ю';
235
+ COMMENT ON COLUMN gis.services.config IS 'Опціональна конфігурація';
236
+ COMMENT ON COLUMN gis.services.image IS 'Зображення';
237
+ COMMENT ON COLUMN gis.services.group_id IS 'Id-групи';
238
+ COMMENT ON COLUMN gis.services.style IS 'Стилі (кольори, товщина лінії тощо)';
239
+ COMMENT ON COLUMN gis.services.interface IS 'Інтерфейс';
240
+ COMMENT ON COLUMN gis.services.legend IS 'Layer legend';
@@ -14,7 +14,8 @@ const maps = getTemplatePath('map')?.map?.(el => {
14
14
  });
15
15
 
16
16
  async function processObject(loadTemplate, pg = pgClients.client, unittest) {
17
- const { bbox = [], center = [] } = loadTemplate?.source_path && pg.pk?.[loadTemplate.source_path]
17
+ // default center for all maps (frontend dependends on it)
18
+ const { bbox = [], center = [30, 50] } = loadTemplate?.source_path && pg.pk?.[loadTemplate.source_path]
18
19
  ? await pg.query(`select
19
20
  array[ST_XMin(env), ST_YMin(env), ST_XMax(env),ST_YMax(env)] as bbox,
20
21
  st_asgeojson(st_centroid(env))::json->'coordinates' as center