@opengis/gis 0.2.167 → 0.2.169

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 (249) hide show
  1. package/dist/{CardIcon-golqfa-Y.js → CardIcon-xkRDr3_E.js} +1 -1
  2. package/dist/{EntityTablePage-BhmxePgR.js → EntityTablePage-D1IR5Bmq.js} +1 -1
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BFa27smR.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BJKIgAkD.js} +1 -1
  4. package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-Dp0MjgnU.js → HeaderActions.vue_vue_type_script_setup_true_lang-BU8__ouG.js} +1 -1
  5. package/dist/{MapSettings-F_DT3xKl.js → MapSettings-DIOlNpt6.js} +1 -1
  6. package/dist/{RastersTablePage-3rXQ0baG.js → RastersTablePage-OD1VqHP8.js} +1 -1
  7. package/dist/{cartocss-CN-UrS7V.js → cartocss-BiamDcNB.js} +5 -5
  8. package/dist/{import-utils-F5ErbNz1.js → import-utils-CvUG1jV0.js} +1 -1
  9. package/dist/{index-CdB0VXro.js → index-C6W8IkTm.js} +1224 -1221
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.umd.cjs +53 -40
  13. package/dist/{raster-DWmiWlf7.js → raster-BbIiZGoX.js} +3 -3
  14. package/dist/{register-D1jLD0hK.js → register-Dt2QoLZ3.js} +3 -3
  15. package/dist/service-CdUYntMi.js +3472 -0
  16. package/dist/{vs-datatable-BWItxbtK.js → vs-datatable-BELnJrfM.js} +2 -3
  17. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  18. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  19. package/module/gis/card/gis.registers.table/index.yml +23 -23
  20. package/module/gis/card/gis.services.table/index.yml +25 -25
  21. package/module/gis/cls/bool.yes_no.json +12 -12
  22. package/module/gis/cls/encoding.json +14 -14
  23. package/module/gis/cls/geom_type.json +14 -14
  24. package/module/gis/cls/gis.column_type.json +34 -34
  25. package/module/gis/cls/gis.column_view_type.json +26 -26
  26. package/module/gis/cls/gis.filter_type.json +22 -22
  27. package/module/gis/cls/language.json +10 -10
  28. package/module/gis/cls/meta.service_type.json +42 -42
  29. package/module/gis/cls/ogc.service.json +21 -21
  30. package/module/gis/cls/source_type.json +10 -10
  31. package/module/gis/cls/standarts.json +6 -6
  32. package/module/gis/cls/topic_category.json +106 -106
  33. package/module/gis/cls/update_frequency.json +29 -29
  34. package/module/gis/cls/view.json +21 -21
  35. package/module/gis/form/feedback.answer.form.json +10 -10
  36. package/module/gis/form/gis.cartocss.form.json +64 -64
  37. package/module/gis/form/gis.group_list.form.json +17 -17
  38. package/module/gis/form/gis.maps.form.json +61 -61
  39. package/module/gis/form/gis.metadata.form.json +240 -240
  40. package/module/gis/form/gis.metadata_new.form.json +195 -195
  41. package/module/gis/form/gis.ogc_service.form.json +51 -51
  42. package/module/gis/form/gis.rasters.form.json +76 -76
  43. package/module/gis/form/gis.registers.form.json +124 -124
  44. package/module/gis/form/gis.registers_column.form.json +84 -84
  45. package/module/gis/form/gis.registers_filter.form.json +65 -65
  46. package/module/gis/form/gis.services.form.json +111 -111
  47. package/module/gis/form/gis.services_attributes.form.json +75 -75
  48. package/module/gis/form/gis.services_filter.form.json +65 -65
  49. package/module/gis/menu.json +43 -43
  50. package/module/gis/select/admin.cls.name.sql +9 -9
  51. package/module/gis/select/layer_list.sql +7 -7
  52. package/module/gis/select/layer_list_text.sql +7 -7
  53. package/module/gis/select/pg.column_name.geometry.sql +12 -12
  54. package/module/gis/select/pg.columns.parent.sql +6 -6
  55. package/module/gis/select/pg.table_name.sql +17 -17
  56. package/module/gis/select/service_id.sql +1 -1
  57. package/module/gis/select/srid.sql +7 -7
  58. package/module/gis/table/gis.cartocss.table.json +74 -74
  59. package/module/gis/table/gis.group_list.table.json +58 -58
  60. package/module/gis/table/gis.maps.table.json +110 -110
  61. package/module/gis/table/gis.metadata.table.json +70 -70
  62. package/module/gis/table/gis.metadata_new.table.json +137 -137
  63. package/module/gis/table/gis.ogc_service.table.json +100 -100
  64. package/module/gis/table/gis.rasters.table.json +113 -113
  65. package/module/gis/table/gis.registers.table.json +143 -143
  66. package/module/gis/table/gis.services.table.json +120 -120
  67. package/module/gis/table/site.gis.registers.table.json +88 -88
  68. package/module/gis/table/site.gis.services.table.json +106 -106
  69. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  70. package/module/gis/tokens.yml +5 -5
  71. package/module/permissions/form/permissions.users.form.json +151 -151
  72. package/module/permissions/table/gis.permissions.table.json +97 -97
  73. package/module/test/map/addr.json +303 -0
  74. package/module/test/map/{addr.yml → addr1.yml} +3 -1
  75. package/module/test/select/address.str_id.sql +3 -0
  76. package/package.json +10 -10
  77. package/plugin.js +21 -12
  78. package/server/plugins/mapnik/funcs/checkRasterFile.js +1 -3
  79. package/server/routes/cartocss/cartocss.route.js +31 -0
  80. package/server/routes/cartocss/cartocss.route.test.js +79 -0
  81. package/server/routes/cartocss/cartocss.schema.js +73 -0
  82. package/server/routes/{gis/cartocss → cartocss/functions}/add.cartocss.js +8 -11
  83. package/server/routes/{gis/cartocss → cartocss/functions}/get.cartocss.js +11 -13
  84. package/server/routes/gis/functions/checkXML.js +107 -0
  85. package/server/routes/gis/functions/dashboard.js +24 -0
  86. package/server/routes/gis/gis.route.js +26 -0
  87. package/server/routes/gis/gis.route.test.js +34 -0
  88. package/server/routes/gis/gis.schema.js +1 -0
  89. package/server/routes/map/{controllers → functions}/clearTiles.js +9 -8
  90. package/server/routes/map/{controllers → functions}/geojson.js +43 -43
  91. package/server/routes/map/{controllers → functions}/gis.convert.js +15 -23
  92. package/server/routes/map/{controllers → functions}/gis.icon.js +23 -10
  93. package/server/routes/map/{controllers → functions}/jsonData.js +72 -71
  94. package/server/routes/map/{controllers → functions}/layerList.js +17 -17
  95. package/server/routes/map/{controllers → functions}/map.js +8 -9
  96. package/server/routes/map/{controllers → functions}/mapCatalog.js +7 -7
  97. package/server/routes/map/functions/mapCatalogAttribute.js +54 -0
  98. package/server/routes/map/{controllers → functions}/mapFeatures.js +22 -18
  99. package/server/routes/map/{controllers → functions}/mapFormat.js +25 -28
  100. package/server/routes/map/{controllers → functions}/mapTiles.js +39 -30
  101. package/server/routes/map/{controllers → functions}/maps.js +3 -3
  102. package/server/routes/map/{controllers → functions}/marker_icon.js +1 -1
  103. package/server/routes/map/{controllers → functions}/parseGeoFile.js +10 -11
  104. package/server/routes/map/{controllers → functions}/pointHeight.js +3 -7
  105. package/server/routes/map/{controllers → functions}/vtile.js +5 -3
  106. package/server/routes/map/{vtile1.js → functions/vtile1.js} +39 -33
  107. package/server/routes/map/map.route.js +280 -0
  108. package/server/routes/map/map.route.test.js +503 -0
  109. package/server/routes/map/map.schema.js +356 -0
  110. package/server/routes/mapnik/{controllers → functions}/clearTiles.js +26 -29
  111. package/server/routes/mapnik/{controllers → functions}/createXml.js +17 -20
  112. package/server/routes/mapnik/{controllers → functions}/createXmlMulti.js +11 -15
  113. package/server/routes/mapnik/{controllers → functions}/fileSearch.js +6 -9
  114. package/server/routes/mapnik/functions/fileStat.js +28 -0
  115. package/server/routes/mapnik/{controllers → functions}/pretile.js +29 -35
  116. package/server/routes/mapnik/{controllers → functions}/rasterInfo.js +19 -10
  117. package/server/routes/mapnik/{controllers → functions}/readDir.js +4 -4
  118. package/server/routes/mapnik/functions/rtile.js +164 -0
  119. package/server/routes/mapnik/{controllers → functions}/uploadRaster.js +19 -24
  120. package/server/routes/mapnik/functions/uploadXML.js +27 -0
  121. package/server/routes/mapnik/mapnik.route.js +102 -0
  122. package/server/routes/mapnik/mapnik.route.test.js +371 -0
  123. package/server/routes/mapnik/mapnik.schema.mjs +190 -0
  124. package/server/routes/mapnik.prefixless/functions/mapnikLogger.js +31 -0
  125. package/server/routes/{mapnik/controllers → mapnik.prefixless/functions}/mapnikStat.js +7 -5
  126. package/server/routes/mapnik.prefixless/mapnik.prefixless.route.js +20 -0
  127. package/server/routes/mapnik.prefixless/mapnik.prefixless.route.test.js +91 -0
  128. package/server/routes/mapnik.prefixless/mapnik.prefixless.schema.mjs +27 -0
  129. package/server/routes/maps/functions/add.map.js +42 -0
  130. package/server/routes/{map/maps → maps/functions}/del.map.js +6 -7
  131. package/server/routes/{map/maps → maps/functions}/get.map.js +12 -11
  132. package/server/routes/maps/maps.route.js +58 -0
  133. package/server/routes/maps/maps.route.test.js +231 -0
  134. package/server/routes/maps/maps.schema.js +10 -0
  135. package/server/routes/metadata/functions/editMetadata.js +35 -0
  136. package/server/routes/metadata/functions/metadataXML.js +19 -0
  137. package/server/routes/metadata/metadata.route.js +26 -0
  138. package/server/routes/metadata/metadata.route.test.js +47 -0
  139. package/server/routes/metadata/metadata.schema.js +53 -0
  140. package/server/routes/{gis/ogc → ogc/functions}/map.info.point.js +22 -29
  141. package/server/routes/ogc/ogc.route.js +21 -0
  142. package/server/routes/ogc/ogc.route.test.js +54 -0
  143. package/server/routes/ogc/ogc.schema.js +16 -0
  144. package/server/routes/permissions/functions/catalog.permissions.edit.js +20 -0
  145. package/server/routes/permissions/functions/catalog.permissions.js +13 -0
  146. package/server/routes/permissions/{controllers → functions}/gis.catalog.js +10 -10
  147. package/server/routes/permissions/permissions.route.js +35 -0
  148. package/server/routes/permissions/permissions.route.test.js +35 -0
  149. package/server/routes/permissions/permissions.schema.js +44 -0
  150. package/server/routes/registers/functions/add.registry.js +37 -0
  151. package/server/routes/{gis/registers/funcs → registers/functions}/classifiers.js +2 -2
  152. package/server/routes/{gis/registers → registers/functions}/del.registry.js +5 -5
  153. package/server/routes/{gis/registers/funcs → registers/functions}/get.info.js +9 -5
  154. package/server/routes/{gis/registers → registers/functions}/gis.export.js +27 -21
  155. package/server/routes/{gis/registers → registers/functions}/gis.registry.js +22 -15
  156. package/server/routes/{gis/registers → registers/functions}/gis.registry.list.js +12 -10
  157. package/server/routes/{gis/registers/funcs → registers/functions}/handleRegistryRequest.js +12 -11
  158. package/server/routes/registers/registers.route.js +80 -0
  159. package/server/routes/registers/registers.route.test.js +145 -0
  160. package/server/routes/registers/registers.schema.js +246 -0
  161. package/server/routes/{gis/services → services/functions}/add.service.js +14 -16
  162. package/server/routes/services/functions/create.route.js +93 -0
  163. package/server/routes/{gis/services → services/functions}/del.service.js +5 -5
  164. package/server/routes/{gis/services → services/functions}/get.service.users.js +15 -13
  165. package/server/routes/services/functions/get.services.col.js +34 -0
  166. package/server/routes/{gis/services → services/functions}/get.services.js +21 -16
  167. package/server/routes/services/services.route.js +76 -0
  168. package/server/routes/services/services.route.test.js +168 -0
  169. package/server/routes/services/services.schema.js +278 -0
  170. package/server/routes/widgets/functions/add.widget.js +39 -0
  171. package/server/routes/widgets/functions/del.widget.js +18 -0
  172. package/server/routes/{map/widgets → widgets/functions}/get.widget.js +12 -11
  173. package/server/routes/widgets/widgets.route.js +61 -0
  174. package/server/routes/widgets/widgets.route.test.js +144 -0
  175. package/server/routes/widgets/widgets.schema.js +25 -0
  176. package/dist/service-JGNtth-y.js +0 -2593
  177. package/module/cls.json +0 -7
  178. package/module/gis/card/gis.metadata.table/main_info.hbs +0 -21
  179. package/module/gis/card/gis.metadata.table/metadata_info.hbs +0 -28
  180. package/module/gis/card/gis.metadata.table/other.hbs +0 -26
  181. package/module/gis/card/gis.rasters.table/main_info.hbs +0 -27
  182. package/module/gis/card/gis.registers.table/cls.hbs +0 -36
  183. package/module/gis/card/gis.registers.table/columns.hbs +0 -89
  184. package/module/gis/card/gis.registers.table/filters.hbs +0 -80
  185. package/module/gis/card/gis.registers.table/main_info.hbs +0 -35
  186. package/module/gis/card/gis.registers.table/source.hbs +0 -45
  187. package/module/gis/card/gis.services.table/attributes.hbs +0 -91
  188. package/module/gis/card/gis.services.table/filters.hbs +0 -83
  189. package/module/gis/card/gis.services.table/main_info.hbs +0 -27
  190. package/module/gis/card/gis.services.table/source.hbs +0 -26
  191. package/module/test/cls/bp_build_type.json +0 -37
  192. package/module/test/cls/doc_status.json +0 -32
  193. package/module/test/cls/ts.temp_status.json +0 -18
  194. package/module/test/cls/ts.temp_structure.ts_class.json +0 -50
  195. package/module/test/cls/ts.temp_type.json +0 -10
  196. package/module/test/layer/bp.json +0 -60
  197. package/module/test/layer/bp1.yml +0 -33
  198. package/module/test/layer/individual.yml +0 -54
  199. package/module/test/layer/ts.linking_passport.yml +0 -56
  200. package/module/test/layer/ts.temp_structure.yml +0 -51
  201. package/module/test/map/bp_myo.json +0 -44
  202. package/module/test/map/bpf.json +0 -44
  203. package/module/test/map/main.json +0 -39
  204. package/module/test/map/mbd.json +0 -92
  205. package/module/test/map/ts.json +0 -53
  206. package/module/test/select/address_id.json +0 -3
  207. package/module/test/select/address_id.sql +0 -8
  208. package/module/test/select/core.user_uid.sql +0 -1
  209. package/module/test/table/data_address.street.table.json +0 -70
  210. package/module/test/table/data_bp_myo.bp.table.json +0 -123
  211. package/server/routes/gis/checkXML.js +0 -117
  212. package/server/routes/gis/dashboard.js +0 -29
  213. package/server/routes/gis/index.mjs +0 -92
  214. package/server/routes/gis/metadata/editMetadata.js +0 -34
  215. package/server/routes/gis/metadata/metadataXML.js +0 -13
  216. package/server/routes/gis/registers/add.registry.js +0 -35
  217. package/server/routes/gis/registers/insert.columns.js +0 -107
  218. package/server/routes/gis/registers/insert.filters.js +0 -110
  219. package/server/routes/gis/services/create.route.js +0 -96
  220. package/server/routes/gis/services/get.services.col.js +0 -33
  221. package/server/routes/map/controllers/mapCatalogAttribute.js +0 -56
  222. package/server/routes/map/index.mjs +0 -259
  223. package/server/routes/map/maps/add.map.js +0 -43
  224. package/server/routes/map/widgets/add.widget.js +0 -39
  225. package/server/routes/map/widgets/del.widget.js +0 -23
  226. package/server/routes/mapnik/controllers/fileStat.js +0 -28
  227. package/server/routes/mapnik/controllers/mapnikLogger.js +0 -29
  228. package/server/routes/mapnik/controllers/rtile.js +0 -167
  229. package/server/routes/mapnik/index.js +0 -40
  230. package/server/routes/permissions/controllers/catalog.permissions.edit.js +0 -22
  231. package/server/routes/permissions/controllers/catalog.permissions.js +0 -8
  232. package/server/routes/permissions/index.mjs +0 -18
  233. /package/server/routes/map/{controllers/pin → pin}/circle1.svg +0 -0
  234. /package/server/routes/map/{controllers/pin → pin}/circle2.svg +0 -0
  235. /package/server/routes/map/{controllers/pin → pin}/none.svg +0 -0
  236. /package/server/routes/map/{controllers/pin → pin}/pin.svg +0 -0
  237. /package/server/routes/map/{controllers/pin → pin}/pin1.svg +0 -0
  238. /package/server/routes/map/{controllers/pin → pin}/pin2.svg +0 -0
  239. /package/server/routes/map/{controllers/pin → pin}/pin3.svg +0 -0
  240. /package/server/routes/map/{controllers/pin → pin}/pin4.svg +0 -0
  241. /package/server/routes/map/{controllers/pin → pin}/pin5.svg +0 -0
  242. /package/server/routes/map/{controllers/pin → pin}/pin6.svg +0 -0
  243. /package/server/routes/map/{controllers/pin → pin}/pin7.svg +0 -0
  244. /package/server/routes/permissions/{controllers/utils → functions}/get.permissions.js +0 -0
  245. /package/server/routes/{gis/registers/funcs → registers/functions}/columns.js +0 -0
  246. /package/server/routes/{gis/registers/funcs → registers/functions}/content.type.js +0 -0
  247. /package/server/routes/{gis/registers → registers/functions}/map.registry.js +0 -0
  248. /package/server/routes/{gis/services → services/functions}/get.layer.geom.js +0 -0
  249. /package/server/routes/{gis/services → services/functions}/legend.auto.js +0 -0
