@kalisio/kdk 2.5.2 → 2.5.3

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 (275) hide show
  1. package/core/client/components/input/KShapePicker.vue +4 -4
  2. package/coverage/core/api/application.js.html +344 -344
  3. package/coverage/core/api/authentication.js.html +79 -79
  4. package/coverage/core/api/db.js.html +167 -167
  5. package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
  6. package/coverage/core/api/hooks/hooks.authorisations.js.html +166 -163
  7. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  8. package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
  9. package/coverage/core/api/hooks/hooks.model.js.html +280 -268
  10. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  11. package/coverage/core/api/hooks/hooks.push.js.html +12 -12
  12. package/coverage/core/api/hooks/hooks.query.js.html +92 -92
  13. package/coverage/core/api/hooks/hooks.schemas.js.html +13 -13
  14. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  15. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  16. package/coverage/core/api/hooks/hooks.users.js.html +48 -48
  17. package/coverage/core/api/hooks/index.html +49 -49
  18. package/coverage/core/api/hooks/index.js.html +11 -11
  19. package/coverage/core/api/index.html +42 -42
  20. package/coverage/core/api/index.js.html +22 -22
  21. package/coverage/core/api/marshall.js.html +127 -127
  22. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  23. package/coverage/core/api/models/index.html +1 -1
  24. package/coverage/core/api/models/messages.model.mongodb.js.html +1 -1
  25. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  26. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  27. package/coverage/core/api/models/users.model.mongodb.js.html +11 -11
  28. package/coverage/core/api/services/account/account.hooks.js.html +42 -42
  29. package/coverage/core/api/services/account/account.service.js.html +34 -34
  30. package/coverage/core/api/services/account/index.html +1 -1
  31. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  32. package/coverage/core/api/services/authorisations/authorisations.service.js.html +108 -120
  33. package/coverage/core/api/services/authorisations/index.html +19 -19
  34. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  35. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  36. package/coverage/core/api/services/databases/index.html +1 -1
  37. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  38. package/coverage/core/api/services/groups/index.html +1 -1
  39. package/coverage/core/api/services/import-export/import-export.hooks.js.html +1 -1
  40. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  41. package/coverage/core/api/services/import-export/index.html +1 -1
  42. package/coverage/core/api/services/index.html +15 -15
  43. package/coverage/core/api/services/index.js.html +97 -85
  44. package/coverage/core/api/services/mailer/index.html +1 -1
  45. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  46. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  47. package/coverage/core/api/services/messages/index.html +5 -5
  48. package/coverage/core/api/services/messages/messages.hooks.js.html +11 -8
  49. package/coverage/core/api/services/organisations/index.html +1 -1
  50. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  52. package/coverage/core/api/services/push/index.html +1 -1
  53. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  54. package/coverage/core/api/services/push/push.service.js.html +1 -1
  55. package/coverage/core/api/services/storage/index.html +1 -1
  56. package/coverage/core/api/services/storage/storage.hooks.js.html +36 -36
  57. package/coverage/core/api/services/storage/storage.service.js.html +30 -30
  58. package/coverage/core/api/services/tags/index.html +1 -1
  59. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  60. package/coverage/core/api/services/users/index.html +7 -7
  61. package/coverage/core/api/services/users/users.hooks.js.html +83 -80
  62. package/coverage/core/api/services/users/users.service.js.html +4 -4
  63. package/coverage/core/api/utils.js.html +1 -1
  64. package/coverage/core/common/errors.js.html +2 -2
  65. package/coverage/core/common/index.html +30 -30
  66. package/coverage/core/common/index.js.html +11 -11
  67. package/coverage/core/common/permissions.js.html +187 -187
  68. package/coverage/core/common/schema.js.html +26 -26
  69. package/coverage/core/common/utils.js.html +61 -61
  70. package/coverage/core/common/utils.offline.js.html +6 -6
  71. package/coverage/index.html +179 -164
  72. package/coverage/lcov-report/core/api/application.js.html +344 -344
  73. package/coverage/lcov-report/core/api/authentication.js.html +79 -79
  74. package/coverage/lcov-report/core/api/db.js.html +167 -167
  75. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
  76. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +166 -163
  77. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  78. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
  79. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +280 -268
  80. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  81. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +12 -12
  82. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +92 -92
  83. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +13 -13
  84. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  85. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  86. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +48 -48
  87. package/coverage/lcov-report/core/api/hooks/index.html +49 -49
  88. package/coverage/lcov-report/core/api/hooks/index.js.html +11 -11
  89. package/coverage/lcov-report/core/api/index.html +42 -42
  90. package/coverage/lcov-report/core/api/index.js.html +22 -22
  91. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  92. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  93. package/coverage/lcov-report/core/api/models/index.html +1 -1
  94. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +1 -1
  95. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  96. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  97. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  98. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +42 -42
  99. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  100. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  101. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  102. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +108 -120
  103. package/coverage/lcov-report/core/api/services/authorisations/index.html +19 -19
  104. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  105. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  106. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  107. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  108. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  109. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  110. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  111. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  112. package/coverage/lcov-report/core/api/services/index.html +15 -15
  113. package/coverage/lcov-report/core/api/services/index.js.html +97 -85
  114. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  115. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  116. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/messages/index.html +5 -5
  118. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +11 -8
  119. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  120. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  123. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +36 -36
  127. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +30 -30
  128. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/users/index.html +7 -7
  131. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +83 -80
  132. package/coverage/lcov-report/core/api/services/users/users.service.js.html +4 -4
  133. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  134. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  135. package/coverage/lcov-report/core/common/index.html +30 -30
  136. package/coverage/lcov-report/core/common/index.js.html +11 -11
  137. package/coverage/lcov-report/core/common/permissions.js.html +187 -187
  138. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  139. package/coverage/lcov-report/core/common/utils.js.html +61 -61
  140. package/coverage/lcov-report/core/common/utils.offline.js.html +6 -6
  141. package/coverage/lcov-report/index.html +179 -164
  142. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +348 -258
  143. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  144. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +795 -810
  145. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  146. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  147. package/coverage/lcov-report/map/api/index.html +32 -32
  148. package/coverage/lcov-report/map/api/index.js.html +46 -46
  149. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  150. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  151. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +69 -27
  152. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  153. package/coverage/lcov-report/map/api/models/index.html +69 -54
  154. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  155. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +112 -0
  156. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  158. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  159. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +177 -162
  160. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  161. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +160 -160
  164. package/coverage/lcov-report/map/api/services/features/features.service.js.html +117 -117
  165. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  166. package/coverage/lcov-report/map/api/services/index.html +21 -21
  167. package/coverage/lcov-report/map/api/services/index.js.html +404 -296
  168. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  169. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  170. package/coverage/lcov-report/map/api/services/styles/index.html +116 -0
  171. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +196 -0
  172. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  173. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  174. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -267
  175. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  176. package/coverage/lcov-report/map/common/index.html +158 -158
  177. package/coverage/lcov-report/map/common/index.js.html +68 -68
  178. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  179. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  180. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  181. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  182. package/coverage/lcov-report/map/common/permissions.js.html +42 -36
  183. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  184. package/coverage/lcov-report/map/common/tms-utils.js.html +6 -6
  185. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  186. package/coverage/lcov-report/map/common/wcs-utils.js.html +339 -339
  187. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  188. package/coverage/lcov-report/map/common/wfs-utils.js.html +11 -11
  189. package/coverage/lcov-report/map/common/wms-utils.js.html +8 -8
  190. package/coverage/lcov-report/map/common/wmts-utils.js.html +7 -7
  191. package/coverage/lcov.info +7022 -5894
  192. package/coverage/map/api/hooks/hooks.catalog.js.html +348 -258
  193. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  194. package/coverage/map/api/hooks/hooks.query.js.html +795 -810
  195. package/coverage/map/api/hooks/index.html +54 -54
  196. package/coverage/map/api/hooks/index.js.html +16 -16
  197. package/coverage/map/api/index.html +32 -32
  198. package/coverage/map/api/index.js.html +46 -46
  199. package/coverage/map/api/marshall.js.html +72 -72
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +69 -27
  202. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  203. package/coverage/map/api/models/index.html +69 -54
  204. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  205. package/coverage/map/api/models/styles.model.mongodb.js.html +112 -0
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  208. package/coverage/map/api/services/alerts/index.html +32 -32
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +177 -162
  210. package/coverage/map/api/services/catalog/index.html +21 -21
  211. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  212. package/coverage/map/api/services/daptiles/index.html +1 -1
  213. package/coverage/map/api/services/features/features.hooks.js.html +160 -160
  214. package/coverage/map/api/services/features/features.service.js.html +117 -117
  215. package/coverage/map/api/services/features/index.html +31 -31
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +404 -296
  218. package/coverage/map/api/services/projects/index.html +21 -21
  219. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  220. package/coverage/map/api/services/styles/index.html +116 -0
  221. package/coverage/map/api/services/styles/styles.hooks.js.html +196 -0
  222. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  223. package/coverage/map/common/errors.js.html +16 -16
  224. package/coverage/map/common/geotiff-grid-source.js.html +267 -267
  225. package/coverage/map/common/grid.js.html +554 -554
  226. package/coverage/map/common/index.html +158 -158
  227. package/coverage/map/common/index.js.html +68 -68
  228. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  229. package/coverage/map/common/moment-utils.js.html +18 -18
  230. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  231. package/coverage/map/common/opendap-utils.js.html +353 -353
  232. package/coverage/map/common/permissions.js.html +42 -36
  233. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  234. package/coverage/map/common/tms-utils.js.html +6 -6
  235. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  236. package/coverage/map/common/wcs-utils.js.html +339 -339
  237. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  238. package/coverage/map/common/wfs-utils.js.html +11 -11
  239. package/coverage/map/common/wms-utils.js.html +8 -8
  240. package/coverage/map/common/wmts-utils.js.html +7 -7
  241. package/coverage/tmp/coverage-151198-1753351220086-0.json +1 -0
  242. package/coverage/tmp/coverage-151210-1753351220070-0.json +1 -0
  243. package/coverage/tmp/coverage-151221-1753351129816-0.json +1 -0
  244. package/coverage/tmp/coverage-151233-1753351129803-0.json +1 -0
  245. package/coverage/tmp/coverage-151240-1753351129770-0.json +1 -0
  246. package/coverage/tmp/coverage-151307-1753351220058-0.json +1 -0
  247. package/coverage/tmp/coverage-151319-1753351220044-0.json +1 -0
  248. package/coverage/tmp/coverage-151326-1753351220010-0.json +1 -0
  249. package/map/api/services/styles/styles.hooks.js +1 -1
  250. package/map/client/components/KLayerEditor.vue +4 -0
  251. package/map/client/components/catalog/KLayerCategories.vue +2 -0
  252. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  253. package/map/client/components/styles/KStyleEditor.vue +1 -1
  254. package/map/client/components/styles/KStyleManager.vue +7 -1
  255. package/map/client/composables/highlight.js +5 -1
  256. package/map/client/i18n/map_en.json +4 -1
  257. package/map/client/i18n/map_fr.json +4 -1
  258. package/map/client/mixins/globe/mixin.geojson-layers.js +11 -5
  259. package/map/client/mixins/mixin.activity.js +9 -0
  260. package/map/client/utils/utils.layers.js +0 -2
  261. package/package.json +1 -1
  262. package/test/api/core/push.test.js +1 -1
  263. package/test/api/core/test-log-2025-02-05.log +23 -0
  264. package/test/api/core/test-log-2025-05-21.log +15 -0
  265. package/test/api/core/test-log-2025-06-25.log +9 -0
  266. package/test/api/core/test-log-2025-07-24.log +44 -0
  267. package/test/api/map/test-log-2025-05-27.log +13 -0
  268. package/test/api/map/test-log-2025-06-23.log +7 -0
  269. package/test/api/map/{test-log-2025-05-26.log → test-log-2025-07-24.log} +3 -4
  270. package/coverage/tmp/coverage-122123-1739872365211-0.json +0 -1
  271. package/coverage/tmp/coverage-122135-1739872365196-0.json +0 -1
  272. package/coverage/tmp/coverage-122146-1739872365184-0.json +0 -1
  273. package/coverage/tmp/coverage-122158-1739872365169-0.json +0 -1
  274. package/coverage/tmp/coverage-122165-1739872365141-0.json +0 -1
  275. package/test/api/core/test-log-2025-05-26.log +0 -22
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">78.43% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/153</span>
28
+ <span class='fraction'>120/153</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">31.57% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>6/19</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">55.55% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>5/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">78.43% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/153</span>
49
+ <span class='fraction'>120/153</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -216,17 +216,24 @@
216
216
  <a name='L151'></a><a href='#L151'>151</a>
