@kalisio/kdk 1.5.0 → 1.7.0

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 (487) hide show
  1. package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  2. package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  3. package/.nyc_output/{058fc679-d60a-4501-ac04-71171e5200b8.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
  4. package/.nyc_output/{8b1830fa-932e-4a61-9837-4a5b18f83ea9.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
  5. package/.nyc_output/{afd2d144-3570-4858-b94a-b523dbd023dd.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
  6. package/.nyc_output/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  7. package/.nyc_output/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  8. package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  9. package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  10. package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
  11. package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
  12. package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
  13. package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  14. package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/.travis.test.sh +1 -1
  17. package/CHANGELOG.md +107 -11
  18. package/coverage/core/api/application.js.html +323 -245
  19. package/coverage/core/api/authentication.js.html +1 -1
  20. package/coverage/core/api/db.js.html +108 -108
  21. package/coverage/core/api/hooks/hooks.account.js.html +1 -1
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +1 -1
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +21 -6
  24. package/coverage/core/api/hooks/hooks.devices.js.html +1 -1
  25. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  26. package/coverage/core/api/hooks/hooks.logger.js.html +1 -1
  27. package/coverage/core/api/hooks/hooks.model.js.html +1 -1
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +1 -1
  30. package/coverage/core/api/hooks/hooks.query.js.html +114 -48
  31. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  32. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  33. package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
  34. package/coverage/core/api/hooks/hooks.users.js.html +1 -1
  35. package/coverage/core/api/hooks/index.html +12 -12
  36. package/coverage/core/api/hooks/index.js.html +1 -1
  37. package/coverage/core/api/index.html +34 -34
  38. package/coverage/core/api/index.js.html +26 -26
  39. package/coverage/core/api/marshall.js.html +1 -1
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
  45. package/coverage/core/api/oauth2-handler.js.html +1 -1
  46. package/coverage/core/api/oauth2-verifier.js.html +1 -1
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +1 -1
  49. package/coverage/core/api/services/account/index.html +1 -1
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +31 -7
  52. package/coverage/core/api/services/authorisations/index.html +9 -9
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +11 -11
  62. package/coverage/core/api/services/index.js.html +66 -66
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +1 -1
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +1 -1
  79. package/coverage/core/common/errors.js.html +1 -1
  80. package/coverage/core/common/index.html +7 -7
  81. package/coverage/core/common/index.js.html +1 -1
  82. package/coverage/core/common/permissions.js.html +81 -51
  83. package/coverage/index.html +39 -39
  84. package/coverage/lcov-report/core/api/application.js.html +323 -245
  85. package/coverage/lcov-report/core/api/authentication.js.html +1 -1
  86. package/coverage/lcov-report/core/api/db.js.html +108 -108
  87. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
  88. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +1 -1
  89. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +21 -6
  90. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +1 -1
  91. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  92. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +1 -1
  93. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +1 -1
  94. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  95. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +1 -1
  96. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +114 -48
  97. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  98. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  99. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
  100. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +1 -1
  101. package/coverage/lcov-report/core/api/hooks/index.html +12 -12
  102. package/coverage/lcov-report/core/api/hooks/index.js.html +1 -1
  103. package/coverage/lcov-report/core/api/index.html +34 -34
  104. package/coverage/lcov-report/core/api/index.js.html +26 -26
  105. package/coverage/lcov-report/core/api/marshall.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  107. package/coverage/lcov-report/core/api/models/index.html +1 -1
  108. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  110. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
  111. package/coverage/lcov-report/core/api/oauth2-handler.js.html +1 -1
  112. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  114. package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
  115. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +31 -7
  118. package/coverage/lcov-report/core/api/services/authorisations/index.html +9 -9
  119. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  126. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  127. package/coverage/lcov-report/core/api/services/index.html +11 -11
  128. package/coverage/lcov-report/core/api/services/index.js.html +66 -66
  129. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  135. package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  138. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  140. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  142. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  144. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
  145. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  146. package/coverage/lcov-report/core/common/index.html +7 -7
  147. package/coverage/lcov-report/core/common/index.js.html +1 -1
  148. package/coverage/lcov-report/core/common/permissions.js.html +81 -51
  149. package/coverage/lcov-report/index.html +39 -39
  150. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  151. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1 -1
  152. package/coverage/lcov-report/map/api/hooks/index.html +1 -1
  153. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  154. package/coverage/lcov-report/map/api/index.html +1 -1
  155. package/coverage/lcov-report/map/api/index.js.html +1 -1
  156. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  157. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  158. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  159. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
  160. package/coverage/lcov-report/map/api/models/index.html +7 -7
  161. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  168. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  169. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  171. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  172. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  173. package/coverage/lcov-report/map/api/services/index.html +1 -1
  174. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  175. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  176. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  177. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  179. package/coverage/lcov-report/map/common/index.html +1 -1
  180. package/coverage/lcov-report/map/common/index.js.html +1 -1
  181. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  182. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  183. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  184. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  185. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  186. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  190. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  192. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  193. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  194. package/coverage/lcov.info +948 -769
  195. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  196. package/coverage/map/api/hooks/hooks.query.js.html +1 -1
  197. package/coverage/map/api/hooks/index.html +1 -1
  198. package/coverage/map/api/hooks/index.js.html +1 -1
  199. package/coverage/map/api/index.html +1 -1
  200. package/coverage/map/api/index.js.html +1 -1
  201. package/coverage/map/api/marshall.js.html +1 -1
  202. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  203. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  204. package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
  205. package/coverage/map/api/models/index.html +7 -7
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  208. package/coverage/map/api/services/alerts/index.html +1 -1
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  210. package/coverage/map/api/services/catalog/index.html +1 -1
  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 +1 -1
  214. package/coverage/map/api/services/features/index.html +1 -1
  215. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  216. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  217. package/coverage/map/api/services/geocoder/index.html +1 -1
  218. package/coverage/map/api/services/index.html +1 -1
  219. package/coverage/map/api/services/index.js.html +1 -1
  220. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  221. package/coverage/map/common/errors.js.html +1 -1
  222. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  223. package/coverage/map/common/grid.js.html +1 -1
  224. package/coverage/map/common/index.html +1 -1
  225. package/coverage/map/common/index.js.html +1 -1
  226. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  227. package/coverage/map/common/moment-utils.js.html +1 -1
  228. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  229. package/coverage/map/common/opendap-utils.js.html +1 -1
  230. package/coverage/map/common/permissions.js.html +1 -1
  231. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  232. package/coverage/map/common/tms-utils.js.html +1 -1
  233. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  234. package/coverage/map/common/wcs-utils.js.html +1 -1
  235. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  236. package/coverage/map/common/wfs-utils.js.html +1 -1
  237. package/coverage/map/common/wms-utils.js.html +1 -1
  238. package/coverage/map/common/wmts-utils.js.html +1 -1
  239. package/extras/tours/map/catalog-panel.js +61 -10
  240. package/extras/tours/map/create-view.js +25 -0
  241. package/extras/tours/map/fab.js +10 -1
  242. package/extras/tours/map/navigation-bar.js +56 -10
  243. package/lib/core/api/application.js +44 -10
  244. package/lib/core/api/application.js.map +1 -1
  245. package/lib/core/api/hooks/hooks.authorisations.js +8 -1
  246. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  247. package/lib/core/api/hooks/hooks.query.js +135 -100
  248. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  249. package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
  250. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  251. package/lib/core/api/services/pusher/pusher.service.js +40 -16
  252. package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
  253. package/lib/core/client/components/chart/KChart.vue +115 -0
  254. package/lib/core/client/components/chart/KStatsChart.vue +76 -0
  255. package/lib/core/client/components/chart/index.js +20 -0
  256. package/lib/core/client/components/chart/index.js.map +1 -0
  257. package/lib/core/client/components/collection/KColumn.vue +29 -28
  258. package/lib/core/client/components/collection/KFilter.vue +103 -72
  259. package/lib/core/client/components/collection/KHistoryEntry.vue +1 -1
  260. package/lib/core/client/components/collection/KItem.vue +4 -4
  261. package/lib/core/client/components/editor/KModalEditor.vue +3 -4
  262. package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
  263. package/lib/core/client/components/form/KChipsField.vue +4 -4
  264. package/lib/core/client/components/form/KFileField.vue +13 -6
  265. package/lib/core/client/components/form/KRoleField.vue +5 -2
  266. package/lib/core/client/components/form/KTextField.vue +12 -2
  267. package/lib/core/client/components/form/KUnitField.vue +57 -0
  268. package/lib/core/client/components/form/KUrlField.vue +1 -1
  269. package/lib/core/client/components/form/KView.vue +1 -1
  270. package/lib/core/client/components/frame/KAction.vue +41 -7
  271. package/lib/core/client/components/frame/KBlock.vue +7 -7
  272. package/lib/core/client/components/frame/KContent.vue +1 -1
  273. package/lib/core/client/components/frame/KModal.vue +66 -20
  274. package/lib/core/client/components/frame/KOpener.vue +1 -1
  275. package/lib/core/client/components/frame/KPanel.vue +8 -7
  276. package/lib/core/client/components/frame/KPopupAction.vue +6 -0
  277. package/lib/core/client/components/frame/KScreen.vue +1 -1
  278. package/lib/core/client/components/frame/KScrollArea.vue +65 -0
  279. package/lib/core/client/components/frame/KStamp.vue +4 -2
  280. package/lib/core/client/components/frame/index.js +6 -6
  281. package/lib/core/client/components/frame/index.js.map +1 -1
  282. package/lib/core/client/components/input/KColorChooser.vue +3 -5
  283. package/lib/core/client/components/input/KIconChooser.vue +41 -40
  284. package/lib/core/client/components/input/KPalette.vue +1 -1
  285. package/lib/core/client/components/input/index.js +14 -4
  286. package/lib/core/client/components/input/index.js.map +1 -1
  287. package/lib/core/client/components/layout/KAbout.vue +47 -49
  288. package/lib/core/client/components/layout/KFab.vue +1 -1
  289. package/lib/core/client/components/layout/KLayout.vue +10 -2
  290. package/lib/core/client/components/layout/KPage.vue +19 -18
  291. package/lib/core/client/components/layout/KTour.vue +5 -3
  292. package/lib/core/client/components/layout/KWindow.vue +211 -59
  293. package/lib/core/client/components/media/KMediaBrowser.vue +6 -6
  294. package/lib/core/client/components/menu/KMenu.vue +13 -5
  295. package/lib/core/client/components/menu/KRadialFab.vue +22 -24
  296. package/lib/core/client/components/menu/KRadialFabItem.vue +17 -18
  297. package/lib/core/client/components/team/KAddMember.vue +1 -1
  298. package/lib/core/client/components/team/KChangeRole.vue +11 -14
  299. package/lib/core/client/components/team/KGroupCard.vue +12 -5
  300. package/lib/core/client/components/team/KJoinGroup.vue +22 -22
  301. package/lib/core/client/components/team/KMemberCard.vue +19 -4
  302. package/lib/core/client/components/time/KAbsoluteTimeRange.vue +190 -0
  303. package/lib/core/client/components/time/KRelativeTimeRanges.vue +192 -0
  304. package/lib/core/client/components/time/index.js +20 -0
  305. package/lib/core/client/components/time/index.js.map +1 -0
  306. package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
  307. package/lib/core/client/i18n/core_en.json +99 -17
  308. package/lib/core/client/i18n/core_fr.json +94 -18
  309. package/lib/core/client/index.js +16 -3
  310. package/lib/core/client/index.js.map +1 -1
  311. package/lib/core/client/mixins/mixin.base-collection.js +11 -1
  312. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  313. package/lib/core/client/mixins/mixin.base-widget.js +26 -12
  314. package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
  315. package/lib/core/client/reader.js +46 -15
  316. package/lib/core/client/reader.js.map +1 -1
  317. package/lib/core/client/readers/reader.csv.js +33 -22
  318. package/lib/core/client/readers/reader.csv.js.map +1 -1
  319. package/lib/core/client/readers/reader.json.js +31 -20
  320. package/lib/core/client/readers/reader.json.js.map +1 -1
  321. package/lib/core/client/services/index.js +16 -4
  322. package/lib/core/client/services/index.js.map +1 -1
  323. package/lib/core/client/services/local-settings.service.js +10 -4
  324. package/lib/core/client/services/local-settings.service.js.map +1 -1
  325. package/lib/core/client/time.js +29 -18
  326. package/lib/core/client/time.js.map +1 -1
  327. package/lib/core/client/units.js +207 -0
  328. package/lib/core/client/units.js.map +1 -0
  329. package/lib/core/client/utils.js +11 -0
  330. package/lib/core/client/utils.js.map +1 -1
  331. package/lib/core/common/permissions.js +44 -34
  332. package/lib/core/common/permissions.js.map +1 -1
  333. package/lib/core/common/schemas/settings.update.json +86 -4
  334. package/lib/map/api/hooks/hooks.catalog.js +20 -0
  335. package/lib/map/api/hooks/hooks.catalog.js.map +1 -1
  336. package/lib/map/api/models/catalog.model.mongodb.js +6 -1
  337. package/lib/map/api/models/catalog.model.mongodb.js.map +1 -1
  338. package/lib/map/api/models/features.model.mongodb.js +8 -0
  339. package/lib/map/api/models/features.model.mongodb.js.map +1 -1
  340. package/lib/map/api/services/catalog/catalog.hooks.js +3 -1
  341. package/lib/map/api/services/catalog/catalog.hooks.js.map +1 -1
  342. package/lib/map/client/components/KCaptureToolbar.vue +2 -7
  343. package/lib/map/client/components/KColorLegend.vue +38 -25
  344. package/lib/map/client/components/KFeaturesChart.vue +84 -114
  345. package/lib/map/client/components/KFeaturesFilter.vue +37 -38
  346. package/lib/map/client/components/KFeaturesTable.vue +15 -16
  347. package/lib/map/client/components/KLayerStyleEditor.vue +1 -1
  348. package/lib/map/client/components/KLayerStyleForm.vue +123 -51
  349. package/lib/map/client/components/KLevelSlider.vue +30 -29
  350. package/lib/map/client/components/KLocationMap.vue +2 -2
  351. package/lib/map/client/components/KMeasureTool.vue +49 -28
  352. package/lib/map/client/components/KPositionIndicator.vue +4 -4
  353. package/lib/map/client/components/KTimeline.vue +30 -35
  354. package/lib/map/client/components/KTimezoneMap.vue +156 -0
  355. package/lib/map/client/components/KUrlLegend.vue +11 -10
  356. package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
  357. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  358. package/lib/map/client/components/catalog/KCatalogLayersPanel.vue +56 -0
  359. package/lib/map/client/components/catalog/KCreateView.vue +91 -0
  360. package/lib/map/client/components/catalog/KLayerCategories.vue +5 -3
  361. package/lib/map/client/components/catalog/{KCatalog.vue → KLayersPanel.vue} +23 -22
  362. package/lib/map/client/components/catalog/KLayersSelector.vue +3 -3
  363. package/lib/map/client/components/catalog/KUserLayersPanel.vue +40 -0
  364. package/lib/map/client/components/catalog/KViewSelector.vue +46 -0
  365. package/lib/map/client/components/catalog/KViewsPanel.vue +110 -0
  366. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +5 -14
  367. package/lib/map/client/components/form/KTimezoneField.vue +135 -0
  368. package/lib/map/client/components/widget/KElevationProfile.vue +488 -0
  369. package/lib/map/client/components/widget/KInformationBox.vue +53 -37
  370. package/lib/map/client/components/widget/KMapillaryViewer.vue +26 -16
  371. package/lib/map/client/components/widget/KTimeSeries.vue +283 -358
  372. package/lib/map/client/i18n/map_en.json +73 -56
  373. package/lib/map/client/i18n/map_fr.json +75 -58
  374. package/lib/map/client/init.js +4 -3
  375. package/lib/map/client/init.js.map +1 -1
  376. package/lib/map/client/leaflet/GradientPath.js +40 -19
  377. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  378. package/lib/map/client/leaflet/TiledFeatureLayer.js +527 -93
  379. package/lib/map/client/leaflet/TiledFeatureLayer.js.map +1 -1
  380. package/lib/map/client/leaflet/TiledMeshLayer.js +58 -35
  381. package/lib/map/client/leaflet/TiledMeshLayer.js.map +1 -1
  382. package/lib/map/client/leaflet/utils.js +44 -3
  383. package/lib/map/client/leaflet/utils.js.map +1 -1
  384. package/lib/map/client/mixins/globe/mixin.base-globe.js +16 -1
  385. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  386. package/lib/map/client/mixins/globe/mixin.file-layers.js +12 -2
  387. package/lib/map/client/mixins/globe/mixin.file-layers.js.map +1 -1
  388. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +23 -27
  389. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  390. package/lib/map/client/mixins/globe/mixin.popup.js +7 -3
  391. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  392. package/lib/map/client/mixins/globe/mixin.style.js +8 -4
  393. package/lib/map/client/mixins/globe/mixin.style.js.map +1 -1
  394. package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -3
  395. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  396. package/lib/map/client/mixins/index.js +23 -18
  397. package/lib/map/client/mixins/index.js.map +1 -1
  398. package/lib/map/client/mixins/map/mixin.base-map.js +32 -8
  399. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  400. package/lib/map/client/mixins/map/mixin.edit-layers.js +8 -4
  401. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  402. package/lib/map/client/mixins/map/mixin.file-layers.js +13 -5
  403. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  404. package/lib/map/client/mixins/map/mixin.geojson-layers.js +65 -14
  405. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  406. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +6 -1
  407. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  408. package/lib/map/client/mixins/map/mixin.popup.js +4 -2
  409. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  410. package/lib/map/client/mixins/map/mixin.style.js +9 -5
  411. package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
  412. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +4 -11
  413. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  414. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +0 -11
  415. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  416. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -2
  417. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  418. package/lib/map/client/mixins/mixin.activity.js +150 -150
  419. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  420. package/lib/map/client/mixins/mixin.catalog-panel.js +36 -0
  421. package/lib/map/client/mixins/mixin.catalog-panel.js.map +1 -0
  422. package/lib/map/client/mixins/mixin.feature-selection.js +17 -8
  423. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  424. package/lib/map/client/mixins/mixin.feature-service.js +36 -16
  425. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  426. package/lib/map/client/mixins/mixin.infobox.js +1 -1
  427. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  428. package/lib/map/client/mixins/mixin.levels.js +26 -12
  429. package/lib/map/client/mixins/mixin.levels.js.map +1 -1
  430. package/lib/map/client/mixins/mixin.style.js +1 -0
  431. package/lib/map/client/mixins/mixin.style.js.map +1 -1
  432. package/lib/map/client/mixins/mixin.weacast.js +22 -28
  433. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  434. package/lib/map/client/pixi-utils.js +8 -177
  435. package/lib/map/client/pixi-utils.js.map +1 -1
  436. package/lib/map/client/readers/index.js +12 -0
  437. package/lib/map/client/readers/index.js.map +1 -1
  438. package/lib/map/client/readers/reader.geojson.js +62 -34
  439. package/lib/map/client/readers/reader.geojson.js.map +1 -1
  440. package/lib/map/client/readers/reader.gpx.js +32 -21
  441. package/lib/map/client/readers/reader.gpx.js.map +1 -1
  442. package/lib/map/client/readers/reader.kml.js +32 -21
  443. package/lib/map/client/readers/reader.kml.js.map +1 -1
  444. package/lib/map/client/readers/reader.shp.js +116 -0
  445. package/lib/map/client/readers/reader.shp.js.map +1 -0
  446. package/lib/map/client/utils.js +1 -8
  447. package/lib/map/client/utils.js.map +1 -1
  448. package/lib/map/common/grid.js +131 -0
  449. package/lib/map/common/grid.js.map +1 -1
  450. package/lib/map/common/index.js +22 -11
  451. package/lib/map/common/index.js.map +1 -1
  452. package/lib/map/common/meteo-model-grid-source.js +5 -2
  453. package/lib/map/common/meteo-model-grid-source.js.map +1 -1
  454. package/lib/map/common/time-based-grid-source.js +5 -2
  455. package/lib/map/common/time-based-grid-source.js.map +1 -1
  456. package/lib/test/client/core/account.js +1 -1
  457. package/lib/test/client/core/account.js.map +1 -1
  458. package/lib/test/client/core/collection.js +31 -13
  459. package/lib/test/client/core/collection.js.map +1 -1
  460. package/lib/test/client/core/layout.js +137 -49
  461. package/lib/test/client/core/layout.js.map +1 -1
  462. package/lib/test/client/core/screens.js +1 -1
  463. package/lib/test/client/core/screens.js.map +1 -1
  464. package/lib/test/client/core/utils.js +89 -22
  465. package/lib/test/client/core/utils.js.map +1 -1
  466. package/lib/test/client/map/catalog.js +134 -41
  467. package/lib/test/client/map/catalog.js.map +1 -1
  468. package/lib/test/client/map/controls.js +7 -4
  469. package/lib/test/client/map/controls.js.map +1 -1
  470. package/lib/test/client/map/index.js +12 -0
  471. package/lib/test/client/map/index.js.map +1 -1
  472. package/lib/test/client/map/utils.js +67 -0
  473. package/lib/test/client/map/utils.js.map +1 -0
  474. package/package.json +5 -6
  475. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  476. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  477. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +0 -1
  478. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  479. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  480. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +0 -1
  481. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +0 -1
  482. package/extras/tours/map/favorite-views.js +0 -53
  483. package/lib/core/client/components/frame/KChart.vue +0 -60
  484. package/lib/core/client/components/input/KCodeInput.vue +0 -50
  485. package/lib/core/client/components/input/KTimeRangeChooser.vue +0 -109
  486. package/lib/core/client/components/time/KTimeRange.vue +0 -144
  487. package/lib/map/client/components/KFavoriteViews.vue +0 -217
@@ -3,11 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RawValueHook = exports.ColorMapHook = exports.WEBGL_FUNCTIONS = exports.toHalf = undefined;
6
+ exports.WEBGL_FUNCTIONS = undefined;
7
7
  exports.buildShaderCode = buildShaderCode;
8
8
  exports.buildColorMapShaderCodeFromDomain = buildColorMapShaderCodeFromDomain;
9
9
  exports.buildColorMapShaderCodeFromClasses = buildColorMapShaderCodeFromClasses;
10
- exports.buildPixiMeshFromGrid = buildPixiMeshFromGrid;
11
10
 
12
11
  var _lodash = require('lodash');
13
12
 
@@ -30,53 +29,6 @@ PIXI.settings.PREFER_ENV = PIXI.ENV.WEBGL2;
30
29
  // to use PIXI in Chrome Headless mode
31
30
  PIXI.settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false;
32
31
 
33
- const toHalf = exports.toHalf = function () {
34
- var floatView = new Float32Array(1);
35
- var int32View = new Int32Array(floatView.buffer);
36
-
37
- /* This method is faster than the OpenEXR implementation (very often
38
- * used, eg. in Ogre), with the additional benefit of rounding, inspired
39
- * by James Tursa?s half-precision code. */
40
- return function toHalf(val) {
41
- floatView[0] = val;
42
- var x = int32View[0];
43
-
44
- var bits = x >> 16 & 0x8000; /* Get the sign */
45
- var m = x >> 12 & 0x07ff; /* Keep one extra bit for rounding */
46
- var e = x >> 23 & 0xff; /* Using int is faster here */
47
-
48
- /* If zero, or denormal, or exponent underflows too much for a denormal
49
- * half, return signed zero. */
50
- if (e < 103) {
51
- return bits;
52
- }
53
-
54
- /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */
55
- if (e > 142) {
56
- bits |= 0x7c00;
57
- /* If exponent was 0xff and one mantissa bit was set, it means NaN,
58
- * not Inf, so make sure we set one mantissa bit too. */
59
- bits |= (e === 255 ? 0 : 1) && x & 0x007fffff;
60
- return bits;
61
- }
62
-
63
- /* If exponent underflows but not too much, return a denormal */
64
- if (e < 113) {
65
- m |= 0x0800;
66
- /* Extra rounding may overflow and set mantissa to 0 and exponent
67
- * to 1, which is OK. */
68
- bits |= (m >> 114 - e) + (m >> 113 - e & 1);
69
- return bits;
70
- }
71
-
72
- bits |= e - 112 << 10 | m >> 1;
73
- /* Extra rounding. An overflow will set mantissa to 0 and increment
74
- * the exponent, which is OK. */
75
- bits += m & 1;
76
- return bits;
77
- };
78
- }();
79
-
80
32
  const WEBGL_FUNCTIONS = exports.WEBGL_FUNCTIONS = {
81
33
  latLonToWebMercator: `vec2 latLonToWebMercator(vec3 latLonZoom) {
82
34
  const float d = 3.14159265359 / 180.0;
@@ -109,20 +61,20 @@ const WEBGL_FUNCTIONS = exports.WEBGL_FUNCTIONS = {
109
61
  };PIXI.TYPES.HALF_FLOAT_VERTEX = 0x140b;
110
62
 
111
63
  function buildShaderCode(features) {
112
- let vtxCode = '';
113
- let frgCode = '';
64
+ let vtxCode = '#version 300 es';
65
+ let frgCode = '#version 300 es\nprecision highp float;';
114
66
  // attributes, uniforms and varyings
115
- vtxCode += '/// attributes, uniforms and varyings\n';
116
- frgCode += '/// uniforms and varyings\n';
67
+ vtxCode += '\n\n/// attributes, uniforms and varyings\n';
68
+ frgCode += '\n\n/// uniforms and varyings\nout vec4 outColor;\n';
117
69
  for (const feat of features) {
118
70
  let addVtx = '';
119
71
  let addFrg = '';
120
- for (const v of _lodash2.default.get(feat, 'vertex.attributes', [])) addVtx += `attribute ${v};\n`;
72
+ for (const v of _lodash2.default.get(feat, 'vertex.attributes', [])) addVtx += `in ${v};\n`;
121
73
  for (const v of _lodash2.default.get(feat, 'vertex.uniforms', [])) addVtx += `uniform ${v};\n`;
122
74
  for (const v of _lodash2.default.get(feat, 'fragment.uniforms', [])) addFrg += `uniform ${v};\n`;
123
75
  for (const v of _lodash2.default.get(feat, 'varyings', [])) {
124
- addVtx += `varying ${v};\n`;
125
- addFrg += `varying ${v};\n`;
76
+ addVtx += `out ${v};\n`;
77
+ addFrg += `in ${v};\n`;
126
78
  }
127
79
 
128
80
  if (addVtx) vtxCode += `// ${feat.name} ------\n${addVtx}`;
@@ -268,125 +220,4 @@ function buildColorMapShaderCodeFromClasses(breaks, colors, invertScale) {
268
220
 
269
221
  return buildColorMapShaderCode(thresholds, mapping, false);
270
222
  }
271
-
272
- class ColorMapHook {
273
- constructor(colormap, attribute) {
274
- this.colormap = colormap;
275
- this.attribute = attribute;
276
- }
277
-
278
- initialize(grid) {
279
- this.grid = grid;
280
- const dims = grid.getDimensions();
281
- const latCount = dims[0];
282
- const lonCount = dims[1];
283
- this.color = new Uint8Array(4 * latCount * lonCount);
284
- }
285
-
286
- iterate(vidx, ilat, ilon) {
287
- const val = this.grid.getValue(ilat, ilon);
288
- const mapped = this.colormap(val);
289
- const rgb = mapped.rgb();
290
- this.color[vidx * 4] = rgb[0];
291
- this.color[vidx * 4 + 1] = rgb[1];
292
- this.color[vidx * 4 + 2] = rgb[2];
293
- this.color[vidx * 4 + 3] = 255;
294
- }
295
-
296
- finalize(geometry) {
297
- geometry.addAttribute(this.attribute, this.color, 4, true, PIXI.TYPES.UNSIGNED_BYTE);
298
- }
299
- }
300
-
301
- exports.ColorMapHook = ColorMapHook;
302
- class RawValueHook {
303
- constructor(attribute) {
304
- this.attribute = attribute;
305
- }
306
-
307
- initialize(grid) {
308
- this.grid = grid;
309
- const dims = grid.getDimensions();
310
- const latCount = dims[0];
311
- const lonCount = dims[1];
312
- this.value = new Float32Array(latCount * lonCount);
313
- }
314
-
315
- iterate(vidx, ilat, ilon) {
316
- const val = this.grid.getValue(ilat, ilon);
317
- this.value[vidx] = val;
318
- }
319
-
320
- finalize(geometry) {
321
- geometry.addAttribute(this.attribute, this.value, 1, false, PIXI.TYPES.FLOAT);
322
- }
323
- }
324
-
325
- exports.RawValueHook = RawValueHook;
326
- function buildPixiMeshFromGrid(grid, hooks, iminlat, iminlon, imaxlat, imaxlon) {
327
- const latCount = 1 + imaxlat - iminlat;
328
- const lonCount = 1 + imaxlon - iminlon;
329
-
330
- // const position = new Float32Array(2 * latCount * lonCount)
331
- const position = new Uint16Array(2 * latCount * lonCount);
332
- for (const hook of hooks) {
333
- hook.initialize(grid);
334
- }
335
-
336
- const minLat = grid.getLat(iminlat);
337
- const minLon = grid.getLon(iminlon);
338
- const maxLat = grid.getLat(imaxlat);
339
- const maxLon = grid.getLon(imaxlon);
340
-
341
- const deltaLat = maxLat - minLat;
342
- const deltaLon = maxLon - minLon;
343
-
344
- // fill attributes
345
- let vidx = 0;
346
- for (let ilon = iminlon; ilon <= imaxlon; ++ilon) {
347
- const lon = grid.getLon(ilon);
348
- for (let ilat = iminlat; ilat <= imaxlat; ++ilat) {
349
- const lat = grid.getLat(ilat);
350
-
351
- position[vidx * 2] = toHalf((lat - minLat) / deltaLat);
352
- position[vidx * 2 + 1] = toHalf((lon - minLon) / deltaLon);
353
- /*
354
- position[vidx * 2] = lat
355
- position[vidx * 2 + 1] = lon
356
- */
357
-
358
- for (const hook of hooks) {
359
- hook.iterate(vidx, ilat, ilon);
360
- }
361
-
362
- ++vidx;
363
- }
364
- }
365
-
366
- // fill index
367
- let iidx = 0;
368
- // choose 16 or 32 bit index
369
- const maxIndex = (lonCount - 1) * latCount + (latCount - 1);
370
- const index = maxIndex > 65534 ? new Uint32Array((lonCount - 1) * (latCount * 2 + 1) - 1) : new Uint16Array((lonCount - 1) * (latCount * 2 + 1) - 1);
371
- const restart = maxIndex > 65534 ? 4294967295 : 65535;
372
- for (let i = 0; i < lonCount - 1; ++i) {
373
- for (let j = 0; j < latCount; ++j) {
374
- index[iidx++] = j + i * latCount;
375
- index[iidx++] = j + (i + 1) * latCount;
376
- }
377
- if (i !== lonCount - 2) {
378
- index[iidx++] = restart;
379
- }
380
- }
381
-
382
- const geometry = new PIXI.Geometry().addAttribute('in_layerPosition', position, 2, false, PIXI.TYPES.HALF_FLOAT_VERTEX)
383
- // .addAttribute('position', position, 2)
384
- .addIndex(index);
385
-
386
- for (const hook of hooks) {
387
- hook.finalize(geometry);
388
- }
389
-
390
- return geometry;
391
- }
392
223
  //# sourceMappingURL=pixi-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../map/client/pixi-utils.js"],"names":["buildShaderCode","buildColorMapShaderCodeFromDomain","buildColorMapShaderCodeFromClasses","buildPixiMeshFromGrid","PIXI","settings","PREFER_ENV","ENV","WEBGL2","FAIL_IF_MAJOR_PERFORMANCE_CAVEAT","toHalf","floatView","Float32Array","int32View","Int32Array","buffer","val","x","bits","m","e","WEBGL_FUNCTIONS","latLonToWebMercator","unpack1","unpack2","TYPES","HALF_FLOAT_VERTEX","features","vtxCode","frgCode","feat","addVtx","addFrg","v","_","get","name","vc","fc","buildColorMapShaderCode","thresholds","colors","interpolate","i","length","Error","code","join","threshold","t0","t1","dt","domain","invertScale","mapping","slice","step","push","reverse","breaks","ColorMapHook","constructor","colormap","attribute","initialize","grid","dims","getDimensions","latCount","lonCount","color","Uint8Array","iterate","vidx","ilat","ilon","getValue","mapped","rgb","finalize","geometry","addAttribute","UNSIGNED_BYTE","RawValueHook","value","FLOAT","hooks","iminlat","iminlon","imaxlat","imaxlon","position","Uint16Array","hook","minLat","getLat","minLon","getLon","maxLat","maxLon","deltaLat","deltaLon","lon","lat","iidx","maxIndex","index","Uint32Array","restart","j","Geometry","addIndex"],"mappings":";;;;;;QA2FgBA,e,GAAAA,e;QAwGAC,iC,GAAAA,iC;QAkCAC,kC,GAAAA,kC;QA2EAC,qB,GAAAA,qB;;AAhThB;;;;AACA;;IAAYC,I;;;;;;AAEZ;AACA;AACA;AACAA,KAAKC,QAAL,CAAcC,UAAd,GAA2BF,KAAKG,GAAL,CAASC,MAApC;;AAEA;AACA;AACAJ,KAAKC,QAAL,CAAcI,gCAAd,GAAiD,KAAjD;;AAEO,MAAMC,0BAAU,YAAY;AACjC,MAAIC,YAAY,IAAIC,YAAJ,CAAiB,CAAjB,CAAhB;AACA,MAAIC,YAAY,IAAIC,UAAJ,CAAeH,UAAUI,MAAzB,CAAhB;;AAEA;;;AAGA,SAAO,SAASL,MAAT,CAAiBM,GAAjB,EAAsB;AAC3BL,cAAU,CAAV,IAAeK,GAAf;AACA,QAAIC,IAAIJ,UAAU,CAAV,CAAR;;AAEA,QAAIK,OAAQD,KAAK,EAAN,GAAY,MAAvB,CAJ2B,CAIG;AAC9B,QAAIE,IAAKF,KAAK,EAAN,GAAY,MAApB,CAL2B,CAKA;AAC3B,QAAIG,IAAKH,KAAK,EAAN,GAAY,IAApB,CAN2B,CAMF;;AAEzB;;AAEA,QAAIG,IAAI,GAAR,EAAa;AACX,aAAOF,IAAP;AACD;;AAED;AACA,QAAIE,IAAI,GAAR,EAAa;AACXF,cAAQ,MAAR;AACA;;AAEAA,cAAQ,CAAEE,MAAM,GAAP,GAAc,CAAd,GAAkB,CAAnB,KAA0BH,IAAI,UAAtC;AACA,aAAOC,IAAP;AACD;;AAED;AACA,QAAIE,IAAI,GAAR,EAAa;AACXD,WAAK,MAAL;AACA;;AAEAD,cAAQ,CAACC,KAAM,MAAMC,CAAb,KAAqBD,KAAM,MAAMC,CAAb,GAAmB,CAAvC,CAAR;AACA,aAAOF,IAAP;AACD;;AAEDA,YAAUE,IAAI,GAAL,IAAa,EAAd,GAAqBD,KAAK,CAAlC;AACA;;AAEAD,YAAQC,IAAI,CAAZ;AACA,WAAOD,IAAP;AACD,GArCD;AAsCD,CA7CsB,EAAhB;;AA+CA,MAAMG,4CAAkB;AAC7BC,uBAAsB;;;;;;;;;;;;;;;;;;;EADO;AAqB7BC,WAAU;;EArBmB;AAwB7BC,WAAU;;;;AAKZ;AA7B+B,CAAxB,CA8BPpB,KAAKqB,KAAL,CAAWC,iBAAX,GAA+B,MAA/B;;AAEO,SAAS1B,eAAT,CAA0B2B,QAA1B,EAAoC;AACzC,MAAIC,UAAU,EAAd;AACA,MAAIC,UAAU,EAAd;AACA;AACAD,aAAW,yCAAX;AACAC,aAAW,6BAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,QAAII,SAAS,EAAb;AACA,QAAIC,SAAS,EAAb;AACA,SAAK,MAAMC,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,mBAAZ,EAAiC,EAAjC,CAAhB,EAAsDC,UAAW,aAAYE,CAAE,KAAzB;AACtD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,iBAAZ,EAA+B,EAA/B,CAAhB,EAAoDC,UAAW,WAAUE,CAAE,KAAvB;AACpD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,mBAAZ,EAAiC,EAAjC,CAAhB,EAAsDE,UAAW,WAAUC,CAAE,KAAvB;AACtD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,UAAZ,EAAwB,EAAxB,CAAhB,EAA6C;AAC3CC,gBAAW,WAAUE,CAAE,KAAvB;AACAD,gBAAW,WAAUC,CAAE,KAAvB;AACD;;AAED,QAAIF,MAAJ,EAAYH,WAAY,MAAKE,KAAKM,IAAK,YAAWL,MAAO,EAA7C;AACZ,QAAIC,MAAJ,EAAYH,WAAY,MAAKC,KAAKM,IAAK,YAAWJ,MAAO,EAA7C;AACb;AACD;AACAJ,aAAW,8BAAX;AACAC,aAAW,8BAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,SAAK,MAAMM,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,kBAAZ,EAAgC,EAAhC,CAAhB,EAAqDF,WAAY,MAAKE,KAAKM,IAAK,YAAWH,CAAE,IAAxC;AACrD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,oBAAZ,EAAkC,EAAlC,CAAhB,EAAuDD,WAAY,MAAKC,KAAKM,IAAK,YAAWH,CAAE,IAAxC;AACxD;AACD;AACAL,aAAW,4CAAX;AACAC,aAAW,8CAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,UAAMU,KAAKH,iBAAEC,GAAF,CAAML,IAAN,EAAY,aAAZ,CAAX;AACA,UAAMQ,KAAKJ,iBAAEC,GAAF,CAAML,IAAN,EAAY,eAAZ,CAAX;AACA,QAAIO,EAAJ,EAAQT,WAAY,MAAKE,KAAKM,IAAK,YAAWC,EAAG,IAAzC;AACR,QAAIC,EAAJ,EAAQT,WAAY,MAAKC,KAAKM,IAAK,YAAWE,EAAG,IAAzC;AACT;AACDV,aAAW,GAAX;AACAC,aAAW,GAAX;;AAEA,SAAO,CAACD,OAAD,EAAUC,OAAV,CAAP;AACD;;AAED,SAASU,uBAAT,CAAkCC,UAAlC,EAA8CC,MAA9C,EAAsDC,WAAtD,EAAmE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAA/B,EAAuC,EAAED,CAAzC,EAA4C;AAC1C,QAAIH,WAAWG,IAAI,CAAf,IAAoBH,WAAWG,CAAX,CAAxB,EAAuC;AACrC,YAAM,IAAIE,KAAJ,CAAU,+EAAV,CAAN;AACD;AACF;;AAED,MAAIC,OAAO,gCAAX;AACA,OAAK,IAAIH,IAAI,CAAb,EAAgBA,IAAIF,OAAOG,MAA3B,EAAmC,EAAED,CAArC,EAAwC;AACtCG,YAAS,qBAAoBH,CAAE,WAAUF,OAAOE,CAAP,EAAUI,IAAV,CAAe,GAAf,CAAoB,MAA7D;AACD;AACDD,UAAQ,IAAR;;AAEA,MAAI,CAACJ,WAAL,EAAkB;AAChB;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAAX,GAAoB,CAAxC,EAA2C,EAAED,CAA7C,EAAgD;AAC9C,YAAMK,YAAYR,WAAWG,CAAX,CAAlB;AACAG,cAAS,uBAAsBE,SAAU,oBAAmBL,IAAI,CAAE,OAAlE;AACD;AACD;AACAG,YAAS,iBAAgBL,OAAOG,MAAP,GAAgB,CAAE,KAA3C;AACD,GARD,MAQO;AACL;AACAE,YAAS,uBAAsBN,WAAW,CAAX,CAAc,yBAA7C;AACA,SAAK,IAAIG,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAA/B,EAAuC,EAAED,CAAzC,EAA4C;AAC1C,YAAMM,KAAKT,WAAWG,IAAI,CAAf,CAAX;AACA,YAAMO,KAAKV,WAAWG,CAAX,CAAX;AACA,YAAMQ,KAAKD,KAAKD,EAAhB;AACAH,cAAS,wBAAuBI,EAAG,iCAAgCD,EAAG,cAAaE,EAAG,sBAAqBR,IAAI,CAAE,UAASA,CAAE,WAA5H;AACD;AACD;AACAG,YAAS,iBAAgBL,OAAOG,MAAP,GAAgB,CAAE,KAA3C;AACD;AACDE,UAAQ,GAAR;AACA,SAAOA,IAAP;AACD;;AAEM,SAAS7C,iCAAT,CAA4CmD,MAA5C,EAAoDX,MAApD,EAA4DY,WAA5D,EAAyE;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAIb,aAAa,EAAjB;AACA,MAAIc,UAAUb,OAAOc,KAAP,EAAd;;AAEA,MAAIH,OAAOR,MAAP,KAAkBH,OAAOG,MAA7B,EAAqC;AACnCJ,iBAAaY,OAAOG,KAAP,EAAb;AACD,GAFD,MAEO,IAAIH,OAAOR,MAAP,GAAgBH,OAAOG,MAA3B,EAAmC;AACxC;AACA,UAAMY,OAAO,CAACJ,OAAOA,OAAOR,MAAP,GAAgB,CAAvB,IAA4BQ,OAAO,CAAP,CAA7B,KAA2CX,OAAOG,MAAP,GAAgB,CAA3D,CAAb;AACA,SAAK,IAAID,IAAI,CAAb,EAAgBA,IAAIF,OAAOG,MAA3B,EAAmC,EAAED,CAArC,EAAwC;AACtCH,iBAAWiB,IAAX,CAAgBL,OAAO,CAAP,IAAaT,IAAIa,IAAjC;AACD;AACF;;AAED;AACA,MAAIhB,WAAW,CAAX,IAAgBA,WAAWA,WAAWI,MAAX,GAAoB,CAA/B,CAApB,EAAuD;AACrDJ,iBAAaA,WAAWkB,OAAX,EAAb;AACAL,kBAAc,CAACA,WAAf;AACD;;AAED,MAAIA,WAAJ,EAAiB;AACfC,cAAUA,QAAQI,OAAR,EAAV;AACD;;AAED,SAAOnB,wBAAwBC,UAAxB,EAAoCc,OAApC,EAA6C,IAA7C,CAAP;AACD;;AAEM,SAASpD,kCAAT,CAA6CyD,MAA7C,EAAqDlB,MAArD,EAA6DY,WAA7D,EAA0E;AAC/E;AACA;AACA;AACA;AACA;;AAEA,MAAIb,aAAamB,OAAOJ,KAAP,EAAjB;AACA,MAAID,UAAUb,OAAOc,KAAP,EAAd;;AAEA;AACA,MAAIf,WAAW,CAAX,IAAgBA,WAAWA,WAAWI,MAAX,GAAoB,CAA/B,CAApB,EAAuD;AACrDJ,iBAAaA,WAAWkB,OAAX,EAAb;AACAL,kBAAc,CAACA,WAAf;AACD;;AAED,MAAIA,WAAJ,EAAiB;AACfC,cAAUA,QAAQI,OAAR,EAAV;AACD;;AAED,SAAOnB,wBAAwBC,UAAxB,EAAoCc,OAApC,EAA6C,KAA7C,CAAP;AACD;;AAEM,MAAMM,YAAN,CAAmB;AACxBC,cAAaC,QAAb,EAAuBC,SAAvB,EAAkC;AAChC,SAAKD,QAAL,GAAgBA,QAAhB;AACA,SAAKC,SAAL,GAAiBA,SAAjB;AACD;;AAEDC,aAAYC,IAAZ,EAAkB;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACA,UAAMC,OAAOD,KAAKE,aAAL,EAAb;AACA,UAAMC,WAAWF,KAAK,CAAL,CAAjB;AACA,UAAMG,WAAWH,KAAK,CAAL,CAAjB;AACA,SAAKI,KAAL,GAAa,IAAIC,UAAJ,CAAe,IAAIH,QAAJ,GAAeC,QAA9B,CAAb;AACD;;AAEDG,UAASC,IAAT,EAAeC,IAAf,EAAqBC,IAArB,EAA2B;AACzB,UAAM3D,MAAM,KAAKiD,IAAL,CAAUW,QAAV,CAAmBF,IAAnB,EAAyBC,IAAzB,CAAZ;AACA,UAAME,SAAS,KAAKf,QAAL,CAAc9C,GAAd,CAAf;AACA,UAAM8D,MAAMD,OAAOC,GAAP,EAAZ;AACA,SAAKR,KAAL,CAAWG,OAAO,CAAlB,IAAuBK,IAAI,CAAJ,CAAvB;AACA,SAAKR,KAAL,CAAWG,OAAO,CAAP,GAAW,CAAtB,IAA2BK,IAAI,CAAJ,CAA3B;AACA,SAAKR,KAAL,CAAWG,OAAO,CAAP,GAAW,CAAtB,IAA2BK,IAAI,CAAJ,CAA3B;AACA,SAAKR,KAAL,CAAWG,OAAO,CAAP,GAAW,CAAtB,IAA2B,GAA3B;AACD;;AAEDM,WAAUC,QAAV,EAAoB;AAClBA,aAASC,YAAT,CAAsB,KAAKlB,SAA3B,EAAsC,KAAKO,KAA3C,EAAkD,CAAlD,EAAqD,IAArD,EAA2DlE,KAAKqB,KAAL,CAAWyD,aAAtE;AACD;AA1BuB;;QAAbtB,Y,GAAAA,Y;AA6BN,MAAMuB,YAAN,CAAmB;AACxBtB,cAAaE,SAAb,EAAwB;AACtB,SAAKA,SAAL,GAAiBA,SAAjB;AACD;;AAEDC,aAAYC,IAAZ,EAAkB;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACA,UAAMC,OAAOD,KAAKE,aAAL,EAAb;AACA,UAAMC,WAAWF,KAAK,CAAL,CAAjB;AACA,UAAMG,WAAWH,KAAK,CAAL,CAAjB;AACA,SAAKkB,KAAL,GAAa,IAAIxE,YAAJ,CAAiBwD,WAAWC,QAA5B,CAAb;AACD;;AAEDG,UAASC,IAAT,EAAeC,IAAf,EAAqBC,IAArB,EAA2B;AACzB,UAAM3D,MAAM,KAAKiD,IAAL,CAAUW,QAAV,CAAmBF,IAAnB,EAAyBC,IAAzB,CAAZ;AACA,SAAKS,KAAL,CAAWX,IAAX,IAAmBzD,GAAnB;AACD;;AAED+D,WAAUC,QAAV,EAAoB;AAClBA,aAASC,YAAT,CAAsB,KAAKlB,SAA3B,EAAsC,KAAKqB,KAA3C,EAAkD,CAAlD,EAAqD,KAArD,EAA4DhF,KAAKqB,KAAL,CAAW4D,KAAvE;AACD;AApBuB;;QAAbF,Y,GAAAA,Y;AAuBN,SAAShF,qBAAT,CAAgC8D,IAAhC,EAAsCqB,KAAtC,EAA6CC,OAA7C,EAAsDC,OAAtD,EAA+DC,OAA/D,EAAwEC,OAAxE,EAAiF;AACtF,QAAMtB,WAAW,IAAIqB,OAAJ,GAAcF,OAA/B;AACA,QAAMlB,WAAW,IAAIqB,OAAJ,GAAcF,OAA/B;;AAEA;AACA,QAAMG,WAAW,IAAIC,WAAJ,CAAgB,IAAIxB,QAAJ,GAAeC,QAA/B,CAAjB;AACA,OAAK,MAAMwB,IAAX,IAAmBP,KAAnB,EAA0B;AAAEO,SAAK7B,UAAL,CAAgBC,IAAhB;AAAuB;;AAEnD,QAAM6B,SAAS7B,KAAK8B,MAAL,CAAYR,OAAZ,CAAf;AACA,QAAMS,SAAS/B,KAAKgC,MAAL,CAAYT,OAAZ,CAAf;AACA,QAAMU,SAASjC,KAAK8B,MAAL,CAAYN,OAAZ,CAAf;AACA,QAAMU,SAASlC,KAAKgC,MAAL,CAAYP,OAAZ,CAAf;;AAEA,QAAMU,WAAWF,SAASJ,MAA1B;AACA,QAAMO,WAAWF,SAASH,MAA1B;;AAEA;AACA,MAAIvB,OAAO,CAAX;AACA,OAAK,IAAIE,OAAOa,OAAhB,EAAyBb,QAAQe,OAAjC,EAA0C,EAAEf,IAA5C,EAAkD;AAChD,UAAM2B,MAAMrC,KAAKgC,MAAL,CAAYtB,IAAZ,CAAZ;AACA,SAAK,IAAID,OAAOa,OAAhB,EAAyBb,QAAQe,OAAjC,EAA0C,EAAEf,IAA5C,EAAkD;AAChD,YAAM6B,MAAMtC,KAAK8B,MAAL,CAAYrB,IAAZ,CAAZ;;AAEAiB,eAASlB,OAAO,CAAhB,IAAqB/D,OAAO,CAAC6F,MAAMT,MAAP,IAAiBM,QAAxB,CAArB;AACAT,eAASlB,OAAO,CAAP,GAAW,CAApB,IAAyB/D,OAAO,CAAC4F,MAAMN,MAAP,IAAiBK,QAAxB,CAAzB;AACA;;;;;AAKA,WAAK,MAAMR,IAAX,IAAmBP,KAAnB,EAA0B;AAAEO,aAAKrB,OAAL,CAAaC,IAAb,EAAmBC,IAAnB,EAAyBC,IAAzB;AAAgC;;AAE5D,QAAEF,IAAF;AACD;AACF;;AAED;AACA,MAAI+B,OAAO,CAAX;AACA;AACA,QAAMC,WAAW,CAACpC,WAAW,CAAZ,IAAiBD,QAAjB,IAA6BA,WAAW,CAAxC,CAAjB;AACA,QAAMsC,QAAQD,WAAW,KAAX,GACV,IAAIE,WAAJ,CAAgB,CAACtC,WAAW,CAAZ,KAAkBD,WAAW,CAAX,GAAe,CAAjC,IAAsC,CAAtD,CADU,GAEV,IAAIwB,WAAJ,CAAgB,CAACvB,WAAW,CAAZ,KAAkBD,WAAW,CAAX,GAAe,CAAjC,IAAsC,CAAtD,CAFJ;AAGA,QAAMwC,UAAUH,WAAW,KAAX,GAAmB,UAAnB,GAAgC,KAAhD;AACA,OAAK,IAAI9D,IAAI,CAAb,EAAgBA,IAAI0B,WAAW,CAA/B,EAAkC,EAAE1B,CAApC,EAAuC;AACrC,SAAK,IAAIkE,IAAI,CAAb,EAAgBA,IAAIzC,QAApB,EAA8B,EAAEyC,CAAhC,EAAmC;AACjCH,YAAMF,MAAN,IAAgBK,IAAIlE,IAAIyB,QAAxB;AACAsC,YAAMF,MAAN,IAAgBK,IAAI,CAAClE,IAAI,CAAL,IAAUyB,QAA9B;AACD;AACD,QAAIzB,MAAM0B,WAAW,CAArB,EAAwB;AAAEqC,YAAMF,MAAN,IAAgBI,OAAhB;AAAyB;AACpD;;AAED,QAAM5B,WAAW,IAAI5E,KAAK0G,QAAT,GACd7B,YADc,CACD,kBADC,EACmBU,QADnB,EAC6B,CAD7B,EACgC,KADhC,EACuCvF,KAAKqB,KAAL,CAAWC,iBADlD;AAEjB;AAFiB,GAGdqF,QAHc,CAGLL,KAHK,CAAjB;;AAKA,OAAK,MAAMb,IAAX,IAAmBP,KAAnB,EAA0B;AAAEO,SAAKd,QAAL,CAAcC,QAAd;AAAyB;;AAErD,SAAOA,QAAP;AACD","file":"pixi-utils.js","sourcesContent":["import _ from 'lodash'\r\nimport * as PIXI from 'pixi.js'\r\n\r\n// Force PIXI to use a WebGL2 context, even on android devices.\r\n// This is required as long as we use a PIXI version that\r\n// will prefer using a WebGL1 context on android devices.\r\nPIXI.settings.PREFER_ENV = PIXI.ENV.WEBGL2\r\n\r\n// Force PIXI to use WebGL even if the performances are not so good. This allows\r\n// to use PIXI in Chrome Headless mode\r\nPIXI.settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false\r\n\r\nexport const toHalf = (function () {\r\n var floatView = new Float32Array(1)\r\n var int32View = new Int32Array(floatView.buffer)\r\n\r\n /* This method is faster than the OpenEXR implementation (very often\r\n * used, eg. in Ogre), with the additional benefit of rounding, inspired\r\n * by James Tursa?s half-precision code. */\r\n return function toHalf (val) {\r\n floatView[0] = val\r\n var x = int32View[0]\r\n\r\n var bits = (x >> 16) & 0x8000 /* Get the sign */\r\n var m = (x >> 12) & 0x07ff /* Keep one extra bit for rounding */\r\n var e = (x >> 23) & 0xff /* Using int is faster here */\r\n\r\n /* If zero, or denormal, or exponent underflows too much for a denormal\r\n * half, return signed zero. */\r\n if (e < 103) {\r\n return bits\r\n }\r\n\r\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\r\n if (e > 142) {\r\n bits |= 0x7c00\r\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\r\n * not Inf, so make sure we set one mantissa bit too. */\r\n bits |= ((e === 255) ? 0 : 1) && (x & 0x007fffff)\r\n return bits\r\n }\r\n\r\n /* If exponent underflows but not too much, return a denormal */\r\n if (e < 113) {\r\n m |= 0x0800\r\n /* Extra rounding may overflow and set mantissa to 0 and exponent\r\n * to 1, which is OK. */\r\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1)\r\n return bits\r\n }\r\n\r\n bits |= ((e - 112) << 10) | (m >> 1)\r\n /* Extra rounding. An overflow will set mantissa to 0 and increment\r\n * the exponent, which is OK. */\r\n bits += m & 1\r\n return bits\r\n }\r\n}())\r\n\r\nexport const WEBGL_FUNCTIONS = {\r\n latLonToWebMercator: `vec2 latLonToWebMercator(vec3 latLonZoom) {\r\n const float d = 3.14159265359 / 180.0;\r\n const float maxLat = 85.0511287798; // max lat using Web Mercator, used by EPSG:3857 CRS\r\n const float R = 6378137.0; // earth radius\r\n\r\n // project\r\n // float lat = max(min(maxLat, latLonZoom[0]), -maxLat);\r\n float lat = clamp(latLonZoom[0], -maxLat, maxLat);\r\n float sla = sin(lat * d);\r\n vec2 point = vec2(R * latLonZoom[1] * d, R * log((1.0 + sla) / (1.0 - sla)) / 2.0);\r\n\r\n // scale\r\n float scale = 256.0 * pow(2.0, latLonZoom[2]);\r\n\r\n // transform\r\n const float s = 0.5 / (3.14159265359 * R);\r\n const vec4 abcd = vec4(s, 0.5, -s, 0.5);\r\n\r\n return scale * ((point * abcd.xz) + abcd.yw);\r\n}`,\r\n unpack1: `float unpack1(float v, vec2 offsetScale) {\r\n return offsetScale.x + v * offsetScale.y;\r\n}`,\r\n unpack2: `vec2 unpack2(vec2 v, vec4 offsetScale) {\r\n return offsetScale.xy + v * offsetScale.zw;\r\n}`\r\n}\r\n\r\n// define half float vertex webgl type\r\nPIXI.TYPES.HALF_FLOAT_VERTEX = 0x140b\r\n\r\nexport function buildShaderCode (features) {\r\n let vtxCode = ''\r\n let frgCode = ''\r\n // attributes, uniforms and varyings\r\n vtxCode += '/// attributes, uniforms and varyings\\n'\r\n frgCode += '/// uniforms and varyings\\n'\r\n for (const feat of features) {\r\n let addVtx = ''\r\n let addFrg = ''\r\n for (const v of _.get(feat, 'vertex.attributes', [])) addVtx += `attribute ${v};\\n`\r\n for (const v of _.get(feat, 'vertex.uniforms', [])) addVtx += `uniform ${v};\\n`\r\n for (const v of _.get(feat, 'fragment.uniforms', [])) addFrg += `uniform ${v};\\n`\r\n for (const v of _.get(feat, 'varyings', [])) {\r\n addVtx += `varying ${v};\\n`\r\n addFrg += `varying ${v};\\n`\r\n }\r\n\r\n if (addVtx) vtxCode += `// ${feat.name} ------\\n${addVtx}`\r\n if (addFrg) frgCode += `// ${feat.name} ------\\n${addFrg}`\r\n }\r\n // additional functions\r\n vtxCode += '\\n/// additional functions\\n'\r\n frgCode += '\\n/// additional functions\\n'\r\n for (const feat of features) {\r\n for (const v of _.get(feat, 'vertex.functions', [])) vtxCode += `// ${feat.name} ------\\n${v}\\n`\r\n for (const v of _.get(feat, 'fragment.functions', [])) frgCode += `// ${feat.name} ------\\n${v}\\n`\r\n }\r\n // main\r\n vtxCode += '\\n/// vertex shader code\\nvoid main()\\n{\\n'\r\n frgCode += '\\n/// fragment shader code\\nvoid main()\\n{\\n'\r\n for (const feat of features) {\r\n const vc = _.get(feat, 'vertex.code')\r\n const fc = _.get(feat, 'fragment.code')\r\n if (vc) vtxCode += `// ${feat.name} ------\\n${vc}\\n`\r\n if (fc) frgCode += `// ${feat.name} ------\\n${fc}\\n`\r\n }\r\n vtxCode += '}'\r\n frgCode += '}'\r\n\r\n return [vtxCode, frgCode]\r\n}\r\n\r\nfunction buildColorMapShaderCode (thresholds, colors, interpolate) {\r\n // thresholds values are expected in ascending order\r\n //\r\n // when not interpolating colors:\r\n // expects N threshold values and N-1 colors\r\n // builds the following colormap:\r\n //\r\n // [ color0 [ color1 [ ..... [ colorn-1 ]\r\n // | | | | |\r\n // thresh0 thresh1 thresh2 threshn-1 threshn\r\n //\r\n // below thresh0, color will be color0\r\n // above threshn, color will be colorn-1\r\n //\r\n // when interpolate is true, colors are interpolated between thresholds\r\n // expects N threshold values and N colors\r\n // builds the following colormap:\r\n //\r\n // color0 .. color1 .. color2 ..... colorn-1 .. colorn\r\n // | | | | |\r\n // thresh0 thresh1 thresh2 threshn-1 threshn\r\n //\r\n // below thresh0, color will be color0\r\n // above threshn, color will be colorn\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n for (let i = 1; i < thresholds.length; ++i) {\r\n if (thresholds[i - 1] > thresholds[i]) {\r\n throw new Error('Threshold array is not correctly sorted, color map shader code will be buggy!')\r\n }\r\n }\r\n\r\n let code = 'vec4 ColorMap(float value) {\\n'\r\n for (let i = 0; i < colors.length; ++i) {\r\n code += ` const vec4 color${i} = vec4(${colors[i].join(',')});\\n`\r\n }\r\n code += '\\n'\r\n\r\n if (!interpolate) {\r\n // skip threshold0 test since any value < thresh1 will get color0\r\n for (let i = 1; i < thresholds.length - 1; ++i) {\r\n const threshold = thresholds[i]\r\n code += ` if (value < float(${threshold})) { return color${i - 1}; }\\n`\r\n }\r\n // skip thresholdn test since any value >= threshn-1 will get colorn-1\r\n code += ` return color${colors.length - 1};\\n`\r\n } else {\r\n // below thresh0 => color0\r\n code += ` if (value < float(${thresholds[0]})) { return color0; }\\n`\r\n for (let i = 1; i < thresholds.length; ++i) {\r\n const t0 = thresholds[i - 1]\r\n const t1 = thresholds[i]\r\n const dt = t1 - t0\r\n code += ` if (value <= float(${t1})) { float t = (value - float(${t0})) / float(${dt}); return mix(color${i - 1}, color${i}, t); }\\n`\r\n }\r\n // above threshn => colorn\r\n code += ` return color${colors.length - 1};\\n`\r\n }\r\n code += '}'\r\n return code\r\n}\r\n\r\nexport function buildColorMapShaderCodeFromDomain (domain, colors, invertScale) {\r\n // expects N values in domain an N colors\r\n // color0 .. color1 .. color2 ..... colorn-1 .. colorn\r\n // | | | | |\r\n // dom0 dom1 dom2 domn-1 domn\r\n // colors will be interpolated between domain values\r\n // domain array is assumed to be sorted (ascending or descending)\r\n\r\n let thresholds = []\r\n let mapping = colors.slice()\r\n\r\n if (domain.length === colors.length) {\r\n thresholds = domain.slice()\r\n } else if (domain.length < colors.length) {\r\n // insert additional thresholds so that num colors = num thresholds\r\n const step = (domain[domain.length - 1] - domain[0]) / (colors.length - 1)\r\n for (let i = 0; i < colors.length; ++i) {\r\n thresholds.push(domain[0] + (i * step))\r\n }\r\n }\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n if (thresholds[0] > thresholds[thresholds.length - 1]) {\r\n thresholds = thresholds.reverse()\r\n invertScale = !invertScale\r\n }\r\n\r\n if (invertScale) {\r\n mapping = mapping.reverse()\r\n }\r\n\r\n return buildColorMapShaderCode(thresholds, mapping, true)\r\n}\r\n\r\nexport function buildColorMapShaderCodeFromClasses (breaks, colors, invertScale) {\r\n // expects N breaks and N-1 colors\r\n // [ color0 [ color1 [ .... [ colorn-1 ]\r\n // | | | | |\r\n // break0 break1 break2 breakn-1 breakn\r\n // breaks array is assumed to be sorted (ascending or descending)\r\n\r\n let thresholds = breaks.slice()\r\n let mapping = colors.slice()\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n if (thresholds[0] > thresholds[thresholds.length - 1]) {\r\n thresholds = thresholds.reverse()\r\n invertScale = !invertScale\r\n }\r\n\r\n if (invertScale) {\r\n mapping = mapping.reverse()\r\n }\r\n\r\n return buildColorMapShaderCode(thresholds, mapping, false)\r\n}\r\n\r\nexport class ColorMapHook {\r\n constructor (colormap, attribute) {\r\n this.colormap = colormap\r\n this.attribute = attribute\r\n }\r\n\r\n initialize (grid) {\r\n this.grid = grid\r\n const dims = grid.getDimensions()\r\n const latCount = dims[0]\r\n const lonCount = dims[1]\r\n this.color = new Uint8Array(4 * latCount * lonCount)\r\n }\r\n\r\n iterate (vidx, ilat, ilon) {\r\n const val = this.grid.getValue(ilat, ilon)\r\n const mapped = this.colormap(val)\r\n const rgb = mapped.rgb()\r\n this.color[vidx * 4] = rgb[0]\r\n this.color[vidx * 4 + 1] = rgb[1]\r\n this.color[vidx * 4 + 2] = rgb[2]\r\n this.color[vidx * 4 + 3] = 255\r\n }\r\n\r\n finalize (geometry) {\r\n geometry.addAttribute(this.attribute, this.color, 4, true, PIXI.TYPES.UNSIGNED_BYTE)\r\n }\r\n}\r\n\r\nexport class RawValueHook {\r\n constructor (attribute) {\r\n this.attribute = attribute\r\n }\r\n\r\n initialize (grid) {\r\n this.grid = grid\r\n const dims = grid.getDimensions()\r\n const latCount = dims[0]\r\n const lonCount = dims[1]\r\n this.value = new Float32Array(latCount * lonCount)\r\n }\r\n\r\n iterate (vidx, ilat, ilon) {\r\n const val = this.grid.getValue(ilat, ilon)\r\n this.value[vidx] = val\r\n }\r\n\r\n finalize (geometry) {\r\n geometry.addAttribute(this.attribute, this.value, 1, false, PIXI.TYPES.FLOAT)\r\n }\r\n}\r\n\r\nexport function buildPixiMeshFromGrid (grid, hooks, iminlat, iminlon, imaxlat, imaxlon) {\r\n const latCount = 1 + imaxlat - iminlat\r\n const lonCount = 1 + imaxlon - iminlon\r\n\r\n // const position = new Float32Array(2 * latCount * lonCount)\r\n const position = new Uint16Array(2 * latCount * lonCount)\r\n for (const hook of hooks) { hook.initialize(grid) }\r\n\r\n const minLat = grid.getLat(iminlat)\r\n const minLon = grid.getLon(iminlon)\r\n const maxLat = grid.getLat(imaxlat)\r\n const maxLon = grid.getLon(imaxlon)\r\n\r\n const deltaLat = maxLat - minLat\r\n const deltaLon = maxLon - minLon\r\n\r\n // fill attributes\r\n let vidx = 0\r\n for (let ilon = iminlon; ilon <= imaxlon; ++ilon) {\r\n const lon = grid.getLon(ilon)\r\n for (let ilat = iminlat; ilat <= imaxlat; ++ilat) {\r\n const lat = grid.getLat(ilat)\r\n\r\n position[vidx * 2] = toHalf((lat - minLat) / deltaLat)\r\n position[vidx * 2 + 1] = toHalf((lon - minLon) / deltaLon)\r\n /*\r\n position[vidx * 2] = lat\r\n position[vidx * 2 + 1] = lon\r\n */\r\n\r\n for (const hook of hooks) { hook.iterate(vidx, ilat, ilon) }\r\n\r\n ++vidx\r\n }\r\n }\r\n\r\n // fill index\r\n let iidx = 0\r\n // choose 16 or 32 bit index\r\n const maxIndex = (lonCount - 1) * latCount + (latCount - 1)\r\n const index = maxIndex > 65534\r\n ? new Uint32Array((lonCount - 1) * (latCount * 2 + 1) - 1)\r\n : new Uint16Array((lonCount - 1) * (latCount * 2 + 1) - 1)\r\n const restart = maxIndex > 65534 ? 4294967295 : 65535\r\n for (let i = 0; i < lonCount - 1; ++i) {\r\n for (let j = 0; j < latCount; ++j) {\r\n index[iidx++] = j + i * latCount\r\n index[iidx++] = j + (i + 1) * latCount\r\n }\r\n if (i !== lonCount - 2) { index[iidx++] = restart }\r\n }\r\n\r\n const geometry = new PIXI.Geometry()\r\n .addAttribute('in_layerPosition', position, 2, false, PIXI.TYPES.HALF_FLOAT_VERTEX)\r\n // .addAttribute('position', position, 2)\r\n .addIndex(index)\r\n\r\n for (const hook of hooks) { hook.finalize(geometry) }\r\n\r\n return geometry\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../map/client/pixi-utils.js"],"names":["buildShaderCode","buildColorMapShaderCodeFromDomain","buildColorMapShaderCodeFromClasses","PIXI","settings","PREFER_ENV","ENV","WEBGL2","FAIL_IF_MAJOR_PERFORMANCE_CAVEAT","WEBGL_FUNCTIONS","latLonToWebMercator","unpack1","unpack2","TYPES","HALF_FLOAT_VERTEX","features","vtxCode","frgCode","feat","addVtx","addFrg","v","_","get","name","vc","fc","buildColorMapShaderCode","thresholds","colors","interpolate","i","length","Error","code","join","threshold","t0","t1","dt","domain","invertScale","mapping","slice","step","push","reverse","breaks"],"mappings":";;;;;;QA4CgBA,e,GAAAA,e;QAwGAC,iC,GAAAA,iC;QAkCAC,kC,GAAAA,kC;;AAtLhB;;;;AACA;;IAAYC,I;;;;;;AAEZ;AACA;AACA;AACAA,KAAKC,QAAL,CAAcC,UAAd,GAA2BF,KAAKG,GAAL,CAASC,MAApC;;AAEA;AACA;AACAJ,KAAKC,QAAL,CAAcI,gCAAd,GAAiD,KAAjD;;AAEO,MAAMC,4CAAkB;AAC7BC,uBAAsB;;;;;;;;;;;;;;;;;;;EADO;AAqB7BC,WAAU;;EArBmB;AAwB7BC,WAAU;;;;AAKZ;AA7B+B,CAAxB,CA8BPT,KAAKU,KAAL,CAAWC,iBAAX,GAA+B,MAA/B;;AAEO,SAASd,eAAT,CAA0Be,QAA1B,EAAoC;AACzC,MAAIC,UAAU,iBAAd;AACA,MAAIC,UAAU,yCAAd;AACA;AACAD,aAAW,6CAAX;AACAC,aAAW,qDAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,QAAII,SAAS,EAAb;AACA,QAAIC,SAAS,EAAb;AACA,SAAK,MAAMC,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,mBAAZ,EAAiC,EAAjC,CAAhB,EAAsDC,UAAW,MAAKE,CAAE,KAAlB;AACtD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,iBAAZ,EAA+B,EAA/B,CAAhB,EAAoDC,UAAW,WAAUE,CAAE,KAAvB;AACpD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,mBAAZ,EAAiC,EAAjC,CAAhB,EAAsDE,UAAW,WAAUC,CAAE,KAAvB;AACtD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,UAAZ,EAAwB,EAAxB,CAAhB,EAA6C;AAC3CC,gBAAW,OAAME,CAAE,KAAnB;AACAD,gBAAW,MAAKC,CAAE,KAAlB;AACD;;AAED,QAAIF,MAAJ,EAAYH,WAAY,MAAKE,KAAKM,IAAK,YAAWL,MAAO,EAA7C;AACZ,QAAIC,MAAJ,EAAYH,WAAY,MAAKC,KAAKM,IAAK,YAAWJ,MAAO,EAA7C;AACb;AACD;AACAJ,aAAW,8BAAX;AACAC,aAAW,8BAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,SAAK,MAAMM,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,kBAAZ,EAAgC,EAAhC,CAAhB,EAAqDF,WAAY,MAAKE,KAAKM,IAAK,YAAWH,CAAE,IAAxC;AACrD,SAAK,MAAMA,CAAX,IAAgBC,iBAAEC,GAAF,CAAML,IAAN,EAAY,oBAAZ,EAAkC,EAAlC,CAAhB,EAAuDD,WAAY,MAAKC,KAAKM,IAAK,YAAWH,CAAE,IAAxC;AACxD;AACD;AACAL,aAAW,4CAAX;AACAC,aAAW,8CAAX;AACA,OAAK,MAAMC,IAAX,IAAmBH,QAAnB,EAA6B;AAC3B,UAAMU,KAAKH,iBAAEC,GAAF,CAAML,IAAN,EAAY,aAAZ,CAAX;AACA,UAAMQ,KAAKJ,iBAAEC,GAAF,CAAML,IAAN,EAAY,eAAZ,CAAX;AACA,QAAIO,EAAJ,EAAQT,WAAY,MAAKE,KAAKM,IAAK,YAAWC,EAAG,IAAzC;AACR,QAAIC,EAAJ,EAAQT,WAAY,MAAKC,KAAKM,IAAK,YAAWE,EAAG,IAAzC;AACT;AACDV,aAAW,GAAX;AACAC,aAAW,GAAX;;AAEA,SAAO,CAACD,OAAD,EAAUC,OAAV,CAAP;AACD;;AAED,SAASU,uBAAT,CAAkCC,UAAlC,EAA8CC,MAA9C,EAAsDC,WAAtD,EAAmE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAA/B,EAAuC,EAAED,CAAzC,EAA4C;AAC1C,QAAIH,WAAWG,IAAI,CAAf,IAAoBH,WAAWG,CAAX,CAAxB,EAAuC;AACrC,YAAM,IAAIE,KAAJ,CAAU,+EAAV,CAAN;AACD;AACF;;AAED,MAAIC,OAAO,gCAAX;AACA,OAAK,IAAIH,IAAI,CAAb,EAAgBA,IAAIF,OAAOG,MAA3B,EAAmC,EAAED,CAArC,EAAwC;AACtCG,YAAS,qBAAoBH,CAAE,WAAUF,OAAOE,CAAP,EAAUI,IAAV,CAAe,GAAf,CAAoB,MAA7D;AACD;AACDD,UAAQ,IAAR;;AAEA,MAAI,CAACJ,WAAL,EAAkB;AAChB;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAAX,GAAoB,CAAxC,EAA2C,EAAED,CAA7C,EAAgD;AAC9C,YAAMK,YAAYR,WAAWG,CAAX,CAAlB;AACAG,cAAS,uBAAsBE,SAAU,oBAAmBL,IAAI,CAAE,OAAlE;AACD;AACD;AACAG,YAAS,iBAAgBL,OAAOG,MAAP,GAAgB,CAAE,KAA3C;AACD,GARD,MAQO;AACL;AACAE,YAAS,uBAAsBN,WAAW,CAAX,CAAc,yBAA7C;AACA,SAAK,IAAIG,IAAI,CAAb,EAAgBA,IAAIH,WAAWI,MAA/B,EAAuC,EAAED,CAAzC,EAA4C;AAC1C,YAAMM,KAAKT,WAAWG,IAAI,CAAf,CAAX;AACA,YAAMO,KAAKV,WAAWG,CAAX,CAAX;AACA,YAAMQ,KAAKD,KAAKD,EAAhB;AACAH,cAAS,wBAAuBI,EAAG,iCAAgCD,EAAG,cAAaE,EAAG,sBAAqBR,IAAI,CAAE,UAASA,CAAE,WAA5H;AACD;AACD;AACAG,YAAS,iBAAgBL,OAAOG,MAAP,GAAgB,CAAE,KAA3C;AACD;AACDE,UAAQ,GAAR;AACA,SAAOA,IAAP;AACD;;AAEM,SAASjC,iCAAT,CAA4CuC,MAA5C,EAAoDX,MAApD,EAA4DY,WAA5D,EAAyE;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAIb,aAAa,EAAjB;AACA,MAAIc,UAAUb,OAAOc,KAAP,EAAd;;AAEA,MAAIH,OAAOR,MAAP,KAAkBH,OAAOG,MAA7B,EAAqC;AACnCJ,iBAAaY,OAAOG,KAAP,EAAb;AACD,GAFD,MAEO,IAAIH,OAAOR,MAAP,GAAgBH,OAAOG,MAA3B,EAAmC;AACxC;AACA,UAAMY,OAAO,CAACJ,OAAOA,OAAOR,MAAP,GAAgB,CAAvB,IAA4BQ,OAAO,CAAP,CAA7B,KAA2CX,OAAOG,MAAP,GAAgB,CAA3D,CAAb;AACA,SAAK,IAAID,IAAI,CAAb,EAAgBA,IAAIF,OAAOG,MAA3B,EAAmC,EAAED,CAArC,EAAwC;AACtCH,iBAAWiB,IAAX,CAAgBL,OAAO,CAAP,IAAaT,IAAIa,IAAjC;AACD;AACF;;AAED;AACA,MAAIhB,WAAW,CAAX,IAAgBA,WAAWA,WAAWI,MAAX,GAAoB,CAA/B,CAApB,EAAuD;AACrDJ,iBAAaA,WAAWkB,OAAX,EAAb;AACAL,kBAAc,CAACA,WAAf;AACD;;AAED,MAAIA,WAAJ,EAAiB;AACfC,cAAUA,QAAQI,OAAR,EAAV;AACD;;AAED,SAAOnB,wBAAwBC,UAAxB,EAAoCc,OAApC,EAA6C,IAA7C,CAAP;AACD;;AAEM,SAASxC,kCAAT,CAA6C6C,MAA7C,EAAqDlB,MAArD,EAA6DY,WAA7D,EAA0E;AAC/E;AACA;AACA;AACA;AACA;;AAEA,MAAIb,aAAamB,OAAOJ,KAAP,EAAjB;AACA,MAAID,UAAUb,OAAOc,KAAP,EAAd;;AAEA;AACA,MAAIf,WAAW,CAAX,IAAgBA,WAAWA,WAAWI,MAAX,GAAoB,CAA/B,CAApB,EAAuD;AACrDJ,iBAAaA,WAAWkB,OAAX,EAAb;AACAL,kBAAc,CAACA,WAAf;AACD;;AAED,MAAIA,WAAJ,EAAiB;AACfC,cAAUA,QAAQI,OAAR,EAAV;AACD;;AAED,SAAOnB,wBAAwBC,UAAxB,EAAoCc,OAApC,EAA6C,KAA7C,CAAP;AACD","file":"pixi-utils.js","sourcesContent":["import _ from 'lodash'\r\nimport * as PIXI from 'pixi.js'\r\n\r\n// Force PIXI to use a WebGL2 context, even on android devices.\r\n// This is required as long as we use a PIXI version that\r\n// will prefer using a WebGL1 context on android devices.\r\nPIXI.settings.PREFER_ENV = PIXI.ENV.WEBGL2\r\n\r\n// Force PIXI to use WebGL even if the performances are not so good. This allows\r\n// to use PIXI in Chrome Headless mode\r\nPIXI.settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false\r\n\r\nexport const WEBGL_FUNCTIONS = {\r\n latLonToWebMercator: `vec2 latLonToWebMercator(vec3 latLonZoom) {\r\n const float d = 3.14159265359 / 180.0;\r\n const float maxLat = 85.0511287798; // max lat using Web Mercator, used by EPSG:3857 CRS\r\n const float R = 6378137.0; // earth radius\r\n\r\n // project\r\n // float lat = max(min(maxLat, latLonZoom[0]), -maxLat);\r\n float lat = clamp(latLonZoom[0], -maxLat, maxLat);\r\n float sla = sin(lat * d);\r\n vec2 point = vec2(R * latLonZoom[1] * d, R * log((1.0 + sla) / (1.0 - sla)) / 2.0);\r\n\r\n // scale\r\n float scale = 256.0 * pow(2.0, latLonZoom[2]);\r\n\r\n // transform\r\n const float s = 0.5 / (3.14159265359 * R);\r\n const vec4 abcd = vec4(s, 0.5, -s, 0.5);\r\n\r\n return scale * ((point * abcd.xz) + abcd.yw);\r\n}`,\r\n unpack1: `float unpack1(float v, vec2 offsetScale) {\r\n return offsetScale.x + v * offsetScale.y;\r\n}`,\r\n unpack2: `vec2 unpack2(vec2 v, vec4 offsetScale) {\r\n return offsetScale.xy + v * offsetScale.zw;\r\n}`\r\n}\r\n\r\n// define half float vertex webgl type\r\nPIXI.TYPES.HALF_FLOAT_VERTEX = 0x140b\r\n\r\nexport function buildShaderCode (features) {\r\n let vtxCode = '#version 300 es'\r\n let frgCode = '#version 300 es\\nprecision highp float;'\r\n // attributes, uniforms and varyings\r\n vtxCode += '\\n\\n/// attributes, uniforms and varyings\\n'\r\n frgCode += '\\n\\n/// uniforms and varyings\\nout vec4 outColor;\\n'\r\n for (const feat of features) {\r\n let addVtx = ''\r\n let addFrg = ''\r\n for (const v of _.get(feat, 'vertex.attributes', [])) addVtx += `in ${v};\\n`\r\n for (const v of _.get(feat, 'vertex.uniforms', [])) addVtx += `uniform ${v};\\n`\r\n for (const v of _.get(feat, 'fragment.uniforms', [])) addFrg += `uniform ${v};\\n`\r\n for (const v of _.get(feat, 'varyings', [])) {\r\n addVtx += `out ${v};\\n`\r\n addFrg += `in ${v};\\n`\r\n }\r\n\r\n if (addVtx) vtxCode += `// ${feat.name} ------\\n${addVtx}`\r\n if (addFrg) frgCode += `// ${feat.name} ------\\n${addFrg}`\r\n }\r\n // additional functions\r\n vtxCode += '\\n/// additional functions\\n'\r\n frgCode += '\\n/// additional functions\\n'\r\n for (const feat of features) {\r\n for (const v of _.get(feat, 'vertex.functions', [])) vtxCode += `// ${feat.name} ------\\n${v}\\n`\r\n for (const v of _.get(feat, 'fragment.functions', [])) frgCode += `// ${feat.name} ------\\n${v}\\n`\r\n }\r\n // main\r\n vtxCode += '\\n/// vertex shader code\\nvoid main()\\n{\\n'\r\n frgCode += '\\n/// fragment shader code\\nvoid main()\\n{\\n'\r\n for (const feat of features) {\r\n const vc = _.get(feat, 'vertex.code')\r\n const fc = _.get(feat, 'fragment.code')\r\n if (vc) vtxCode += `// ${feat.name} ------\\n${vc}\\n`\r\n if (fc) frgCode += `// ${feat.name} ------\\n${fc}\\n`\r\n }\r\n vtxCode += '}'\r\n frgCode += '}'\r\n\r\n return [vtxCode, frgCode]\r\n}\r\n\r\nfunction buildColorMapShaderCode (thresholds, colors, interpolate) {\r\n // thresholds values are expected in ascending order\r\n //\r\n // when not interpolating colors:\r\n // expects N threshold values and N-1 colors\r\n // builds the following colormap:\r\n //\r\n // [ color0 [ color1 [ ..... [ colorn-1 ]\r\n // | | | | |\r\n // thresh0 thresh1 thresh2 threshn-1 threshn\r\n //\r\n // below thresh0, color will be color0\r\n // above threshn, color will be colorn-1\r\n //\r\n // when interpolate is true, colors are interpolated between thresholds\r\n // expects N threshold values and N colors\r\n // builds the following colormap:\r\n //\r\n // color0 .. color1 .. color2 ..... colorn-1 .. colorn\r\n // | | | | |\r\n // thresh0 thresh1 thresh2 threshn-1 threshn\r\n //\r\n // below thresh0, color will be color0\r\n // above threshn, color will be colorn\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n for (let i = 1; i < thresholds.length; ++i) {\r\n if (thresholds[i - 1] > thresholds[i]) {\r\n throw new Error('Threshold array is not correctly sorted, color map shader code will be buggy!')\r\n }\r\n }\r\n\r\n let code = 'vec4 ColorMap(float value) {\\n'\r\n for (let i = 0; i < colors.length; ++i) {\r\n code += ` const vec4 color${i} = vec4(${colors[i].join(',')});\\n`\r\n }\r\n code += '\\n'\r\n\r\n if (!interpolate) {\r\n // skip threshold0 test since any value < thresh1 will get color0\r\n for (let i = 1; i < thresholds.length - 1; ++i) {\r\n const threshold = thresholds[i]\r\n code += ` if (value < float(${threshold})) { return color${i - 1}; }\\n`\r\n }\r\n // skip thresholdn test since any value >= threshn-1 will get colorn-1\r\n code += ` return color${colors.length - 1};\\n`\r\n } else {\r\n // below thresh0 => color0\r\n code += ` if (value < float(${thresholds[0]})) { return color0; }\\n`\r\n for (let i = 1; i < thresholds.length; ++i) {\r\n const t0 = thresholds[i - 1]\r\n const t1 = thresholds[i]\r\n const dt = t1 - t0\r\n code += ` if (value <= float(${t1})) { float t = (value - float(${t0})) / float(${dt}); return mix(color${i - 1}, color${i}, t); }\\n`\r\n }\r\n // above threshn => colorn\r\n code += ` return color${colors.length - 1};\\n`\r\n }\r\n code += '}'\r\n return code\r\n}\r\n\r\nexport function buildColorMapShaderCodeFromDomain (domain, colors, invertScale) {\r\n // expects N values in domain an N colors\r\n // color0 .. color1 .. color2 ..... colorn-1 .. colorn\r\n // | | | | |\r\n // dom0 dom1 dom2 domn-1 domn\r\n // colors will be interpolated between domain values\r\n // domain array is assumed to be sorted (ascending or descending)\r\n\r\n let thresholds = []\r\n let mapping = colors.slice()\r\n\r\n if (domain.length === colors.length) {\r\n thresholds = domain.slice()\r\n } else if (domain.length < colors.length) {\r\n // insert additional thresholds so that num colors = num thresholds\r\n const step = (domain[domain.length - 1] - domain[0]) / (colors.length - 1)\r\n for (let i = 0; i < colors.length; ++i) {\r\n thresholds.push(domain[0] + (i * step))\r\n }\r\n }\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n if (thresholds[0] > thresholds[thresholds.length - 1]) {\r\n thresholds = thresholds.reverse()\r\n invertScale = !invertScale\r\n }\r\n\r\n if (invertScale) {\r\n mapping = mapping.reverse()\r\n }\r\n\r\n return buildColorMapShaderCode(thresholds, mapping, true)\r\n}\r\n\r\nexport function buildColorMapShaderCodeFromClasses (breaks, colors, invertScale) {\r\n // expects N breaks and N-1 colors\r\n // [ color0 [ color1 [ .... [ colorn-1 ]\r\n // | | | | |\r\n // break0 break1 break2 breakn-1 breakn\r\n // breaks array is assumed to be sorted (ascending or descending)\r\n\r\n let thresholds = breaks.slice()\r\n let mapping = colors.slice()\r\n\r\n // make sure thresholds array is sorted in ascending order\r\n if (thresholds[0] > thresholds[thresholds.length - 1]) {\r\n thresholds = thresholds.reverse()\r\n invertScale = !invertScale\r\n }\r\n\r\n if (invertScale) {\r\n mapping = mapping.reverse()\r\n }\r\n\r\n return buildColorMapShaderCode(thresholds, mapping, false)\r\n}\r\n"]}
@@ -39,4 +39,16 @@ Object.keys(_reader3).forEach(function (key) {
39
39
  }
40
40
  });
41
41
  });
42
+
43
+ var _reader4 = require('./reader.shp');
44
+
45
+ Object.keys(_reader4).forEach(function (key) {
46
+ if (key === "default" || key === "__esModule") return;
47
+ Object.defineProperty(exports, key, {
48
+ enumerable: true,
49
+ get: function () {
50
+ return _reader4[key];
51
+ }
52
+ });
53
+ });
42
54
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/readers/index.js"],"names":[],"mappings":";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"index.js","sourcesContent":["export * from './reader.geojson'\r\nexport * from './reader.kml'\r\nexport * from './reader.gpx'\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/readers/index.js"],"names":[],"mappings":";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"index.js","sourcesContent":["export * from './reader.geojson'\r\nexport * from './reader.kml'\r\nexport * from './reader.gpx'\r\nexport * from './reader.shp'\r\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readGEOJSON = readGEOJSON;
6
+ exports.GeoJSONReader = undefined;
7
7
 
8
8
  var _loglevel = require('loglevel');
9
9
 
@@ -23,37 +23,65 @@ var _geojsonhint2 = _interopRequireDefault(_geojsonhint);
23
23
 
24
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
25
 
26
- function readGEOJSON(file, options) {
27
- _loglevel2.default.debug(`reading GeoJSON file ${file.name}`);
28
- return new Promise((resolve, reject) => {
29
- const reader = new FileReader();
30
- reader.onloadend = () => {
31
- let content = reader.result;
32
- try {
33
- content = JSON.parse(content);
34
- } catch (error) {
35
- reject(new Error(_i18next2.default.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }));
36
- return;
37
- }
38
- // lint the geosjon file
39
- const messages = _geojsonhint2.default.hint(content, options);
40
- // filter the message according the level to find the errors
41
- const errors = _lodash2.default.filter(messages, message => {
42
- return _lodash2.default.get(message, 'level') !== 'message';
43
- });
44
- if (errors.length > 0) {
45
- _loglevel2.default.debug(errors);
46
- reject(new Error(_i18next2.default.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }));
47
- return;
48
- }
49
- // the geosjon file is correct
50
- resolve(content);
51
- };
52
- reader.onerror = error => {
53
- _loglevel2.default.debug(error);
54
- reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
55
- };
56
- reader.readAsText(file);
57
- });
58
- }
26
+ const GeoJSONReader = exports.GeoJSONReader = {
27
+ read(files, options) {
28
+ if (files.length !== 1) {
29
+ _loglevel2.default.debug('invlaid \'fields\' arguments');
30
+ return;
31
+ }
32
+ const file = files[0];
33
+ _loglevel2.default.debug(`reading GeoJSON file ${file.name}`);
34
+ return new Promise((resolve, reject) => {
35
+ const reader = new FileReader();
36
+ reader.onloadend = () => {
37
+ let content = reader.result;
38
+ try {
39
+ content = JSON.parse(content);
40
+ } catch (error) {
41
+ reject(new Error(_i18next2.default.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }));
42
+ return;
43
+ }
44
+ // check the crs
45
+ // if valid delete it because of https://github.com/kalisio/kdk/issues/518
46
+ if (content.crs) {
47
+ // we support only named crs and expressed in WGS84
48
+ const name = _lodash2.default.get(content.crs, 'properties.name');
49
+ if (name) {
50
+ const crs = name.toLowerCase();
51
+ const allowedCrs = ['epsg:4326', 'urn:ogc:def:crs:OGC:1.3:CRS84', 'urn:ogc:def:crs:EPSG::4326'];
52
+ const isCrsValid = _lodash2.default.some(allowedCrs, allowrdCrs => {
53
+ return allowrdCrs.toLowerCase() === crs;
54
+ });
55
+ if (!isCrsValid) {
56
+ reject(new Error(_i18next2.default.t('errors.INVALID_GEOJSON_CRS', { file: file.name }), { errors: `Invalid CRS ${name}` }));
57
+ return;
58
+ }
59
+ delete content.crs;
60
+ }
61
+ }
62
+ // lint the geosjon file
63
+ const messages = _geojsonhint2.default.hint(content, options);
64
+ // filter the message according the level to find the errors
65
+ const errors = _lodash2.default.filter(messages, message => {
66
+ return _lodash2.default.get(message, 'level') !== 'message';
67
+ });
68
+ if (errors.length > 0) {
69
+ _loglevel2.default.debug(errors);
70
+ reject(new Error(_i18next2.default.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }));
71
+ return;
72
+ }
73
+ // the geosjon file is correct
74
+ resolve(content);
75
+ };
76
+ reader.onerror = error => {
77
+ _loglevel2.default.debug(error);
78
+ reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
79
+ };
80
+ reader.readAsText(file);
81
+ });
82
+ },
83
+ getAdditionalFiles() {
84
+ return [];
85
+ }
86
+ };
59
87
  //# sourceMappingURL=reader.geojson.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/readers/reader.geojson.js"],"names":["readGEOJSON","file","options","logger","debug","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","JSON","parse","error","Error","i18next","t","errors","messages","geojsonhint","hint","_","filter","message","get","length","onerror","readAsText"],"mappings":";;;;;QAKgBA,W,GAAAA,W;;AALhB;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEO,SAASA,WAAT,CAAsBC,IAAtB,EAA4BC,OAA5B,EAAqC;AAC1CC,qBAAOC,KAAP,CAAc,wBAAuBH,KAAKI,IAAK,EAA/C;AACA,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,WAAOE,SAAP,GAAmB,MAAM;AACvB,UAAIC,UAAUH,OAAOI,MAArB;AACA,UAAI;AACFD,kBAAUE,KAAKC,KAAL,CAAWH,OAAX,CAAV;AACD,OAFD,CAEE,OAAOI,KAAP,EAAc;AACdR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,0BAAV,EAAsC,EAAElB,MAAMA,KAAKI,IAAb,EAAtC,CAAV,EAAsE,EAAEe,QAAQJ,KAAV,EAAtE,CAAP;AACA;AACD;AACD;AACA,YAAMK,WAAWC,sBAAYC,IAAZ,CAAiBX,OAAjB,EAA0BV,OAA1B,CAAjB;AACA;AACA,YAAMkB,SAASI,iBAAEC,MAAF,CAASJ,QAAT,EAAmBK,WAAW;AAC3C,eAAOF,iBAAEG,GAAF,CAAMD,OAAN,EAAe,OAAf,MAA4B,SAAnC;AACD,OAFc,CAAf;AAGA,UAAIN,OAAOQ,MAAP,GAAgB,CAApB,EAAuB;AACrBzB,2BAAOC,KAAP,CAAagB,MAAb;AACAZ,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,6BAAV,EAAyC,EAAElB,MAAMA,KAAKI,IAAb,EAAzC,CAAV,EAAyE,EAAEe,MAAF,EAAzE,CAAP;AACA;AACD;AACD;AACAb,cAAQK,OAAR;AACD,KArBD;AAsBAH,WAAOoB,OAAP,GAAkBb,KAAD,IAAW;AAC1Bb,yBAAOC,KAAP,CAAaY,KAAb;AACAR,aAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAElB,MAAMA,KAAKI,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,KAHD;AAIAP,WAAOqB,UAAP,CAAkB7B,IAAlB;AACD,GA7BM,CAAP;AA8BD","file":"reader.geojson.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport geojsonhint from '@mapbox/geojsonhint'\r\n\r\nexport function readGEOJSON (file, options) {\r\n logger.debug(`reading GeoJSON file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = JSON.parse(content)\r\n } catch (error) {\r\n reject(new Error(i18next.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n // lint the geosjon file\r\n const messages = geojsonhint.hint(content, options)\r\n // filter the message according the level to find the errors\r\n const errors = _.filter(messages, message => {\r\n return _.get(message, 'level') !== 'message'\r\n })\r\n if (errors.length > 0) {\r\n logger.debug(errors)\r\n reject(new Error(i18next.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }))\r\n return\r\n }\r\n // the geosjon file is correct\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\n }\r\n reader.readAsText(file)\r\n })\r\n}\n"]}