@@ -0,0 +1,356 @@
1
+ export const gisConvertSchema = {
2
+ body: {
3
+ type: 'object',
4
+ additionalProperties: false,
5
+ properties: {
6
+ encoding: {
7
+ type: 'string',
8
+ // python is case insensitive and ignores "-"
9
+ enum: ['LATIN-1', 'CP1251', 'UTF-8'],
10
+ },
11
+ // srid: {
12
+ // type: 'number',
13
+ // minimum: 1,
14
+ // },
15
+ file: {
16
+ type: 'string',
17
+ },
18
+ filename: {
19
+ type: 'string',
20
+ },
21
+ filepath: {
22
+ type: 'string',
23
+ },
24
+ },
25
+ anyOf: [
26
+ { required: ['file', 'filename'] },
27
+ { required: ['filepath'] },
28
+ ],
29
+ },
30
+ };
31
+
32
+ export const mapFormatSchema = {
33
+ querystring: {
34
+ type: 'object',
35
+ additionalProperties: false,
36
+ required: ['layer'],
37
+ properties: {
38
+ lat: {
39
+ type: 'number',
40
+ minimum: 1,
41
+ maximum: 90,
42
+ },
43
+ lng: {
44
+ type: 'number',
45
+ minimum: -180,
46
+ maximum: 180,
47
+ },
48
+ radius: {
49
+ type: 'number',
50
+ minimum: 1,
51
+ maximum: 1000,
52
+ },
53
+ layer: {
54
+ type: 'string', pattern: "^([\\d\\w._-]+)$"
55
+ },
56
+ id: {
57
+ type: 'string', pattern: "^([\\d\\w._-]+)$"
58
+ },
59
+ nogeom: {
60
+ type: 'string', enum: ['1', 'true']
61
+ }
62
+ },
63
+ },
64
+ };
65
+
66
+ export const pointHeightSchema = {
67
+ querystring: {
68
+ type: 'object',
69
+ required: ['lat', 'lng'],
70
+ properties: {
71
+ lat: { type: 'number', minimum: -90, maximum: 90 },
72
+ lng: { type: 'number', minimum: -180, maximum: 180 },
73
+ },
74
+ },
75
+ response: {
76
+ 200: {
77
+ type: 'object',
78
+ properties: {
79
+ lat: { type: 'number' },
80
+ lng: { type: 'number' },
81
+ height: { anyOf: [{ type: 'number' }, { type: 'null' }] },
82
+ },
83
+ },
84
+ },
85
+ };
86
+
87
+ export const getIconSchema = {
88
+ params: {
89
+ type: 'object',
90
+ required: ['*'],
91
+ properties: {
92
+ '*': { type: 'string' },
93
+ },
94
+ },
95
+ querystring: {
96
+ type: 'object',
97
+ additionalProperties: false,
98
+ properties: {
99
+ nocache: { type: 'string', enum: ['true', '1'] },
100
+ },
101
+ },
102
+ };
103
+
104
+ export const mapTilesSchema = {
105
+ params: {
106
+ type: 'object',
107
+ required: ['slug', 'z', 'x', 'y'],
108
+ properties: {
109
+ slug: {
110
+ type: 'string',
111
+ },
112
+ z: {
113
+ type: 'number',
114
+ },
115
+ y: {
116
+ type: 'number',
117
+ },
118
+ x: {
119
+ type: 'string',
120
+ pattern: '^\\d+\\.(pbf|vmt)$',
121
+ },
122
+ },
123
+ },
124
+ querystring: {
125
+ type: 'object',
126
+ additionalProperties: false,
127
+ properties: {
128
+ nocache: { type: 'string', enum: ['1'] },
129
+ filter: { type: 'string', /** pattern: "" */ },
130
+ type: { type: 'string', /** enum: [] */ },
131
+ layer: { type: 'string', /** pattern: "" */ },
132
+ layers: { type: 'string', /** pattern: "" */ },
133
+ sql: { type: 'number', minimum: 1, maximum: 4 },
134
+ pointZoom: { type: 'number', minimum: 1, maximum: 25 },
135
+ },
136
+ },
137
+ };
138
+
139
+ export const mapFeaturesPointSchema = {
140
+ params: {
141
+ type: 'object',
142
+ required: ['slug'],
143
+ properties: {
144
+ slug: {
145
+ type: 'string',
146
+ },
147
+ },
148
+ },
149
+ querystring: {
150
+ type: 'object',
151
+ additionalProperties: false,
152
+ properties: {
153
+ x: { type: 'number', minimum: -180, maximum: 180 }, // longitude
154
+ y: { type: 'number', minimum: -90, maximum: 90 }, // latitude
155
+ sql: { type: 'number', enum: [1] },
156
+ },
157
+ },
158
+ };
159
+ export const mapFeaturesSchema = {
160
+ params: {
161
+ type: 'object',
162
+ required: ['slug', 'id'],
163
+ properties: {
164
+ slug: {
165
+ type: 'string',
166
+ },
167
+ id: {
168
+ type: 'string', pattern: "^([\\d\\w_.-]+)$"
169
+ },
170
+ },
171
+ },
172
+ querystring: {
173
+ type: 'object',
174
+ additionalProperties: false,
175
+ properties: {
176
+ sql: { type: 'number', enum: [1] },
177
+ },
178
+ },
179
+ };
180
+
181
+ export const mapCatalogAttributeSchema = {
182
+ params: {
183
+ type: 'object',
184
+ required: ['service', 'attr'],
185
+ properties: {
186
+ service: {
187
+ type: 'string', pattern: "^([\\d\\w_.-]+)$"
188
+ },
189
+ attr: {
190
+ type: 'string', pattern: "^([\\d\\w_.-]+)$"
191
+ },
192
+ },
193
+ },
194
+ querystring: {
195
+ type: 'object',
196
+ additionalProperties: false,
197
+ properties: {
198
+ cls: { type: 'string', pattern: "^([\\d\\w_.-]+)$" },
199
+ },
200
+ },
201
+ };
202
+
203
+ export const vtileSchema = {
204
+ params: {
205
+ type: 'object',
206
+ properties: {
207
+ layer: {
208
+ type: 'string',
209
+ },
210
+ lang: {
211
+ type: 'string', enum: ['ua']
212
+ },
213
+ z: {
214
+ type: 'number',
215
+ },
216
+ y: {
217
+ type: 'number',
218
+ },
219
+ x: {
220
+ type: 'string',
221
+ pattern: '^\\d+\\.(pbf|vmt)$',
222
+ },
223
+ },
224
+ },
225
+ querystring: {
226
+ type: 'object',
227
+ additionalProperties: false,
228
+ properties: {
229
+ type: {
230
+ type: 'string', enum: ['point', 'polygon', 'line']
231
+ },
232
+ nocache: {
233
+ type: 'string', enum: ['1', 'true']
234
+ },
235
+ clusterZoom: {
236
+ type: 'number', minimum: 1, maximum: 25
237
+ },
238
+ nottl: {
239
+ type: 'string', enum: ['1', 'true']
240
+ },
241
+ filter: {
242
+ type: 'string'
243
+ },
244
+ all: {
245
+ type: 'string', enum: ['1', 'true']
246
+ },
247
+ sql: {
248
+ type: 'number', enum: [1]
249
+ },
250
+ pointZoom: {
251
+ type: 'number', minimum: 1, maximum: 25
252
+ },
253
+ }
254
+ }
255
+ };
256
+
257
+ export const clearTilesSchema = {
258
+ params: {
259
+ type: 'object',
260
+ properties: {
261
+ id: {
262
+ type: 'string', pattern: '^([\\d\\w]+)$'
263
+ },
264
+ },
265
+ },
266
+ querystring: {
267
+ type: 'object',
268
+ additionalProperties: false,
269
+ properties: {
270
+ debug: {
271
+ type: 'number', enum: [1]
272
+ },
273
+ }
274
+ }
275
+ };
276
+
277
+ export const mapSchema = {
278
+ params: {
279
+ type: 'object',
280
+ required: ['slug'],
281
+ properties: {
282
+ slug: {
283
+ type: 'string', pattern: "^([\\d\\w_.-]+)$"
284
+ },
285
+ },
286
+ },
287
+ };
288
+
289
+ export const geojsonSchema = {
290
+ params: {
291
+ type: 'object',
292
+ properties: {
293
+ layer: { type: 'string', pattern: "^([\\d\\w,.-_]+)$" },
294
+ }
295
+ },
296
+ querystring: {
297
+ type: 'object',
298
+ additionalProperties: false,
299
+ properties: {
300
+ sql: { type: 'number', enum: [1, 2] },
301
+ nocache: { type: 'number', enum: [1] },
302
+ srid: { type: 'number', minimum: 1 },
303
+ type: { type: 'string', enum: ['centroid'] },
304
+ extent: { type: 'string', pattern: "^([\\d\\s,.-]+)$" },
305
+ }
306
+ }
307
+ };
308
+
309
+ export const jsonDataSchema = {
310
+ params: {
311
+ type: 'object',
312
+ properties: {
313
+ layer: { type: 'string', pattern: "^([\\d\\w,.-_]+)$" },
314
+ }
315
+ },
316
+ querystring: {
317
+ type: 'object',
318
+ additionalProperties: false,
319
+ properties: {
320
+ sql: { type: 'number', enum: [1, 2] },
321
+ nocache: { type: 'number', enum: [1] },
322
+ page: { type: 'number', minimum: 1 },
323
+ limit: { type: 'number', minimum: 1, maximum: 1000 },
324
+ // where: { type: 'string' }, // ? possible sql injection
325
+ }
326
+ }
327
+ };
328
+ export const layerListSchema = {
329
+ querystring: {
330
+ type: 'object',
331
+ additionalProperties: false,
332
+ properties: {
333
+ sql: {
334
+ type: 'number', enum: [1]
335
+ }
336
+ }
337
+ }
338
+ };
339
+
340
+ export const parseGeoFileSchema = {
341
+ body: {
342
+ type: 'object',
343
+ additionalProperties: false,
344
+ required: ['content'],
345
+ properties: {
346
+ content: {
347
+ type: 'string'
348
+ },
349
+ filename: {
350
+ type: 'string'
351
+ }
352
+ }
353
+ }
354
+ };
355
+
356
+ export default null;
@@ -1,6 +1,8 @@
1
1
  import { createHash } from 'node:crypto';