217
217
  <a name='L152'></a><a href='#L152'>152</a>
218
218
  <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
219
+ <a name='L154'></a><a href='#L154'>154</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
220
+ <span class="cline-any cline-yes">1x</span>
221
+ <span class="cline-any cline-yes">1x</span>
222
+ <span class="cline-any cline-yes">1x</span>
223
+ <span class="cline-any cline-yes">1x</span>
220
224
  <span class="cline-any cline-no">&nbsp;</span>
221
225
  <span class="cline-any cline-no">&nbsp;</span>
222
226
  <span class="cline-any cline-no">&nbsp;</span>
223
227
  <span class="cline-any cline-no">&nbsp;</span>
228
+ <span class="cline-any cline-yes">1x</span>
229
+ <span class="cline-any cline-yes">1x</span>
224
230
  <span class="cline-any cline-no">&nbsp;</span>
225
231
  <span class="cline-any cline-no">&nbsp;</span>
226
232
  <span class="cline-any cline-no">&nbsp;</span>
227
233
  <span class="cline-any cline-no">&nbsp;</span>
228
234
  <span class="cline-any cline-no">&nbsp;</span>
229
235
  <span class="cline-any cline-no">&nbsp;</span>
236
+ <span class="cline-any cline-yes">1x</span>
230
237
  <span class="cline-any cline-no">&nbsp;</span>