1
+ {"version":3,"sources":["../../../../map/client/readers/reader.geojson.js"],"names":["GeoJSONReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","JSON","parse","error","Error","i18next","t","errors","crs","_","get","toLowerCase","allowedCrs","isCrsValid","some","allowrdCrs","messages","geojsonhint","hint","filter","message","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEO,MAAMA,wCAAgB;AAC3BC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,wBAAuBC,KAAKC,IAAK,EAA/C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAUE,KAAKC,KAAL,CAAWH,OAAX,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,0BAAV,EAAsC,EAAEf,MAAMA,KAAKC,IAAb,EAAtC,CAAV,EAAsE,EAAEe,QAAQJ,KAAV,EAAtE,CAAP;AACA;AACD;AACD;AACA;AACA,YAAIJ,QAAQS,GAAZ,EAAiB;AACf;AACA,gBAAMhB,OAAOiB,iBAAEC,GAAF,CAAMX,QAAQS,GAAd,EAAmB,iBAAnB,CAAb;AACA,cAAIhB,IAAJ,EAAU;AACR,kBAAMgB,MAAMhB,KAAKmB,WAAL,EAAZ;AACA,kBAAMC,aAAa,CAAC,WAAD,EAAc,+BAAd,EAA+C,4BAA/C,CAAnB;AACA,kBAAMC,aAAaJ,iBAAEK,IAAF,CAAOF,UAAP,EAAoBG,UAAD,IAAgB;AAAE,qBAAOA,WAAWJ,WAAX,OAA6BH,GAApC;AAAyC,aAA9E,CAAnB;AACA,gBAAI,CAACK,UAAL,EAAiB;AACflB,qBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,4BAAV,EAAwC,EAAEf,MAAMA,KAAKC,IAAb,EAAxC,CAAV,EAAwE,EAAEe,QAAS,eAAcf,IAAK,EAA9B,EAAxE,CAAP;AACA;AACD;AACD,mBAAOO,QAAQS,GAAf;AACD;AACF;AACD;AACA,cAAMQ,WAAWC,sBAAYC,IAAZ,CAAiBnB,OAAjB,EAA0BZ,OAA1B,CAAjB;AACA;AACA,cAAMoB,SAASE,iBAAEU,MAAF,CAASH,QAAT,EAAmBI,WAAW;AAC3C,iBAAOX,iBAAEC,GAAF,CAAMU,OAAN,EAAe,OAAf,MAA4B,SAAnC;AACD,SAFc,CAAf;AAGA,YAAIb,OAAOnB,MAAP,GAAgB,CAApB,EAAuB;AACrBC,6BAAOC,KAAP,CAAaiB,MAAb;AACAZ,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,6BAAV,EAAyC,EAAEf,MAAMA,KAAKC,IAAb,EAAzC,CAAV,EAAyE,EAAEe,MAAF,EAAzE,CAAP;AACA;AACD;AACD;AACAb,gBAAQK,OAAR;AACD,OArCD;AAsCAH,aAAOyB,OAAP,GAAkBlB,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAO0B,UAAP,CAAkB/B,IAAlB;AACD,KA7CM,CAAP;AA8CD,GAtD0B;AAuD3BgC,uBAAsB;AACpB,WAAO,EAAP;AACD;AAzD0B,CAAtB","file":"reader.geojson.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport geojsonhint from '@mapbox/geojsonhint'\r\n\r\nexport const GeoJSONReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading GeoJSON file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = JSON.parse(content)\r\n } catch (error) {\r\n reject(new Error(i18next.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n // check the crs\r\n // if valid delete it because of https://github.com/kalisio/kdk/issues/518\r\n if (content.crs) {\r\n // we support only named crs and expressed in WGS84\r\n const name = _.get(content.crs, 'properties.name')\r\n if (name) {\r\n const crs = name.toLowerCase()\r\n const allowedCrs = ['epsg:4326', 'urn:ogc:def:crs:OGC:1.3:CRS84', 'urn:ogc:def:crs:EPSG::4326']\r\n const isCrsValid = _.some(allowedCrs, (allowrdCrs) => { return allowrdCrs.toLowerCase() === crs })\r\n if (!isCrsValid) {\r\n reject(new Error(i18next.t('errors.INVALID_GEOJSON_CRS', { file: file.name }), { errors: `Invalid CRS ${name}` }))\r\n return\r\n }\r\n delete content.crs\r\n }\r\n }\r\n // lint the geosjon file\r\n const messages = geojsonhint.hint(content, options)\r\n // filter the message according the level to find the errors\r\n const errors = _.filter(messages, message => {\r\n return _.get(message, 'level') !== 'message'\r\n })\r\n if (errors.length > 0) {\r\n logger.debug(errors)\r\n reject(new Error(i18next.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }))\r\n return\r\n }\r\n // the geosjon file is correct\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readGPX = readGPX;
6
+ exports.GPXReader = undefined;
7
7
 
8
8
  var _loglevel = require('loglevel');
9
9
 
@@ -17,25 +17,36 @@ var _togeojson = require('@tmcw/togeojson');
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- function readGPX(file, options) {
21
- return new Promise((resolve, reject) => {
22
- const reader = new FileReader();
23
- reader.onloadend = () => {
24
- let content = reader.result;
25
- try {
26
- content = (0, _togeojson.gpx)(new DOMParser().parseFromString(content, 'text/xml'));
27
- } catch (error) {
20
+ const GPXReader = exports.GPXReader = {
21
+ read(files, options) {
22
+ if (files.length !== 1) {
23
+ _loglevel2.default.debug('invlaid \'fields\' arguments');
24
+ return;
25
+ }
26
+ const file = files[0];
27
+ _loglevel2.default.debug(`reading GPX file ${file.name}`);
28
+ return new Promise((resolve, reject) => {
29
+ const reader = new FileReader();
30
+ reader.onloadend = () => {
31
+ let content = reader.result;
32
+ try {
33
+ content = (0, _togeojson.gpx)(new DOMParser().parseFromString(content, 'text/xml'));
34
+ } catch (error) {
35
+ _loglevel2.default.debug(error);
36
+ reject(new Error(_i18next2.default.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }));
37
+ return;
38
+ }
39
+ resolve(content);
40
+ };
41
+ reader.onerror = error => {
28
42
  _loglevel2.default.debug(error);
29
- reject(new Error(_i18next2.default.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }));
30
- return;
31
- }
32
- resolve(content);
33
- };
34
- reader.onerror = error => {
35
- _loglevel2.default.debug(error);
36
- reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
37
- };
38
- reader.readAsText(file);
39
- });
40
- }
43
+ reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
44
+ };
45
+ reader.readAsText(file);
46
+ });
47
+ },
48
+ getAdditionalFiles() {
49
+ return [];
50
+ }
51
+ };
41
52
  //# sourceMappingURL=reader.gpx.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/readers/reader.gpx.js"],"names":["readGPX","file","options","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","logger","debug","Error","i18next","t","name","errors","onerror","readAsText"],"mappings":";;;;;QAIgBA,O,GAAAA,O;;AAJhB;;;;AACA;;;;AACA;;;;AAEO,SAASA,OAAT,CAAkBC,IAAlB,EAAwBC,OAAxB,EAAiC;AACtC,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,WAAOE,SAAP,GAAmB,MAAM;AACvB,UAAIC,UAAUH,OAAOI,MAArB;AACA,UAAI;AACFD,kBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,OAFD,CAEE,OAAOI,KAAP,EAAc;AACdC,2BAAOC,KAAP,CAAaF,KAAb;AACAR,eAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEjB,MAAMA,KAAKkB,IAAb,EAArC,CAAV,EAAqE,EAAEC,QAAQP,KAAV,EAArE,CAAP;AACA;AACD;AACDT,cAAQK,OAAR;AACD,KAVD;AAWAH,WAAOe,OAAP,GAAkBR,KAAD,IAAW;AAC1BC,yBAAOC,KAAP,CAAaF,KAAb;AACAR,aAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEjB,MAAMA,KAAKkB,IAAb,EAArC,CAAV,EAAqE,EAAEC,QAAQP,KAAV,EAArE,CAAP;AACD,KAHD;AAIAP,WAAOgB,UAAP,CAAkBrB,IAAlB;AACD,GAlBM,CAAP;AAmBD","file":"reader.gpx.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { gpx } from '@tmcw/togeojson'\r\n\r\nexport function readGPX (file, options) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = gpx(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\n }\r\n reader.readAsText(file)\r\n })\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/readers/reader.gpx.js"],"names":["GPXReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","Error","i18next","t","errors","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AAEO,MAAMA,gCAAY;AACvBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,oBAAmBC,KAAKC,IAAK,EAA3C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdd,6BAAOC,KAAP,CAAaa,KAAb;AACAR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACA;AACD;AACDT,gBAAQK,OAAR;AACD,OAVD;AAWAH,aAAOY,OAAP,GAAkBL,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAOa,UAAP,CAAkBlB,IAAlB;AACD,KAlBM,CAAP;AAmBD,GA3BsB;AA4BvBmB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA9BsB,CAAlB","file":"reader.gpx.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { gpx } from '@tmcw/togeojson'\r\n\r\nexport const GPXReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading GPX file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = gpx(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readKML = readKML;