2
2
 
3
- import { config, logger, pgClients } from '@opengis/fastify-table/utils.js';
3
+ import { config, pgClients } from '@opengis/fastify-table/utils.js';
4
+
5
+ import { BadRequestError, NotFoundError, NotImplementedError } from '@opengis/fastify-table/errors.js';
4
6
 
5
7
  import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
6
8
 
@@ -22,26 +24,26 @@ const { ClearTile } = mapnik();
22
24
  */
23
25
 
24
26
  export default async function clearTiles({
25
- pg = pgClients.client, params, query,
26
- }, reply) {
27
+ id, debug,
28
+ }, pg = pgClients.client) {
27
29
  if (!ClearTile) {
28
- return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
30
+ throw NotImplementedError('mapnik server address needed');
29
31
  }
30
32
 
31
- if (!params.id) {
32
- return reply.status(400).send({ error: 'not enough params: id', code: 400 });
33
+ if (!id) {
34
+ throw BadRequestError('not enough params: id');
33
35
  }
34
36
 
35
- const decodedPath = Buffer.from(params.id, 'base64url').toString('utf-8');
37
+ const decodedPath = Buffer.from(id, 'base64url').toString('utf-8');
36
38
 
37
39
  const raster = pg.pk?.['gis.rasters']
38
40
  ? await pg.query(`select raster_id, source_path from gis.rasters where raster_id=$1::text union all
39
- select raster_id, source_path from gis.rasters where source_path=$2::text`, [params.id, decodedPath]).then(el => el.rows?.[0] || {})
41
+ select raster_id, source_path from gis.rasters where source_path=$2::text`, [id, decodedPath]).then(r => r.rows?.[0] || {})
40
42
  : {};
41
43
 
42
44
  const carto = pg.pk?.['gis.cartocss']
43
45
  ? await pg.query(`select cartocss_id, source_path from gis.cartocss where cartocss_id=$1::text union all
44
- select cartocss_id, source_path from gis.cartocss where source_path=$2::text`, [params.id, decodedPath]).then(el => el.rows?.[0] || {})
46
+ select cartocss_id, source_path from gis.cartocss where source_path=$2::text`, [id, decodedPath]).then(r => r.rows?.[0] || {})
45
47
  : {};
46
48
 
47
49
  if (!raster.raster_id && !carto.cartocss_id) {
@@ -49,7 +51,7 @@ export default async function clearTiles({
49
51
  }
50
52
 
51
53
  if (!raster.source_path && !carto.cartocss_id) {
52
- return reply.status(404).send({ error: 'raster / cartocss not found', code: 404 });
54
+ throw NotFoundError('raster / cartocss not found');
53
55
  }
54
56
 
55
57
  const getParams = () => {
@@ -64,7 +66,7 @@ export default async function clearTiles({
64
66
 
65
67
  const { path: relpath, name } = getParams();
66
68
 
67
- if (query.debug) {
69
+ if (debug) {
68
70
  const md5 = raster.source_path
69
71
  ? createHash('md5').update(raster.source_path).digest('hex')
70
72
  : undefined;
@@ -81,26 +83,21 @@ export default async function clearTiles({
81
83
  };
82
84
  }
83
85
 
84
- try {
85
- const data = await ClearTile({
86
- path: relpath, // for rasters only
87
- name, // for cartocss
88
- });
89
-
90
- // if empty directory not found (no tiles rendered yet)
91
- if (data.result === 'skip') {
92
- return reply.status(200).send({ message: 'tiles directory not found', code: 200 });
93
- }
94
86
 
95
- // if cache deleted or empty directory exists = ok
96
- if (data.result === 'success') {
97
- return reply.status(200).send({ message: 'ok', code: 200 });
98
- }
87
+ const data = await ClearTile({
88
+ path: relpath, // for rasters only
89
+ name, // for cartocss
90
+ });
99
91
 
100
- throw new Error(data.err);
92
+ // if empty directory not found (no tiles rendered yet)
93
+ if (data.result === 'skip') {
94
+ return { message: 'tiles directory not found', code: 200 };
101
95
  }
102
- catch (err) {
103
- logger.file('clearTiles/error', { error: err.toString(), stack: err.stack });
104
- return reply.status(500).send({ error: config.local ? err.toString() : 'clearTiles error', code: 500 });
96
+
97
+ // if cache deleted or empty directory exists = ok
98
+ if (data.result === 'success') {
99
+ return { message: 'ok', code: 200 };
105
100
  }
101
+
102
+ throw new Error(data.err);
106
103
  }
@@ -1,35 +1,34 @@
1
1
  import path from 'node:path';
2
2
 
3
- import { config, pgClients, eventStream } from '@opengis/fastify-table/utils.js';
3
+ import { config, pgClients } from '@opengis/fastify-table/utils.js';
4
4
 
5
5
  import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
6
+ import { BadRequestError, NotFoundError, NotImplementedError } from '@opengis/fastify-table/errors.js';
6
7
 
7
8
  const { GetRasterStatus, CreateXML } = mapnik();
8
9
 
9
10
  export default async function createXml({
10
- pg = pgClients.client, params, query,
11
- }, reply) {
11
+ id, vrt, debug, nocache, callback = () => { },
12
+ }, pg = pgClients.client) {
12
13
  if (!GetRasterStatus || !CreateXML) {
13
- return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
14
+ throw NotImplementedError('mapnik server address needed');
14
15
  }
15
16
 
16
- const { id } = params;
17
-
18
17
  if (!id) {
19
- return reply.status(400).send({ error: 'not enough params: id', code: 400 });
18
+ throw BadRequestError('not enough params: id');
20
19
  }
21
20
 
22
21
  const data = pg.pk?.['gis.rasters']
23
22
  ? await pg.query('select raster_id as id, source_path, srid, raster_zoom from gis.rasters where raster_id=$1::text', [id])
24
- .then(el => el.rows?.[0])
23
+ .then(r => r.rows?.[0])
25
24
  : null;
26
25
 
27
26
  if (!data?.id) {
28
- return reply.status(404).send({ error: 'raster not found', code: 404 });
27
+ throw NotFoundError('raster not found')
29
28
  }
30
29
 
31
30
  if (!data.source_path) {
32
- return reply.status(400).send({ error: 'raster source_path not set', code: 400 });
31
+ throw BadRequestError('raster source_path not set');
33
32
  }
34
33
 
35
34
  // const relpath = `/map/raster/${data.source_path}`;
@@ -39,16 +38,14 @@ export default async function createXml({
39
38
  const uploadStatus = path.extname(data.source_path) ? await GetRasterStatus({ path: relpath }) : {};
40
39
 
41
40
  if (uploadStatus.exists === false) {
42
- return reply.status(400).send({ error: 'raster not uploaded', code: 400 });
41
+ throw BadRequestError('raster not uploaded');
43
42
  }
44
43
 
45
44
  if (uploadStatus.finished === false) {
46
- return reply.status(400).send({ error: 'upload not finished', code: 400 });
45
+ throw BadRequestError('upload not finished');
47
46
  }
48
47
 
49
- const callback = eventStream(reply);
50
-
51
- const proj4 = data.srid && pg.pk?.['public.spatial_ref_sys'] ? await pg.query('select proj4text from public.spatial_ref_sys where srid=$1', [data.srid]).then(el => el.rows?.[0]?.proj4text) : undefined;
48
+ const proj4 = data.srid && pg.pk?.['public.spatial_ref_sys'] ? await pg.query('select proj4text from public.spatial_ref_sys where srid=$1', [data.srid]).then(r => r.rows?.[0]?.proj4text) : undefined;
52
49
 
53
50
  // create at xml/:id with name only, always - by path
54
51
  const resp = await CreateXML({
@@ -57,11 +54,11 @@ export default async function createXml({
57
54
  previewZoom: data.raster_zoom, // preview<=>detailed, default = 16 if file size > 1GB
58
55
  // srid: data.srid, // auto detected if not supplied
59
56
  proj4,
60
- vrt: query.vrt, // force vrt even if relpath leads to single raster file
61
- debug: query.debug, // stream debug info
62
- nocache: query.nocache, // recreate if exists
57
+ vrt, // force vrt even if relpath leads to single raster file
58
+ debug, // stream debug info
59
+ nocache, // recreate if exists
63
60
  }, callback);
64
61
 
65
- callback('finish', 1);
66
- return reply.status(200).send(resp);
62
+ callback('finish', true);
63
+ return resp;
67
64
  }
@@ -3,6 +3,7 @@ import {
3
3
  } from '@opengis/fastify-table/utils.js';
4
4
 
5
5
  import checkRasterFile from '../../../plugins/mapnik/funcs/checkRasterFile.js';
6
+ import { NotFoundError, NotImplementedError } from '@opengis/fastify-table/errors.js';
6
7
 
7
8
  // todo: add to kamianske, remove custom api and test
8
9
  // addHook('beforeCreateXmlMulti', ({ list = [], id }) => {
@@ -22,20 +23,14 @@ import checkRasterFile from '../../../plugins/mapnik/funcs/checkRasterFile.js';
22
23
  // });
23
24
 
24
25
  export default async function createXmlMulti({
25
- pg = pgClients.client, params, query,
26
- }, reply) {
26
+ id, nocache, callback = () => { }
27
+ }, pg = pgClients.client) {
27
28
  if (!config.mapnik?.server) {
28
- return reply.code(400).send({
29
- error: 'mapnik grpc service address not set',
30
- code: 400,
31
- });
29
+ throw NotImplementedError('mapnik grpc service address not set');
32
30
  }
33
31
 
34
32
  if (config.ready?.mapnik !== true) {
35
- return reply.code(400).send({
36
- error: 'mapnik grpc service not ready',
37
- code: 400,
38
- });
33
+ return NotImplementedError('mapnik grpc service not ready');
39
34
  }
40
35
 
41
36
  const list = [{
@@ -43,18 +38,19 @@ export default async function createXmlMulti({
43
38
  relpath: 'source_path',
44
39
  table: 'gis.rasters',
45
40
  srid: 'srid',
46
- query: `source_path is not null ${params.id ? ` and raster_id = '${params.id}'` : ''}`,
41
+ query: `source_path is not null ${id ? ` and raster_id = $1` : ''}`,
42
+ args: [id].filter(Boolean)
47
43
  }];
48
44
 
49
- applyHookSync('beforeCreateXmlMulti', { list, id: params.id });
45
+ applyHookSync('beforeCreateXmlMulti', { list, id });
50
46
 
51
47
  const rows = await Promise.all(list.filter(el => el.id && el.table && el.relpath).map(async el => pg.query(el.q ? `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table from (${el.q})q` : `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table, ${el.srid || ''} as srid from ${el.table} where ${el.query || 'true'}`).then(e => e.rows || []))).then(e => e.flat());
52
48
 
53
49
  if (!rows.length) {
54
- return reply.status(404).send({ error: 'empty rows', code: 404 });
50
+ throw NotFoundError('empty rows');
55
51
  }
56
52
 
57
- const results = await checkRasterFile({ rows, reply, nocache: query.nocache });
53
+ const results = await checkRasterFile({ rows, callback, nocache });
58
54
 
59
55
  const q = Object.keys(results || {}).filter(key => results[key] && results[key].extent).map(key => {
60
56
  const { extent } = results[key];
@@ -72,5 +68,5 @@ export default async function createXmlMulti({
72
68
 
73
69
  if (q.length) await pg.query(q.join(';\n'));
74
70
 
75
- return reply.status(200).send('all finished');
71
+ return 'all finished';
76
72
  }
@@ -1,6 +1,7 @@
1
1
  import { config } from '@opengis/fastify-table/utils.js';
2
2
 
3
3
  import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
4
+ import { BadRequestError, NotImplementedError } from '@opengis/fastify-table/errors.js';
4
5
 
5
6
  const { FileSearch } = mapnik();
6
7
 
@@ -8,21 +9,17 @@ const maxLimit = 100;
8
9
 
9
10
  // example: GET /api/gis-file-search?dir=raster/dpt&key=Аркуш_5_1_изм_ДПТ_смт_Карнаухівка_А2_modified_k
10
11
  export default async function fileSearch({
11
- query,
12
- }, reply) {
12
+ dir, key, period, size, page, limit: queryLimit,
13
+ }) {
13
14
  if (!FileSearch) {
14
- return reply.status(400).send({ error: 'mapnik server address needed', code: 400 });
15
+ throw NotImplementedError('mapnik server address needed');
15
16
  }
16
17
 
17
- const {
18
- dir, key, period, size, page,
19
- } = query;
20
-
21
- const limit = Math.min(query.limit || 16, maxLimit);
18
+ const limit = Math.min(queryLimit || 16, maxLimit);
22
19
  const offset = page && page > 0 ? (page - 1) * limit : 0;
23
20
 
24
21
  if (!key && !period && !size) {
25
- return reply.status(400).send({ error: 'not enough query params: key / period / size', code: 400 });
22
+ throw BadRequestError('not enough query params: key / period / size');
26
23
  }
27
24
 
28
25
  const relpath = `raster/${[config.mapnik?.folder, dir].filter(Boolean).join('/')}`;
@@ -0,0 +1,28 @@
1
+ import { config } from '@opengis/fastify-table/utils.js';
2
+
3
+ import { BadRequestError, NotImplementedError } from '@opengis/fastify-table/errors.js';
4
+
5
+ import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
6
+
7
+ const { FileStat } = mapnik();
8
+
9
+ // example: GET /api/gis-file-info?path=raster/henplan_osnovne_kreslennia.tif
10
+ export default async function fileStat({
11
+ path: queryPath,
12
+ }) {
13
+ if (!config.mapnik?.server) {
14
+ throw NotImplementedError('mapnik server not configured');
15
+ }
16
+
17
+ if (config.ready?.mapnik !== true) {
18
+ throw NotImplementedError('mapnik server not ready');
19
+ }
20
+
21
+ if (!queryPath) {
22
+ throw BadRequestError('not enough query params: path');
23
+ }
24
+
25
+ const relpath = `raster/${[config.mapnik?.folder, queryPath].filter(Boolean).join('/')}`;
26
+ const data = await FileStat({ path: relpath });
27
+ return { data };
28
+ }