231
238
  <span class="cline-any cline-no">&nbsp;</span>
232
239
  <span class="cline-any cline-no">&nbsp;</span>
@@ -236,158 +243,151 @@
236
243
  <span class="cline-any cline-no">&nbsp;</span>
237
244
  <span class="cline-any cline-no">&nbsp;</span>
238
245
  <span class="cline-any cline-no">&nbsp;</span>
239
- <span class="cline-any cline-no">&nbsp;</span>
240
- <span class="cline-any cline-no">&nbsp;</span>
241
- <span class="cline-any cline-no">&nbsp;</span>
242
- <span class="cline-any cline-no">&nbsp;</span>
243
- <span class="cline-any cline-no">&nbsp;</span>
244
- <span class="cline-any cline-no">&nbsp;</span>
245
- <span class="cline-any cline-no">&nbsp;</span>
246
- <span class="cline-any cline-no">&nbsp;</span>
247
- <span class="cline-any cline-no">&nbsp;</span>
248
- <span class="cline-any cline-no">&nbsp;</span>
249
- <span class="cline-any cline-no">&nbsp;</span>
250
- <span class="cline-any cline-no">&nbsp;</span>
251
- <span class="cline-any cline-no">&nbsp;</span>
252
- <span class="cline-any cline-no">&nbsp;</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
254
- <span class="cline-any cline-no">&nbsp;</span>
255
- <span class="cline-any cline-no">&nbsp;</span>
256
- <span class="cline-any cline-no">&nbsp;</span>
257
- <span class="cline-any cline-no">&nbsp;</span>
258
- <span class="cline-any cline-no">&nbsp;</span>
259
- <span class="cline-any cline-no">&nbsp;</span>
260
- <span class="cline-any cline-no">&nbsp;</span>
261
- <span class="cline-any cline-no">&nbsp;</span>
262
- <span class="cline-any cline-no">&nbsp;</span>
263
- <span class="cline-any cline-no">&nbsp;</span>
264
- <span class="cline-any cline-no">&nbsp;</span>
265
- <span class="cline-any cline-no">&nbsp;</span>
266
- <span class="cline-any cline-no">&nbsp;</span>
267
- <span class="cline-any cline-no">&nbsp;</span>
268
- <span class="cline-any cline-no">&nbsp;</span>
269
- <span class="cline-any cline-no">&nbsp;</span>
270
- <span class="cline-any cline-no">&nbsp;</span>
271
- <span class="cline-any cline-no">&nbsp;</span>
272
- <span class="cline-any cline-no">&nbsp;</span>
273
- <span class="cline-any cline-no">&nbsp;</span>
274
- <span class="cline-any cline-no">&nbsp;</span>
275
- <span class="cline-any cline-no">&nbsp;</span>
276
- <span class="cline-any cline-no">&nbsp;</span>
277
- <span class="cline-any cline-no">&nbsp;</span>
278
- <span class="cline-any cline-no">&nbsp;</span>
279
- <span class="cline-any cline-no">&nbsp;</span>
280
- <span class="cline-any cline-no">&nbsp;</span>
281
- <span class="cline-any cline-no">&nbsp;</span>
282
- <span class="cline-any cline-no">&nbsp;</span>
283
- <span class="cline-any cline-no">&nbsp;</span>
284
- <span class="cline-any cline-no">&nbsp;</span>
285
- <span class="cline-any cline-no">&nbsp;</span>
286
- <span class="cline-any cline-no">&nbsp;</span>
287
- <span class="cline-any cline-no">&nbsp;</span>
288
- <span class="cline-any cline-no">&nbsp;</span>
289
- <span class="cline-any cline-no">&nbsp;</span>
290
- <span class="cline-any cline-no">&nbsp;</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-no">&nbsp;</span>
293
- <span class="cline-any cline-no">&nbsp;</span>
294
- <span class="cline-any cline-no">&nbsp;</span>
295
- <span class="cline-any cline-no">&nbsp;</span>
296
- <span class="cline-any cline-no">&nbsp;</span>
297
- <span class="cline-any cline-no">&nbsp;</span>
298
- <span class="cline-any cline-no">&nbsp;</span>
299
- <span class="cline-any cline-no">&nbsp;</span>
300
- <span class="cline-any cline-no">&nbsp;</span>
301
- <span class="cline-any cline-no">&nbsp;</span>
302
- <span class="cline-any cline-no">&nbsp;</span>
303
- <span class="cline-any cline-no">&nbsp;</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
- <span class="cline-any cline-no">&nbsp;</span>
307
- <span class="cline-any cline-no">&nbsp;</span>
308
- <span class="cline-any cline-no">&nbsp;</span>
309
- <span class="cline-any cline-no">&nbsp;</span>
310
- <span class="cline-any cline-no">&nbsp;</span>
311
- <span class="cline-any cline-no">&nbsp;</span>
312
- <span class="cline-any cline-no">&nbsp;</span>
313
- <span class="cline-any cline-no">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-no">&nbsp;</span>
316
- <span class="cline-any cline-no">&nbsp;</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
319
- <span class="cline-any cline-no">&nbsp;</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
- <span class="cline-any cline-no">&nbsp;</span>
322
- <span class="cline-any cline-no">&nbsp;</span>
323
- <span class="cline-any cline-no">&nbsp;</span>
324
- <span class="cline-any cline-no">&nbsp;</span>
325
- <span class="cline-any cline-no">&nbsp;</span>
326
- <span class="cline-any cline-no">&nbsp;</span>
327
- <span class="cline-any cline-no">&nbsp;</span>
328
- <span class="cline-any cline-no">&nbsp;</span>
329
- <span class="cline-any cline-no">&nbsp;</span>
330
- <span class="cline-any cline-no">&nbsp;</span>
331
- <span class="cline-any cline-no">&nbsp;</span>
332
- <span class="cline-any cline-no">&nbsp;</span>
333
- <span class="cline-any cline-no">&nbsp;</span>
334
- <span class="cline-any cline-no">&nbsp;</span>
335
- <span class="cline-any cline-no">&nbsp;</span>
336
- <span class="cline-any cline-no">&nbsp;</span>
337
- <span class="cline-any cline-no">&nbsp;</span>
338
- <span class="cline-any cline-no">&nbsp;</span>
339
- <span class="cline-any cline-no">&nbsp;</span>
340
- <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-no">&nbsp;</span>
342
- <span class="cline-any cline-no">&nbsp;</span>
343
- <span class="cline-any cline-no">&nbsp;</span>
344
- <span class="cline-any cline-no">&nbsp;</span>
345
- <span class="cline-any cline-no">&nbsp;</span>
346
- <span class="cline-any cline-no">&nbsp;</span>
347
- <span class="cline-any cline-no">&nbsp;</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-no">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-no">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-no">&nbsp;</span>
362
- <span class="cline-any cline-no">&nbsp;</span>
363
- <span class="cline-any cline-no">&nbsp;</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-no">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import * as GeoTIFF from 'geotiff'</span></span></span>
373
- <span class="cstat-no" title="statement not covered" >import _ from 'lodash'</span>
374
- <span class="cstat-no" title="statement not covered" >import { unitConverters, SortOrder, GridSource, Grid1D } from './grid.js'</span>
375
- <span class="cstat-no" title="statement not covered" ></span>
376
- <span class="cstat-no" title="statement not covered" >// pack r,g,b in an uint32</span>
377
- <span class="cstat-no" title="statement not covered" >function packRgb (r, g, b) {</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-yes">1x</span>
248
+ <span class="cline-any cline-yes">1x</span>
249
+ <span class="cline-any cline-yes">1x</span>
250
+ <span class="cline-any cline-yes">1x</span>
251
+ <span class="cline-any cline-yes">1x</span>
252
+ <span class="cline-any cline-yes">1x</span>
253
+ <span class="cline-any cline-yes">1x</span>
254
+ <span class="cline-any cline-yes">1x</span>
255
+ <span class="cline-any cline-yes">1x</span>
256
+ <span class="cline-any cline-yes">1x</span>
257
+ <span class="cline-any cline-yes">1x</span>
258
+ <span class="cline-any cline-yes">1x</span>
259
+ <span class="cline-any cline-yes">1x</span>
260
+ <span class="cline-any cline-yes">1x</span>
261
+ <span class="cline-any cline-yes">1x</span>
262
+ <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-no">&nbsp;</span>
264
+ <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-yes">1x</span>
266
+ <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-yes">1x</span>
268
+ <span class="cline-any cline-yes">1x</span>
269
+ <span class="cline-any cline-yes">1x</span>
270
+ <span class="cline-any cline-yes">1x</span>
271
+ <span class="cline-any cline-yes">1x</span>
272
+ <span class="cline-any cline-yes">1x</span>
273
+ <span class="cline-any cline-yes">1x</span>
274
+ <span class="cline-any cline-yes">1x</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">1x</span>
277
+ <span class="cline-any cline-yes">1x</span>
278
+ <span class="cline-any cline-yes">1x</span>
279
+ <span class="cline-any cline-yes">1x</span>
280
+ <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-yes">1x</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-no">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-yes">1x</span>
288
+ <span class="cline-any cline-yes">1x</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-yes">1x</span>
291
+ <span class="cline-any cline-yes">1x</span>
292
+ <span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-yes">1x</span>
294
+ <span class="cline-any cline-yes">1x</span>
295
+ <span class="cline-any cline-yes">1x</span>
296
+ <span class="cline-any cline-yes">1x</span>
297
+ <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">1x</span>
299
+ <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-no">&nbsp;</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-yes">1x</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-yes">1x</span>
312
+ <span class="cline-any cline-yes">1x</span>
313
+ <span class="cline-any cline-yes">1x</span>
314
+ <span class="cline-any cline-yes">1x</span>
315
+ <span class="cline-any cline-yes">1x</span>
316
+ <span class="cline-any cline-yes">1x</span>
317
+ <span class="cline-any cline-yes">1x</span>
318
+ <span class="cline-any cline-yes">1x</span>
319
+ <span class="cline-any cline-yes">1x</span>
320
+ <span class="cline-any cline-yes">1x</span>
321
+ <span class="cline-any cline-yes">1x</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-yes">1x</span>
332
+ <span class="cline-any cline-yes">1x</span>
333
+ <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-yes">1x</span>
335
+ <span class="cline-any cline-yes">1x</span>
336
+ <span class="cline-any cline-yes">1x</span>
337
+ <span class="cline-any cline-yes">1x</span>
338
+ <span class="cline-any cline-yes">1x</span>
339
+ <span class="cline-any cline-yes">1x</span>
340
+ <span class="cline-any cline-yes">1x</span>
341
+ <span class="cline-any cline-yes">1x</span>
342
+ <span class="cline-any cline-yes">1x</span>
343
+ <span class="cline-any cline-yes">1x</span>
344
+ <span class="cline-any cline-yes">1x</span>
345
+ <span class="cline-any cline-yes">1x</span>
346
+ <span class="cline-any cline-yes">1x</span>
347
+ <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-yes">1x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-yes">1x</span>
358
+ <span class="cline-any cline-yes">1x</span>
359
+ <span class="cline-any cline-yes">1x</span>
360
+ <span class="cline-any cline-yes">1x</span>
361
+ <span class="cline-any cline-yes">1x</span>
362
+ <span class="cline-any cline-yes">1x</span>
363
+ <span class="cline-any cline-yes">1x</span>
364
+ <span class="cline-any cline-yes">1x</span>
365
+ <span class="cline-any cline-yes">1x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as GeoTIFF from 'geotiff'
373
+ import _ from 'lodash'
374
+ import { unitConverters, SortOrder, GridSource, Grid1D } from './grid.js'
375
+ &nbsp;
376
+ // pack r,g,b in an uint32
377
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function packRgb (r, g, b) {</span></span>
378
378
  <span class="cstat-no" title="statement not covered" > // Using 0x3E as high bits to make float interpretation (IEEE-754) of values between [0.125, 0.5]</span>
379
379
  <span class="cstat-no" title="statement not covered" > return r | (g &lt;&lt; 8) | (b &lt;&lt; 16) | (0x3E &lt;&lt; 24)</span>
380
380
  <span class="cstat-no" title="statement not covered" >}</span>
381
- <span class="cstat-no" title="statement not covered" ></span>
382
- <span class="cstat-no" title="statement not covered" >// return packed rgb as a float value</span>
383
- <span class="cstat-no" title="statement not covered" >function encodeRgb (packed) {</span>
381
+ &nbsp;
382
+ // return packed rgb as a float value
383
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function encodeRgb (packed) {</span></span>
384
384
  <span class="cstat-no" title="statement not covered" > const asuint = new Uint32Array(1)</span>
385
385
  <span class="cstat-no" title="statement not covered" > const asfloat = new Float32Array(asuint.buffer)</span>
386
386
  <span class="cstat-no" title="statement not covered" > asuint[0] = packed</span>
387
387
  <span class="cstat-no" title="statement not covered" > return asfloat[0]</span>
388
388
  <span class="cstat-no" title="statement not covered" >}</span>
389
- <span class="cstat-no" title="statement not covered" ></span>
390
- <span class="cstat-no" title="statement not covered" >function mergeRgb (bands) {</span>
389
+ &nbsp;
390
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function mergeRgb (bands) {</span></span>
391
391
  <span class="cstat-no" title="statement not covered" > // scale is used when source data is uint16 for example</span>
392
392
  <span class="cstat-no" title="statement not covered" > const scale = 8 * (bands.BYTES_PER_ELEMENT - 1)</span>
393
393
  <span class="cstat-no" title="statement not covered" > const merged = new Float32Array(bands.length / 3)</span>
@@ -396,132 +396,132 @@
396
396
  <span class="cstat-no" title="statement not covered" ></span>
397
397
  <span class="cstat-no" title="statement not covered" > return merged</span>
398
398
  <span class="cstat-no" title="statement not covered" >}</span>
399
- <span class="cstat-no" title="statement not covered" ></span>
400
- <span class="cstat-no" title="statement not covered" >export class GeoTiffGridSource extends GridSource {</span>
401
- <span class="cstat-no" title="statement not covered" > static getKey () {</span>
402
- <span class="cstat-no" title="statement not covered" > return 'geotiff'</span>
403
- <span class="cstat-no" title="statement not covered" > }</span>
404
- <span class="cstat-no" title="statement not covered" ></span>
405
- <span class="cstat-no" title="statement not covered" > constructor (options) {</span>
406
- <span class="cstat-no" title="statement not covered" > super(options)</span>
407
- <span class="cstat-no" title="statement not covered" ></span>
408
- <span class="cstat-no" title="statement not covered" > this.usable = false</span>
409
- <span class="cstat-no" title="statement not covered" > }</span>
410
- <span class="cstat-no" title="statement not covered" ></span>
411
- <span class="cstat-no" title="statement not covered" > getBBox () {</span>
412
- <span class="cstat-no" title="statement not covered" > return this.usable ? [this.minMaxLat[0], this.minMaxLon[0], this.minMaxLat[1], this.minMaxLon[1]] : null</span>
413
- <span class="cstat-no" title="statement not covered" > }</span>
414
- <span class="cstat-no" title="statement not covered" ></span>
415
- <span class="cstat-no" title="statement not covered" > getDataBounds () {</span>
399
+ &nbsp;
400
+ export class GeoTiffGridSource extends GridSource {
401
+ static getKey () {
402
+ return 'geotiff'
403
+ }
404
+ &nbsp;
405
+ constructor (options) {
406
+ super(options)
407
+ &nbsp;
408
+ this.usable = false
409
+ }
410
+ &nbsp;
411
+ getBBox () {
412
+ return this.usable ? [this.minMaxLat[0], this.minMaxLon[0], this.minMaxLat[1], this.minMaxLon[1]] <span class="branch-0 cbranch-no" title="branch not covered" >: null</span>
413
+ }
414
+ &nbsp;
415
+ <span class="fstat-no" title="function not covered" > getDataBounds () {</span>
416
416
  <span class="cstat-no" title="statement not covered" > return this.usable ? this.minMaxVal : null</span>
417
417
  <span class="cstat-no" title="statement not covered" > }</span>
418
- <span class="cstat-no" title="statement not covered" ></span>
419
- <span class="cstat-no" title="statement not covered" > async setup (config) {</span>
420
- <span class="cstat-no" title="statement not covered" > this.usable = false</span>
421
- <span class="cstat-no" title="statement not covered" > ++this.sourceKey</span>
422
- <span class="cstat-no" title="statement not covered" ></span>
423
- <span class="cstat-no" title="statement not covered" > this.minMaxLat = null</span>
424
- <span class="cstat-no" title="statement not covered" > this.minMaxLon = null</span>
425
- <span class="cstat-no" title="statement not covered" > this.minMaxVal = null</span>
426
- <span class="cstat-no" title="statement not covered" ></span>
427
- <span class="cstat-no" title="statement not covered" > this.nodata = config.nodata</span>
428
- <span class="cstat-no" title="statement not covered" > this.converter = unitConverters[config.converter]</span>
429
- <span class="cstat-no" title="statement not covered" > this.rgb = config.rgb</span>
430
- <span class="cstat-no" title="statement not covered" ></span>
431
- <span class="cstat-no" title="statement not covered" > try {</span>
432
- <span class="cstat-no" title="statement not covered" > // forceXHR is useful for tests because nock doesn't know how to intercept fetch</span>
433
- <span class="cstat-no" title="statement not covered" > this.geotiff = await GeoTIFF.fromUrl(config.url, { forceXHR: _.get(config, 'forceXHR', false) })</span>
434
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
418
+ &nbsp;
419
+ async setup (config) {
420
+ this.usable = false
421
+ ++this.sourceKey
422
+ &nbsp;
423
+ this.minMaxLat = null
424
+ this.minMaxLon = null
425
+ this.minMaxVal = null
426
+ &nbsp;
427
+ this.nodata = config.nodata
428
+ this.converter = unitConverters[config.converter]
429
+ this.rgb = config.rgb
430
+ &nbsp;
431
+ try {
432
+ // forceXHR is useful for tests because nock doesn't know how to intercept fetch
433
+ this.geotiff = await GeoTIFF.fromUrl(config.url, { forceXHR: _.get(config, 'forceXHR', false) })
434
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
435
435
  <span class="cstat-no" title="statement not covered" > // fetching may fail, in this case the source</span>
436
436
  <span class="cstat-no" title="statement not covered" > // will remain in unusable state</span>
437
437
  <span class="cstat-no" title="statement not covered" > this.geotiff = null</span>
438
438
  <span class="cstat-no" title="statement not covered" > console.error(`Failed fetching geotiff from ${config.url}`)</span>
439
439
  <span class="cstat-no" title="statement not covered" > }</span>
440
- <span class="cstat-no" title="statement not covered" ></span>
441
- <span class="cstat-no" title="statement not covered" > if (this.geotiff) {</span>
442
- <span class="cstat-no" title="statement not covered" > // for now only consider first image</span>
443
- <span class="cstat-no" title="statement not covered" > this.imageCount = await this.geotiff.getImageCount()</span>
444
- <span class="cstat-no" title="statement not covered" > this.refImage = await this.geotiff.getImage()</span>
445
- <span class="cstat-no" title="statement not covered" > if (this.nodata === undefined) {</span>
446
- <span class="cstat-no" title="statement not covered" > // try to get it from image metadata</span>
447
- <span class="cstat-no" title="statement not covered" > const meta = this.refImage.getFileDirectory()</span>
448
- <span class="cstat-no" title="statement not covered" > const nodata = parseFloat(meta.GDAL_NODATA)</span>
449
- <span class="cstat-no" title="statement not covered" > // const nodata =image.getGDALNoData()</span>
450
- <span class="cstat-no" title="statement not covered" > if (nodata &amp;&amp; !isNaN(nodata)) this.nodata = nodata</span>
451
- <span class="cstat-no" title="statement not covered" > }</span>
452
- <span class="cstat-no" title="statement not covered" > // try to guess if rgb image</span>
453
- <span class="cstat-no" title="statement not covered" > if (this.rgb === undefined) {</span>
454
- <span class="cstat-no" title="statement not covered" > this.rgb = this.refImage.getSamplesPerPixel() &gt; 1</span>
455
- <span class="cstat-no" title="statement not covered" > }</span>
456
- <span class="cstat-no" title="statement not covered" > // generates nodata usable by tiled mesh layer (expects a float value)</span>
457
- <span class="cstat-no" title="statement not covered" > if (this.rgb &amp;&amp; this.nodata &amp;&amp; this.nodata.length === 3) {</span>
440
+ &nbsp;
441
+ if (this.geotiff) {
442
+ // for now only consider first image
443
+ this.imageCount = await this.geotiff.getImageCount()
444
+ this.refImage = await this.geotiff.getImage()
445
+ if (this.nodata === undefined) {
446
+ // try to get it from image metadata
447
+ const meta = this.refImage.getFileDirectory()
448
+ const nodata = parseFloat(meta.GDAL_NODATA)
449
+ // const nodata =image.getGDALNoData()
450
+ if (nodata <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; !isNaN(nodata))</span> <span class="branch-0 cbranch-no" title="branch not covered" >this.nodata = nodata</span>
451
+ }
452
+ // try to guess if rgb image
453
+ if (this.rgb === undefined) {
454
+ this.rgb = this.refImage.getSamplesPerPixel() &gt; 1
455
+ }
456
+ // generates nodata usable by tiled mesh layer (expects a float value)
457
+ if (this.rgb <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; this.nodata <span class="branch-0 cbranch-no" title="branch not covered" ></span>&amp;&amp; this.nodata.length === 3)</span> <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
458
458
  <span class="cstat-no" title="statement not covered" > this.nodata = encodeRgb(packRgb(this.nodata[0], this.nodata[1], this.nodata[2]))</span>
459
459
  <span class="cstat-no" title="statement not covered" > }</span>
460
- <span class="cstat-no" title="statement not covered" ></span>
461
- <span class="cstat-no" title="statement not covered" > const tiffBbox = this.refImage.getBoundingBox()</span>
462
- <span class="cstat-no" title="statement not covered" > this.minMaxLat = [tiffBbox[1], tiffBbox[3]]</span>
463
- <span class="cstat-no" title="statement not covered" > this.minMaxLon = [tiffBbox[0], tiffBbox[2]]</span>
464
- <span class="cstat-no" title="statement not covered" > this.usable = true</span>
465
- <span class="cstat-no" title="statement not covered" > }</span>
466
- <span class="cstat-no" title="statement not covered" ></span>
467
- <span class="cstat-no" title="statement not covered" > this.dataChanged()</span>
468
- <span class="cstat-no" title="statement not covered" > }</span>
469
- <span class="cstat-no" title="statement not covered" ></span>
470
- <span class="cstat-no" title="statement not covered" > async fetch (abort, bbox, resolution) {</span>
471
- <span class="cstat-no" title="statement not covered" > if (!this.usable) { return null }</span>
472
- <span class="cstat-no" title="statement not covered" ></span>
473
- <span class="cstat-no" title="statement not covered" > const sourceKey = this.sourceKey</span>
474
- <span class="cstat-no" title="statement not covered" ></span>
475
- <span class="cstat-no" title="statement not covered" > // select the image with the closest resolution</span>
476
- <span class="cstat-no" title="statement not covered" > let usedImage = await this.geotiff.getImage(0)</span>
477
- <span class="cstat-no" title="statement not covered" > for (let i = 1; i &lt; this.imageCount; ++i) {</span>
460
+ &nbsp;
461
+ const tiffBbox = this.refImage.getBoundingBox()
462
+ this.minMaxLat = [tiffBbox[1], tiffBbox[3]]
463
+ this.minMaxLon = [tiffBbox[0], tiffBbox[2]]
464
+ this.usable = true
465
+ }
466
+ &nbsp;
467
+ this.dataChanged()
468
+ }
469
+ &nbsp;
470
+ async fetch (abort, bbox, resolution) {
471
+ if (!this.usable) <span class="branch-0 cbranch-no" title="branch not covered" >{ return null }</span>
472
+ &nbsp;
473
+ const sourceKey = this.sourceKey
474
+ &nbsp;
475
+ // select the image with the closest resolution
476
+ let usedImage = await this.geotiff.getImage(0)
477
+ for (let i = 1; i &lt; this.imageCount; ++i) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
478
478
  <span class="cstat-no" title="statement not covered" > const img = await this.geotiff.getImage(i)</span>
479
479
  <span class="cstat-no" title="statement not covered" > const [rx, ry] = img.getResolution(this.refImage)</span>
480
480
  <span class="cstat-no" title="statement not covered" > if (Math.abs(rx) &gt; resolution[1] || Math.abs(ry) &gt; resolution[0]) break</span>
481
481
  <span class="cstat-no" title="statement not covered" > usedImage = img</span>
482
482
  <span class="cstat-no" title="statement not covered" > }</span>
483
- <span class="cstat-no" title="statement not covered" ></span>
484
- <span class="cstat-no" title="statement not covered" > const [rx, ry] = usedImage.getResolution(this.refImage)</span>
485
- <span class="cstat-no" title="statement not covered" > const [ox, oy] = this.refImage.getOrigin()</span>
486
- <span class="cstat-no" title="statement not covered" > const [sx, sy] = [usedImage.getWidth(), usedImage.getHeight()]</span>
487
- <span class="cstat-no" title="statement not covered" ></span>
488
- <span class="cstat-no" title="statement not covered" > let left = (bbox[1] - ox) / rx</span>
489
- <span class="cstat-no" title="statement not covered" > let right = (bbox[3] - ox) / rx</span>
490
- <span class="cstat-no" title="statement not covered" > let bottom = (bbox[0] - oy) / ry</span>
491
- <span class="cstat-no" title="statement not covered" > let top = (bbox[2] - oy) / ry</span>
492
- <span class="cstat-no" title="statement not covered" ></span>
493
- <span class="cstat-no" title="statement not covered" > if (rx &lt; 0) [left, right] = [right, left]</span>
494
- <span class="cstat-no" title="statement not covered" > if (ry &lt; 0) [bottom, top] = [top, bottom]</span>
495
- <span class="cstat-no" title="statement not covered" ></span>
496
- <span class="cstat-no" title="statement not covered" > left = Math.min(sx - 1, Math.max(0, Math.floor(left)))</span>
497
- <span class="cstat-no" title="statement not covered" > right = Math.min(sx - 1, Math.max(0, Math.ceil(right)))</span>
498
- <span class="cstat-no" title="statement not covered" > bottom = Math.min(sy - 1, Math.max(0, Math.floor(bottom)))</span>
499
- <span class="cstat-no" title="statement not covered" > top = Math.min(sy - 1, Math.max(0, Math.ceil(top)))</span>
500
- <span class="cstat-no" title="statement not covered" ></span>
501
- <span class="cstat-no" title="statement not covered" > // readRasters will fetch [left, right[ and [bottom, top[ hence the + 1</span>
502
- <span class="cstat-no" title="statement not covered" > const window = [left, bottom, right + 1, top + 1]</span>
503
- <span class="cstat-no" title="statement not covered" > const bands = this.rgb</span>
504
- <span class="cstat-no" title="statement not covered" > ? await usedImage.readRGB({ window })</span>
505
- <span class="cstat-no" title="statement not covered" > : await usedImage.readRasters({ window, fillValue: this.nodata })</span>
506
- <span class="cstat-no" title="statement not covered" > const data = this.rgb ? mergeRgb(bands) : bands[0]</span>
507
- <span class="cstat-no" title="statement not covered" ></span>
508
- <span class="cstat-no" title="statement not covered" > if (rx &lt; 0) [left, right] = [right, left]</span>
509
- <span class="cstat-no" title="statement not covered" > if (ry &lt; 0) [bottom, top] = [top, bottom]</span>
510
- <span class="cstat-no" title="statement not covered" ></span>
511
- <span class="cstat-no" title="statement not covered" > const dataBbox = [</span>
512
- <span class="cstat-no" title="statement not covered" > oy + (bottom * ry),</span>
513
- <span class="cstat-no" title="statement not covered" > ox + (left * rx),</span>
514
- <span class="cstat-no" title="statement not covered" > oy + (top * ry),</span>
515
- <span class="cstat-no" title="statement not covered" > ox + (right * rx)</span>
516
- <span class="cstat-no" title="statement not covered" > ]</span>
517
- <span class="cstat-no" title="statement not covered" ></span>
518
- <span class="cstat-no" title="statement not covered" > return new Grid1D(</span>
519
- <span class="cstat-no" title="statement not covered" > sourceKey,</span>
520
- <span class="cstat-no" title="statement not covered" > dataBbox, [bands.height, bands.width],</span>
521
- <span class="cstat-no" title="statement not covered" > data, true, SortOrder.DESCENDING, SortOrder.ASCENDING,</span>
522
- <span class="cstat-no" title="statement not covered" > this.nodata, this.converter)</span>
523
- <span class="cstat-no" title="statement not covered" > }</span>
524
- <span class="cstat-no" title="statement not covered" >}</span>
483
+ &nbsp;
484
+ const [rx, ry] = usedImage.getResolution(this.refImage)
485
+ const [ox, oy] = this.refImage.getOrigin()
486
+ const [sx, sy] = [usedImage.getWidth(), usedImage.getHeight()]
487
+ &nbsp;
488
+ let left = (bbox[1] - ox) / rx
489
+ let right = (bbox[3] - ox) / rx
490
+ let bottom = (bbox[0] - oy) / ry
491
+ let top = (bbox[2] - oy) / ry
492
+ &nbsp;
493
+ if (rx &lt; 0) <span class="branch-0 cbranch-no" title="branch not covered" >[left, right] = [right, left]</span>
494
+ if (ry &lt; 0) [bottom, top] = [top, bottom]
495
+ &nbsp;
496
+ left = Math.min(sx - 1, Math.max(0, Math.floor(left)))
497
+ right = Math.min(sx - 1, Math.max(0, Math.ceil(right)))
498
+ bottom = Math.min(sy - 1, Math.max(0, Math.floor(bottom)))
499
+ top = Math.min(sy - 1, Math.max(0, Math.ceil(top)))
500
+ &nbsp;
501
+ // readRasters will fetch [left, right[ and [bottom, top[ hence the + 1
502
+ const window = [left, bottom, right + 1, top + 1]
503
+ const bands = this.rgb
504
+ <span class="branch-0 cbranch-no" title="branch not covered" > ? await usedImage.readRGB({ window })</span>
505
+ : await usedImage.readRasters({ window, fillValue: this.nodata })
506
+ const data = this.rgb <span class="branch-0 cbranch-no" title="branch not covered" >? mergeRgb(bands) </span>: bands[0]
507
+ &nbsp;
508
+ if (rx &lt; 0) <span class="branch-0 cbranch-no" title="branch not covered" >[left, right] = [right, left]</span>
509
+ if (ry &lt; 0) [bottom, top] = [top, bottom]
510
+ &nbsp;
511
+ const dataBbox = [
512
+ oy + (bottom * ry),
513
+ ox + (left * rx),
514
+ oy + (top * ry),
515
+ ox + (right * rx)
516
+ ]
517
+ &nbsp;
518
+ return new Grid1D(
519
+ sourceKey,
520
+ dataBbox, [bands.height, bands.width],
521
+ data, true, SortOrder.DESCENDING, SortOrder.ASCENDING,
522
+ this.nodata, this.converter)
523
+ }
524
+ }
525
525
  &nbsp;</pre></td></tr></table></pre>
526
526
 
527
527
  <div class='push'></div><!-- for sticky footer -->
@@ -529,7 +529,7 @@
529
529
  <div class='footer quiet pad2 space-top1 center small'>
530
530
  Code coverage generated by
531
531
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
532
- at 2025-02-18T09:52:45.637Z
532
+ at 2025-07-24T10:00:20.508Z
533
533
  </div>
534
534
  <script src="../../prettify.js"></script>
535
535
  <script>