6
+ exports.KMLReader = undefined;
7
7
 
8
8
  var _loglevel = require('loglevel');
9
9
 
@@ -17,25 +17,36 @@ var _togeojson = require('@tmcw/togeojson');
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- function readKML(file, options) {
21
- return new Promise((resolve, reject) => {
22
- const reader = new FileReader();
23
- reader.onloadend = () => {
24
- let content = reader.result;
25
- try {
26
- content = (0, _togeojson.kml)(new DOMParser().parseFromString(content, 'text/xml'));
27
- } catch (error) {
20
+ const KMLReader = exports.KMLReader = {
21
+ read(files, options) {
22
+ if (files.length !== 1) {
23
+ _loglevel2.default.debug('invlaid \'fields\' arguments');
24
+ return;
25
+ }
26
+ const file = files[0];
27
+ _loglevel2.default.debug(`reading KML file ${file.name}`);
28
+ return new Promise((resolve, reject) => {
29
+ const reader = new FileReader();
30
+ reader.onloadend = () => {
31
+ let content = reader.result;
32
+ try {
33
+ content = (0, _togeojson.kml)(new DOMParser().parseFromString(content, 'text/xml'));
34
+ } catch (error) {
35
+ _loglevel2.default.debug(error);
36
+ reject(new Error(_i18next2.default.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }));
37
+ return;
38
+ }
39
+ resolve(content);
40
+ };
41
+ reader.onerror = error => {
28
42
  _loglevel2.default.debug(error);
29
- reject(new Error(_i18next2.default.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }));
30
- return;
31
- }
32
- resolve(content);
33
- };
34
- reader.onerror = error => {
35
- _loglevel2.default.debug(error);
36
- reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
37
- };
38
- reader.readAsText(file);
39
- });
40
- }
43
+ reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
44
+ };
45
+ reader.readAsText(file);
46
+ });
47
+ },
48
+ getAdditionalFiles() {
49
+ return [];
50
+ }
51
+ };
41
52
  //# sourceMappingURL=reader.kml.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../map/client/readers/reader.kml.js"],"names":["readKML","file","options","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","logger","debug","Error","i18next","t","name","errors","onerror","readAsText"],"mappings":";;;;;QAIgBA,O,GAAAA,O;;AAJhB;;;;AACA;;;;AACA;;;;AAEO,SAASA,OAAT,CAAkBC,IAAlB,EAAwBC,OAAxB,EAAiC;AACtC,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,WAAOE,SAAP,GAAmB,MAAM;AACvB,UAAIC,UAAUH,OAAOI,MAArB;AACA,UAAI;AACFD,kBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,OAFD,CAEE,OAAOI,KAAP,EAAc;AACdC,2BAAOC,KAAP,CAAaF,KAAb;AACAR,eAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEjB,MAAMA,KAAKkB,IAAb,EAArC,CAAV,EAAqE,EAAEC,QAAQP,KAAV,EAArE,CAAP;AACA;AACD;AACDT,cAAQK,OAAR;AACD,KAVD;AAWAH,WAAOe,OAAP,GAAkBR,KAAD,IAAW;AAC1BC,yBAAOC,KAAP,CAAaF,KAAb;AACAR,aAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEjB,MAAMA,KAAKkB,IAAb,EAArC,CAAV,EAAqE,EAAEC,QAAQP,KAAV,EAArE,CAAP;AACD,KAHD;AAIAP,WAAOgB,UAAP,CAAkBrB,IAAlB;AACD,GAlBM,CAAP;AAmBD","file":"reader.kml.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { kml } from '@tmcw/togeojson'\r\n\r\nexport function readKML (file, options) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = kml(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\n }\r\n reader.readAsText(file)\r\n })\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../map/client/readers/reader.kml.js"],"names":["KMLReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","Error","i18next","t","errors","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AAEO,MAAMA,gCAAY;AACvBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,oBAAmBC,KAAKC,IAAK,EAA3C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdd,6BAAOC,KAAP,CAAaa,KAAb;AACAR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACA;AACD;AACDT,gBAAQK,OAAR;AACD,OAVD;AAWAH,aAAOY,OAAP,GAAkBL,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAOa,UAAP,CAAkBlB,IAAlB;AACD,KAlBM,CAAP;AAmBD,GA3BsB;AA4BvBmB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA9BsB,CAAlB","file":"reader.kml.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { kml } from '@tmcw/togeojson'\r\n\r\nexport const KMLReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading KML file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = kml(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}