@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.
- package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/{058fc679-d60a-4501-ac04-71171e5200b8.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
- package/.nyc_output/{8b1830fa-932e-4a61-9837-4a5b18f83ea9.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
- package/.nyc_output/{afd2d144-3570-4858-b94a-b523dbd023dd.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
- package/.nyc_output/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
- package/.nyc_output/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
- package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
- package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
- package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
- package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
- package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/.travis.test.sh +1 -1
- package/CHANGELOG.md +107 -11
- package/coverage/core/api/application.js.html +323 -245
- package/coverage/core/api/authentication.js.html +1 -1
- package/coverage/core/api/db.js.html +108 -108
- package/coverage/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/core/api/hooks/hooks.authentication.js.html +1 -1
- package/coverage/core/api/hooks/hooks.authorisations.js.html +21 -6
- package/coverage/core/api/hooks/hooks.devices.js.html +1 -1
- package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
- package/coverage/core/api/hooks/hooks.logger.js.html +1 -1
- package/coverage/core/api/hooks/hooks.model.js.html +1 -1
- package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
- package/coverage/core/api/hooks/hooks.pusher.js.html +1 -1
- package/coverage/core/api/hooks/hooks.query.js.html +114 -48
- package/coverage/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/core/api/hooks/hooks.users.js.html +1 -1
- package/coverage/core/api/hooks/index.html +12 -12
- package/coverage/core/api/hooks/index.js.html +1 -1
- package/coverage/core/api/index.html +34 -34
- package/coverage/core/api/index.js.html +26 -26
- package/coverage/core/api/marshall.js.html +1 -1
- package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/index.html +1 -1
- package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/core/api/oauth2-handler.js.html +1 -1
- package/coverage/core/api/oauth2-verifier.js.html +1 -1
- package/coverage/core/api/services/account/account.hooks.js.html +1 -1
- package/coverage/core/api/services/account/account.service.js.html +1 -1
- package/coverage/core/api/services/account/index.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +31 -7
- package/coverage/core/api/services/authorisations/index.html +9 -9
- package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/core/api/services/databases/index.html +1 -1
- package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
- package/coverage/core/api/services/devices/devices.service.js.html +1 -1
- package/coverage/core/api/services/devices/index.html +1 -1
- package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
- package/coverage/core/api/services/groups/index.html +1 -1
- package/coverage/core/api/services/index.html +11 -11
- package/coverage/core/api/services/index.js.html +66 -66
- package/coverage/core/api/services/mailer/index.html +1 -1
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/core/api/services/organisations/index.html +1 -1
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
- package/coverage/core/api/services/pusher/index.html +1 -1
- package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
- package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
- package/coverage/core/api/services/storage/index.html +1 -1
- package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/core/api/services/tags/index.html +1 -1
- package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
- package/coverage/core/api/services/users/index.html +1 -1
- package/coverage/core/api/services/users/users.hooks.js.html +1 -1
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +7 -7
- package/coverage/core/common/index.js.html +1 -1
- package/coverage/core/common/permissions.js.html +81 -51
- package/coverage/index.html +39 -39
- package/coverage/lcov-report/core/api/application.js.html +323 -245
- package/coverage/lcov-report/core/api/authentication.js.html +1 -1
- package/coverage/lcov-report/core/api/db.js.html +108 -108
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +21 -6
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +114 -48
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/index.html +12 -12
- package/coverage/lcov-report/core/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/core/api/index.html +34 -34
- package/coverage/lcov-report/core/api/index.js.html +26 -26
- package/coverage/lcov-report/core/api/marshall.js.html +1 -1
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/index.html +1 -1
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +1 -1
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +1 -1
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/account/index.html +1 -1
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +31 -7
- package/coverage/lcov-report/core/api/services/authorisations/index.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
- package/coverage/lcov-report/core/api/services/index.html +11 -11
- package/coverage/lcov-report/core/api/services/index.js.html +66 -66
- package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/users/index.html +1 -1
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +7 -7
- package/coverage/lcov-report/core/common/index.js.html +1 -1
- package/coverage/lcov-report/core/common/permissions.js.html +81 -51
- package/coverage/lcov-report/index.html +39 -39
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/index.html +1 -1
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/lcov-report/map/api/models/index.html +7 -7
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.js.html +1 -1
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +1 -1
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/permissions.js.html +1 -1
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
- package/coverage/lcov.info +948 -769
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +1 -1
- package/coverage/map/api/hooks/index.html +1 -1
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/map/api/models/index.html +7 -7
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +1 -1
- package/coverage/map/api/services/index.js.html +1 -1
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +1 -1
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +1 -1
- package/coverage/map/common/permissions.js.html +1 -1
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/map/common/wcs-utils.js.html +1 -1
- package/coverage/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/map/common/wfs-utils.js.html +1 -1
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +1 -1
- package/extras/tours/map/catalog-panel.js +61 -10
- package/extras/tours/map/create-view.js +25 -0
- package/extras/tours/map/fab.js +10 -1
- package/extras/tours/map/navigation-bar.js +56 -10
- package/lib/core/api/application.js +44 -10
- package/lib/core/api/application.js.map +1 -1
- package/lib/core/api/hooks/hooks.authorisations.js +8 -1
- package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.query.js +135 -100
- package/lib/core/api/hooks/hooks.query.js.map +1 -1
- package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
- package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
- package/lib/core/api/services/pusher/pusher.service.js +40 -16
- package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
- package/lib/core/client/components/chart/KChart.vue +115 -0
- package/lib/core/client/components/chart/KStatsChart.vue +76 -0
- package/lib/core/client/components/chart/index.js +20 -0
- package/lib/core/client/components/chart/index.js.map +1 -0
- package/lib/core/client/components/collection/KColumn.vue +29 -28
- package/lib/core/client/components/collection/KFilter.vue +103 -72
- package/lib/core/client/components/collection/KHistoryEntry.vue +1 -1
- package/lib/core/client/components/collection/KItem.vue +4 -4
- package/lib/core/client/components/editor/KModalEditor.vue +3 -4
- package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
- package/lib/core/client/components/form/KChipsField.vue +4 -4
- package/lib/core/client/components/form/KFileField.vue +13 -6
- package/lib/core/client/components/form/KRoleField.vue +5 -2
- package/lib/core/client/components/form/KTextField.vue +12 -2
- package/lib/core/client/components/form/KUnitField.vue +57 -0
- package/lib/core/client/components/form/KUrlField.vue +1 -1
- package/lib/core/client/components/form/KView.vue +1 -1
- package/lib/core/client/components/frame/KAction.vue +41 -7
- package/lib/core/client/components/frame/KBlock.vue +7 -7
- package/lib/core/client/components/frame/KContent.vue +1 -1
- package/lib/core/client/components/frame/KModal.vue +66 -20
- package/lib/core/client/components/frame/KOpener.vue +1 -1
- package/lib/core/client/components/frame/KPanel.vue +8 -7
- package/lib/core/client/components/frame/KPopupAction.vue +6 -0
- package/lib/core/client/components/frame/KScreen.vue +1 -1
- package/lib/core/client/components/frame/KScrollArea.vue +65 -0
- package/lib/core/client/components/frame/KStamp.vue +4 -2
- package/lib/core/client/components/frame/index.js +6 -6
- package/lib/core/client/components/frame/index.js.map +1 -1
- package/lib/core/client/components/input/KColorChooser.vue +3 -5
- package/lib/core/client/components/input/KIconChooser.vue +41 -40
- package/lib/core/client/components/input/KPalette.vue +1 -1
- package/lib/core/client/components/input/index.js +14 -4
- package/lib/core/client/components/input/index.js.map +1 -1
- package/lib/core/client/components/layout/KAbout.vue +47 -49
- package/lib/core/client/components/layout/KFab.vue +1 -1
- package/lib/core/client/components/layout/KLayout.vue +10 -2
- package/lib/core/client/components/layout/KPage.vue +19 -18
- package/lib/core/client/components/layout/KTour.vue +5 -3
- package/lib/core/client/components/layout/KWindow.vue +211 -59
- package/lib/core/client/components/media/KMediaBrowser.vue +6 -6
- package/lib/core/client/components/menu/KMenu.vue +13 -5
- package/lib/core/client/components/menu/KRadialFab.vue +22 -24
- package/lib/core/client/components/menu/KRadialFabItem.vue +17 -18
- package/lib/core/client/components/team/KAddMember.vue +1 -1
- package/lib/core/client/components/team/KChangeRole.vue +11 -14
- package/lib/core/client/components/team/KGroupCard.vue +12 -5
- package/lib/core/client/components/team/KJoinGroup.vue +22 -22
- package/lib/core/client/components/team/KMemberCard.vue +19 -4
- package/lib/core/client/components/time/KAbsoluteTimeRange.vue +190 -0
- package/lib/core/client/components/time/KRelativeTimeRanges.vue +192 -0
- package/lib/core/client/components/time/index.js +20 -0
- package/lib/core/client/components/time/index.js.map +1 -0
- package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
- package/lib/core/client/i18n/core_en.json +99 -17
- package/lib/core/client/i18n/core_fr.json +94 -18
- package/lib/core/client/index.js +16 -3
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-collection.js +11 -1
- package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-widget.js +26 -12
- package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
- package/lib/core/client/reader.js +46 -15
- package/lib/core/client/reader.js.map +1 -1
- package/lib/core/client/readers/reader.csv.js +33 -22
- package/lib/core/client/readers/reader.csv.js.map +1 -1
- package/lib/core/client/readers/reader.json.js +31 -20
- package/lib/core/client/readers/reader.json.js.map +1 -1
- package/lib/core/client/services/index.js +16 -4
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +10 -4
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +29 -18
- package/lib/core/client/time.js.map +1 -1
- package/lib/core/client/units.js +207 -0
- package/lib/core/client/units.js.map +1 -0
- package/lib/core/client/utils.js +11 -0
- package/lib/core/client/utils.js.map +1 -1
- package/lib/core/common/permissions.js +44 -34
- package/lib/core/common/permissions.js.map +1 -1
- package/lib/core/common/schemas/settings.update.json +86 -4
- package/lib/map/api/hooks/hooks.catalog.js +20 -0
- package/lib/map/api/hooks/hooks.catalog.js.map +1 -1
- package/lib/map/api/models/catalog.model.mongodb.js +6 -1
- package/lib/map/api/models/catalog.model.mongodb.js.map +1 -1
- package/lib/map/api/models/features.model.mongodb.js +8 -0
- package/lib/map/api/models/features.model.mongodb.js.map +1 -1
- package/lib/map/api/services/catalog/catalog.hooks.js +3 -1
- package/lib/map/api/services/catalog/catalog.hooks.js.map +1 -1
- package/lib/map/client/components/KCaptureToolbar.vue +2 -7
- package/lib/map/client/components/KColorLegend.vue +38 -25
- package/lib/map/client/components/KFeaturesChart.vue +84 -114
- package/lib/map/client/components/KFeaturesFilter.vue +37 -38
- package/lib/map/client/components/KFeaturesTable.vue +15 -16
- package/lib/map/client/components/KLayerStyleEditor.vue +1 -1
- package/lib/map/client/components/KLayerStyleForm.vue +123 -51
- package/lib/map/client/components/KLevelSlider.vue +30 -29
- package/lib/map/client/components/KLocationMap.vue +2 -2
- package/lib/map/client/components/KMeasureTool.vue +49 -28
- package/lib/map/client/components/KPositionIndicator.vue +4 -4
- package/lib/map/client/components/KTimeline.vue +30 -35
- package/lib/map/client/components/KTimezoneMap.vue +156 -0
- package/lib/map/client/components/KUrlLegend.vue +11 -10
- package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
- package/lib/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
- package/lib/map/client/components/catalog/KCatalogLayersPanel.vue +56 -0
- package/lib/map/client/components/catalog/KCreateView.vue +91 -0
- package/lib/map/client/components/catalog/KLayerCategories.vue +5 -3
- package/lib/map/client/components/catalog/{KCatalog.vue → KLayersPanel.vue} +23 -22
- package/lib/map/client/components/catalog/KLayersSelector.vue +3 -3
- package/lib/map/client/components/catalog/KUserLayersPanel.vue +40 -0
- package/lib/map/client/components/catalog/KViewSelector.vue +46 -0
- package/lib/map/client/components/catalog/KViewsPanel.vue +110 -0
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +5 -14
- package/lib/map/client/components/form/KTimezoneField.vue +135 -0
- package/lib/map/client/components/widget/KElevationProfile.vue +488 -0
- package/lib/map/client/components/widget/KInformationBox.vue +53 -37
- package/lib/map/client/components/widget/KMapillaryViewer.vue +26 -16
- package/lib/map/client/components/widget/KTimeSeries.vue +283 -358
- package/lib/map/client/i18n/map_en.json +73 -56
- package/lib/map/client/i18n/map_fr.json +75 -58
- package/lib/map/client/init.js +4 -3
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/GradientPath.js +40 -19
- package/lib/map/client/leaflet/GradientPath.js.map +1 -1
- package/lib/map/client/leaflet/TiledFeatureLayer.js +527 -93
- package/lib/map/client/leaflet/TiledFeatureLayer.js.map +1 -1
- package/lib/map/client/leaflet/TiledMeshLayer.js +58 -35
- package/lib/map/client/leaflet/TiledMeshLayer.js.map +1 -1
- package/lib/map/client/leaflet/utils.js +44 -3
- package/lib/map/client/leaflet/utils.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js +16 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.file-layers.js +12 -2
- package/lib/map/client/mixins/globe/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +23 -27
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.popup.js +7 -3
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.style.js +8 -4
- package/lib/map/client/mixins/globe/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -3
- package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/index.js +23 -18
- package/lib/map/client/mixins/index.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +32 -8
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.edit-layers.js +8 -4
- package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +13 -5
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +65 -14
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js +6 -1
- package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.popup.js +4 -2
- package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.style.js +9 -5
- package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +4 -11
- package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +0 -11
- package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js +4 -2
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +150 -150
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.catalog-panel.js +36 -0
- package/lib/map/client/mixins/mixin.catalog-panel.js.map +1 -0
- package/lib/map/client/mixins/mixin.feature-selection.js +17 -8
- package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +36 -16
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +1 -1
- package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
- package/lib/map/client/mixins/mixin.levels.js +26 -12
- package/lib/map/client/mixins/mixin.levels.js.map +1 -1
- package/lib/map/client/mixins/mixin.style.js +1 -0
- package/lib/map/client/mixins/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +22 -28
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/pixi-utils.js +8 -177
- package/lib/map/client/pixi-utils.js.map +1 -1
- package/lib/map/client/readers/index.js +12 -0
- package/lib/map/client/readers/index.js.map +1 -1
- package/lib/map/client/readers/reader.geojson.js +62 -34
- package/lib/map/client/readers/reader.geojson.js.map +1 -1
- package/lib/map/client/readers/reader.gpx.js +32 -21
- package/lib/map/client/readers/reader.gpx.js.map +1 -1
- package/lib/map/client/readers/reader.kml.js +32 -21
- package/lib/map/client/readers/reader.kml.js.map +1 -1
- package/lib/map/client/readers/reader.shp.js +116 -0
- package/lib/map/client/readers/reader.shp.js.map +1 -0
- package/lib/map/client/utils.js +1 -8
- package/lib/map/client/utils.js.map +1 -1
- package/lib/map/common/grid.js +131 -0
- package/lib/map/common/grid.js.map +1 -1
- package/lib/map/common/index.js +22 -11
- package/lib/map/common/index.js.map +1 -1
- package/lib/map/common/meteo-model-grid-source.js +5 -2
- package/lib/map/common/meteo-model-grid-source.js.map +1 -1
- package/lib/map/common/time-based-grid-source.js +5 -2
- package/lib/map/common/time-based-grid-source.js.map +1 -1
- package/lib/test/client/core/account.js +1 -1
- package/lib/test/client/core/account.js.map +1 -1
- package/lib/test/client/core/collection.js +31 -13
- package/lib/test/client/core/collection.js.map +1 -1
- package/lib/test/client/core/layout.js +137 -49
- package/lib/test/client/core/layout.js.map +1 -1
- package/lib/test/client/core/screens.js +1 -1
- package/lib/test/client/core/screens.js.map +1 -1
- package/lib/test/client/core/utils.js +89 -22
- package/lib/test/client/core/utils.js.map +1 -1
- package/lib/test/client/map/catalog.js +134 -41
- package/lib/test/client/map/catalog.js.map +1 -1
- package/lib/test/client/map/controls.js +7 -4
- package/lib/test/client/map/controls.js.map +1 -1
- package/lib/test/client/map/index.js +12 -0
- package/lib/test/client/map/index.js.map +1 -1
- package/lib/test/client/map/utils.js +67 -0
- package/lib/test/client/map/utils.js.map +1 -0
- package/package.json +5 -6
- package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
- package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
- package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +0 -1
- package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
- package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
- package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +0 -1
- package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +0 -1
- package/extras/tours/map/favorite-views.js +0 -53
- package/lib/core/client/components/frame/KChart.vue +0 -60
- package/lib/core/client/components/input/KCodeInput.vue +0 -50
- package/lib/core/client/components/input/KTimeRangeChooser.vue +0 -109
- package/lib/core/client/components/time/KTimeRange.vue +0 -144
- package/lib/map/client/components/KFavoriteViews.vue +0 -217
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.feature-service.js"],"names":["methods","getBaseQueryForFeatures","options","baseQuery","result","Object","assign","getFeaturesUpdateInterval","interval","_","has","get","engine","moment","duration","getFeaturesQueryInterval","queryInterval","asMilliseconds","shouldSkipFeaturesUpdate","lastUpdateTime","now","Time","getCurrentTime","isSameOrAfter","clone","add","getProbeFeatures","query","response","$api","getService","probeService","find","processor","features","type","forEach","feature","getProbeFeaturesFromLayer","name","layer","getLayerByName","getFeatures","variables","$groupBy","featureId","$aggregate","map","variable","isDuration","gte","subtract","lte","$limit","$sort","time","runTime","$gte","format","$lte","service","getFeaturesFromLayer","getMeasureValueAtCurrentTime","times","values","Array","isArray","nearestTime","utc","index","getProbedLocationMeasureAtCurrentTime","probedLocation","cloneDeep","forOwn","properties","value","key","set","getMeasureForFeature","startTime","endTime","setCursor","merge","length","error","logger","unsetCursor","checkFeatures","geoJson","kinks","redundantCoordinates","mutate","kinksFeatures","remove","invalidFeatures","createFeatures","layerId","chunkSize","processCallback","_id","create","chunks","chunkPoints","chunk","explodedFeature","nbPoints","push","i","editFeaturesGeometry","updatedFeatures","updatedFeature","patch","pick","editFeaturesProperties","removeFeatures","geoJsonOrLayerId","created","timeout"],"mappings":"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","file":"mixin.feature-service.js","sourcesContent":["import _ from 'lodash'\r\nimport explode from '@turf/explode'\r\nimport kinks from '@turf/kinks'\r\nimport clean from '@turf/clean-coords'\r\nimport { getType } from '@turf/invariant'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { getNearestTime } from '../utils'\r\n\r\nexport default {\r\n methods: {\r\n async getBaseQueryForFeatures (options) {\r\n // Any base query to process ?\r\n const baseQuery = {}\r\n if (options.baseQuery) {\r\n if (typeof options.baseQuery === 'function') {\r\n const result = await options.baseQuery()\r\n // A null query indicate to skip update\r\n if (!result) return\r\n else Object.assign(baseQuery, result)\r\n } else {\r\n Object.assign(baseQuery, options.baseQuery)\r\n }\r\n }\r\n return baseQuery\r\n },\r\n getFeaturesUpdateInterval (options) {\r\n const interval = (_.has(options, 'every')\r\n ? _.get(options, 'every')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).interval)\r\n return moment.duration(interval)\r\n },\r\n getFeaturesQueryInterval (options) {\r\n const interval = this.getFeaturesUpdateInterval(options)\r\n let queryInterval = (_.has(options, 'queryFrom')\r\n ? _.get(options, 'queryFrom')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).queryInterval)\r\n // If query interval not given use 2 x refresh interval as default value\r\n // this ensures we cover last interval if server/client update processes are not in sync\r\n if (!queryInterval && interval) queryInterval = moment.duration(-2 * interval.asMilliseconds())\r\n return moment.duration(queryInterval)\r\n },\r\n shouldSkipFeaturesUpdate (lastUpdateTime, options, interval) {\r\n // If not given try to compute query interval from options\r\n if (!interval) {\r\n interval = this.getFeaturesUpdateInterval(options)\r\n }\r\n if (!interval) return true\r\n const now = Time.getCurrentTime()\r\n // If query interval has elapsed since last update we need to update again\r\n return now.isSameOrAfter(lastUpdateTime.clone().add(interval))\r\n },\r\n async getProbeFeatures (options) {\r\n // Any base query to process ?\r\n const query = await this.getBaseQueryForFeatures(options)\r\n const response = await this.$api.getService(options.probeService).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getProbeFeaturesFromLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getProbeFeatures(layer)\r\n },\r\n async getFeatures (options, queryInterval) {\r\n // If not given try to compute query interval from options\r\n if (!queryInterval) {\r\n queryInterval = this.getFeaturesQueryInterval(options)\r\n }\r\n // Any base query to process ?\r\n let query = await this.getBaseQueryForFeatures(options)\r\n // Check if we have variables to be aggregate in time or not\r\n if (options.variables) {\r\n query = Object.assign({\r\n $groupBy: options.featureId,\r\n $aggregate: options.variables.map(variable => variable.name)\r\n }, query)\r\n // Request feature with at least one data available during last query interval if none given\r\n const now = Time.getCurrentTime()\r\n if (moment.isDuration(queryInterval)) {\r\n // Depending on the duration format we might have negative or positive values\r\n const gte = (queryInterval.asMilliseconds() > 0\r\n ? now.clone().subtract(queryInterval) : now.clone().add(queryInterval))\r\n const lte = now\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1, runTime: -1 },\r\n time: {\r\n $gte: gte.format(),\r\n $lte: lte.format()\r\n }\r\n })\r\n } else if (typeof queryInterval === 'object') {\r\n query.time = queryInterval\r\n } else {\r\n // Last available data only for realtime visualization\r\n Object.assign(query, {\r\n $limit: 1,\r\n $sort: { time: -1, runTime: -1 },\r\n time: { $lte: now.format() }\r\n })\r\n }\r\n }\r\n const response = await this.$api.getService(options.service).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getFeaturesFromLayer (name, queryInterval) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getFeatures(layer, queryInterval)\r\n },\r\n getMeasureValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n /// Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n return (nearestTime.index >= 0 ? values[nearestTime.index] : null)\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationMeasureAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'time.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getMeasureValueAtCurrentTime(times, value))\r\n _.set(feature, 'time.' + key, this.getMeasureValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n async getMeasureForFeature (layer, feature, startTime, endTime) {\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n const result = await this.getFeatures(_.merge({\r\n baseQuery: { ['properties.' + layer.featureId]: _.get(feature, 'properties.' + layer.featureId) }\r\n }, layer), {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n })\r\n if (result.features.length > 0) {\r\n probedLocation = result.features[0]\r\n } else {\r\n probedLocation = _.cloneDeep(feature)\r\n }\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n checkFeatures (geoJson, options = {\r\n kinks: true,\r\n redundantCoordinates: true\r\n }) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Removes redundant coordinates\r\n if (options.redundantCoordinates) {\r\n features.forEach(feature => clean(feature, { mutate: true }))\r\n }\r\n // Filter invalid features\r\n let kinksFeatures\r\n if (options.kinks) {\r\n kinksFeatures = _.remove(features, feature => {\r\n const type = getType(feature)\r\n if ((type === 'MultiPolygon') || (type === 'Polygon')) {\r\n const invalidFeatures = kinks(feature)\r\n return _.get(invalidFeatures, 'features', []).length > 0\r\n } else { // No possible self-intersection on points, self-intersections allowed on lines\r\n return false\r\n }\r\n })\r\n }\r\n return { kinks: kinksFeatures }\r\n },\r\n async createFeatures (geoJson, layerId, chunkSize = 5000, processCallback) {\r\n if (!layerId) return\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => {\r\n // Remove any temporary ID as we will use the one from MongoDB\r\n delete feature._id\r\n feature.layer = layerId\r\n })\r\n // Single edition mode\r\n if (features.length === 1) {\r\n const feature = await this.$api.getService('features').create(features[0])\r\n return feature\r\n } else {\r\n // Create chunks to avoid reaching some limits (upload size, timeout, etc.)\r\n // We create chunks according to the number of points and not features.\r\n // Indeed otherwise it would create very different chunks depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n // const chunks = _.chunk(features, chunkSize)\r\n const chunks = []\r\n let chunkPoints = 0\r\n let chunk = []\r\n features.forEach(feature => {\r\n const explodedFeature = explode(feature)\r\n const nbPoints = explodedFeature.features.length\r\n // Check if current chunk is not full\r\n if ((chunkPoints + nbPoints) <= chunkSize) {\r\n chunkPoints += nbPoints\r\n chunk.push(feature)\r\n } else {\r\n // Otherwise push current chunk if not empty\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Then start new chunk\r\n chunk = [feature]\r\n chunkPoints = nbPoints\r\n }\r\n })\r\n // Push last chunk\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Write the chunks\r\n for (let i = 0; i < chunks.length; i++) {\r\n await this.$api.getService('features').create(chunks[i])\r\n if (typeof processCallback === 'function') await processCallback(i, chunks[i])\r\n }\r\n }\r\n },\r\n async editFeaturesGeometry (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['geometry']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async editFeaturesProperties (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['properties']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async removeFeatures (geoJsonOrLayerId) {\r\n // Remove all features of a given layer\r\n if (typeof geoJsonOrLayerId === 'string') {\r\n await this.$api.getService('features').remove(null, { query: { layer: geoJsonOrLayerId } })\r\n } else {\r\n const features = (geoJsonOrLayerId.type === 'FeatureCollection' ? geoJsonOrLayerId.features : [geoJsonOrLayerId])\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) await this.$api.getService('features').remove(feature._id)\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Extend timeout for large write operations\r\n this.$api.getService('features').timeout = 60 * 60 * 1000 // 1h should be sufficient since we also have size limits\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.feature-service.js"],"names":["methods","getBaseQueryForFeatures","options","baseQuery","result","Object","assign","getFeaturesUpdateInterval","interval","_","has","get","engine","moment","duration","getFeaturesQueryInterval","queryInterval","asMilliseconds","shouldSkipFeaturesUpdate","lastUpdateTime","now","Time","getCurrentTime","elapsed","diff","Math","abs","getFeaturesLevel","selectableLevelsLayer","name","selectedLevel","getProbeFeatures","query","response","$api","getService","probeService","find","processor","features","type","forEach","feature","getProbeFeaturesFromLayer","layer","getLayerByName","getFeatures","queryLevel","variables","$groupBy","featureId","$aggregate","map","variable","isDuration","gte","clone","subtract","add","lte","$sort","time","runTime","$gte","format","$lte","$limit","isNil","level","service","getFeaturesFromLayer","getMeasureValueAtCurrentTime","times","values","Array","isArray","nearestTime","utc","index","getProbedLocationMeasureAtCurrentTime","probedLocation","cloneDeep","forOwn","properties","value","key","set","getMeasureForFeature","startTime","endTime","setCursor","merge","length","error","logger","unsetCursor","checkFeatures","geoJson","kinks","redundantCoordinates","mutate","kinksFeatures","remove","invalidFeatures","createFeatures","layerId","chunkSize","processCallback","_id","create","chunks","chunkPoints","chunk","explodedFeature","nbPoints","push","i","editFeaturesGeometry","updatedFeatures","updatedFeature","patch","pick","editFeaturesProperties","removeFeatures","geoJsonOrLayerId","created","timeout"],"mappings":"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","file":"mixin.feature-service.js","sourcesContent":["import _ from 'lodash'\r\nimport explode from '@turf/explode'\r\nimport kinks from '@turf/kinks'\r\nimport clean from '@turf/clean-coords'\r\nimport { getType } from '@turf/invariant'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { getNearestTime } from '../utils'\r\n\r\nexport default {\r\n methods: {\r\n async getBaseQueryForFeatures (options) {\r\n // Any base query to process ?\r\n const baseQuery = {}\r\n if (options.baseQuery) {\r\n if (typeof options.baseQuery === 'function') {\r\n const result = await options.baseQuery()\r\n // A null query indicate to skip update\r\n if (!result) return\r\n else Object.assign(baseQuery, result)\r\n } else {\r\n Object.assign(baseQuery, options.baseQuery)\r\n }\r\n }\r\n return baseQuery\r\n },\r\n getFeaturesUpdateInterval (options) {\r\n const interval = (_.has(options, 'every')\r\n ? _.get(options, 'every')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).interval)\r\n return (interval ? moment.duration(interval) : null)\r\n },\r\n getFeaturesQueryInterval (options) {\r\n const interval = this.getFeaturesUpdateInterval(options)\r\n let queryInterval = (_.has(options, 'queryFrom')\r\n ? _.get(options, 'queryFrom')\r\n // Backward compatibility with old configuration style\r\n : _.get(options, this.engine, options).queryInterval)\r\n // If query interval not given use 2 x refresh interval as default value\r\n // this ensures we cover last interval if server/client update processes are not in sync\r\n if (!queryInterval && interval) queryInterval = moment.duration(-2 * interval.asMilliseconds())\r\n return (queryInterval ? moment.duration(queryInterval) : null)\r\n },\r\n shouldSkipFeaturesUpdate (lastUpdateTime, options, interval) {\r\n // If not given try to compute query interval from options\r\n if (!interval) {\r\n interval = this.getFeaturesUpdateInterval(options)\r\n }\r\n // We assume this is not a time-varying layer\r\n if (!interval) return true\r\n const now = Time.getCurrentTime()\r\n const elapsed = moment.duration(now.diff(lastUpdateTime))\r\n // If query interval has elapsed since last update we need to update again\r\n return (Math.abs(elapsed.asMilliseconds()) < interval.asMilliseconds())\r\n },\r\n getFeaturesLevel (options) {\r\n return (this.selectableLevelsLayer && (this.selectableLevelsLayer.name === options.name) ? this.selectedLevel : null)\r\n },\r\n async getProbeFeatures (options) {\r\n // Any base query to process ?\r\n const query = await this.getBaseQueryForFeatures(options)\r\n const response = await this.$api.getService(options.probeService).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getProbeFeaturesFromLayer (name) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getProbeFeatures(layer)\r\n },\r\n async getFeatures (options, queryInterval, queryLevel) {\r\n // If not given try to compute query interval from options\r\n if (!queryInterval) {\r\n queryInterval = this.getFeaturesQueryInterval(options)\r\n }\r\n // If not given try to compute query level from options\r\n if (!queryLevel) {\r\n queryLevel = this.getFeaturesLevel(options)\r\n }\r\n // Any base query to process ?\r\n let query = await this.getBaseQueryForFeatures(options)\r\n // Request features with at least one data available during last query interval\r\n if (queryInterval) {\r\n // Check if we have variables to be aggregated in time or not\r\n if (options.variables) {\r\n query = Object.assign({\r\n $groupBy: options.featureId,\r\n $aggregate: options.variables.map(variable => variable.name)\r\n }, query)\r\n } else if (options.featureId) {\r\n query = Object.assign({\r\n $groupBy: options.featureId,\r\n $aggregate: ['geometry']\r\n }, query)\r\n }\r\n const now = Time.getCurrentTime()\r\n if (moment.isDuration(queryInterval)) {\r\n // Depending on the duration format we might have negative or positive values\r\n const gte = (queryInterval.asMilliseconds() > 0\r\n ? now.clone().subtract(queryInterval) : now.clone().add(queryInterval))\r\n const lte = now\r\n Object.assign(query, {\r\n $sort: { time: -1, runTime: -1 },\r\n time: {\r\n $gte: gte.format(),\r\n $lte: lte.format()\r\n }\r\n })\r\n // If we can aggregate then keep track of last element of each aggregation\r\n if (options.featureId) query.$limit = 1\r\n } else if (typeof queryInterval === 'object') {\r\n query.time = queryInterval\r\n } else {\r\n Object.assign(query, {\r\n $sort: { time: -1, runTime: -1 },\r\n time: { $lte: now.format() }\r\n })\r\n // If we can aggregate then keep track of last element of each aggregation\r\n if (options.featureId) query.$limit = 1\r\n }\r\n }\r\n if (!_.isNil(queryLevel)) {\r\n query.level = queryLevel\r\n }\r\n const response = await this.$api.getService(options.service).find({ query })\r\n if (typeof options.processor === 'function') {\r\n const features = (response.type === 'FeatureCollection' ? response.features : [response])\r\n features.forEach(feature => options.processor(feature))\r\n }\r\n return response\r\n },\r\n async getFeaturesFromLayer (name, queryInterval) {\r\n // Retrieve the layer\r\n const layer = this.getLayerByName(name)\r\n if (!layer) return\r\n return this.getFeatures(layer, queryInterval)\r\n },\r\n getMeasureValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n /// Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n return (nearestTime.index >= 0 ? values[nearestTime.index] : null)\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationMeasureAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'time.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getMeasureValueAtCurrentTime(times, value))\r\n _.set(feature, 'time.' + key, this.getMeasureValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n async getMeasureForFeature (layer, feature, startTime, endTime) {\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n const result = await this.getFeatures(_.merge({\r\n baseQuery: { ['properties.' + layer.featureId]: _.get(feature, 'properties.' + layer.featureId) }\r\n }, layer), {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n })\r\n if (result.features.length > 0) {\r\n probedLocation = result.features[0]\r\n } else {\r\n probedLocation = _.cloneDeep(feature)\r\n }\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n checkFeatures (geoJson, options = {\r\n kinks: true,\r\n redundantCoordinates: true\r\n }) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Removes redundant coordinates\r\n if (options.redundantCoordinates) {\r\n features.forEach(feature => clean(feature, { mutate: true }))\r\n }\r\n // Filter invalid features\r\n let kinksFeatures\r\n if (options.kinks) {\r\n kinksFeatures = _.remove(features, feature => {\r\n const type = getType(feature)\r\n if ((type === 'MultiPolygon') || (type === 'Polygon')) {\r\n const invalidFeatures = kinks(feature)\r\n return _.get(invalidFeatures, 'features', []).length > 0\r\n } else { // No possible self-intersection on points, self-intersections allowed on lines\r\n return false\r\n }\r\n })\r\n }\r\n return { kinks: kinksFeatures }\r\n },\r\n async createFeatures (geoJson, layerId, chunkSize = 5000, processCallback) {\r\n if (!layerId) return\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => {\r\n // Remove any temporary ID as we will use the one from MongoDB\r\n delete feature._id\r\n feature.layer = layerId\r\n })\r\n // Single edition mode\r\n if (features.length === 1) {\r\n const feature = await this.$api.getService('features').create(features[0])\r\n return feature\r\n } else {\r\n // Create chunks to avoid reaching some limits (upload size, timeout, etc.)\r\n // We create chunks according to the number of points and not features.\r\n // Indeed otherwise it would create very different chunks depending on the geometry type\r\n // (eg a bucket of 1000 polygons can actually contains a lot of points).\r\n // const chunks = _.chunk(features, chunkSize)\r\n const chunks = []\r\n let chunkPoints = 0\r\n let chunk = []\r\n features.forEach(feature => {\r\n const explodedFeature = explode(feature)\r\n const nbPoints = explodedFeature.features.length\r\n // Check if current chunk is not full\r\n if ((chunkPoints + nbPoints) <= chunkSize) {\r\n chunkPoints += nbPoints\r\n chunk.push(feature)\r\n } else {\r\n // Otherwise push current chunk if not empty\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Then start new chunk\r\n chunk = [feature]\r\n chunkPoints = nbPoints\r\n }\r\n })\r\n // Push last chunk\r\n if (chunk.length > 0) {\r\n chunks.push(chunk)\r\n }\r\n // Write the chunks\r\n for (let i = 0; i < chunks.length; i++) {\r\n await this.$api.getService('features').create(chunks[i])\r\n if (typeof processCallback === 'function') await processCallback(i, chunks[i])\r\n }\r\n }\r\n },\r\n async editFeaturesGeometry (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['geometry']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async editFeaturesProperties (geoJson) {\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n const updatedFeatures = []\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) {\r\n const updatedFeature = await this.$api.getService('features').patch(feature._id, _.pick(feature, ['properties']))\r\n updatedFeatures.push(updatedFeature)\r\n }\r\n }\r\n return (geoJson.type === 'FeatureCollection' ? Object.assign(geoJson, { features: updatedFeatures }) : updatedFeatures)\r\n },\r\n async removeFeatures (geoJsonOrLayerId) {\r\n // Remove all features of a given layer\r\n if (typeof geoJsonOrLayerId === 'string') {\r\n await this.$api.getService('features').remove(null, { query: { layer: geoJsonOrLayerId } })\r\n } else {\r\n const features = (geoJsonOrLayerId.type === 'FeatureCollection' ? geoJsonOrLayerId.features : [geoJsonOrLayerId])\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i]\r\n if (feature._id) await this.$api.getService('features').remove(feature._id)\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n // Extend timeout for large write operations\r\n this.$api.getService('features').timeout = 60 * 60 * 1000 // 1h should be sufficient since we also have size limits\r\n }\r\n}\r\n"]}
|
|
@@ -20,7 +20,7 @@ exports.default = {
|
|
|
20
20
|
if (_lodash2.default.has(engineOptions, 'infobox') && !_lodash2.default.get(engineOptions, 'infobox')) return [];
|
|
21
21
|
if (_lodash2.default.has(properties, 'infobox') && !_lodash2.default.get(properties, 'infobox')) return [];
|
|
22
22
|
// Otherwise merge options
|
|
23
|
-
const infoboxStyle = Object.assign({}, this
|
|
23
|
+
const infoboxStyle = Object.assign({}, _lodash2.default.get(this, 'activityOptions.engine.infobox'), engineOptions.infobox, properties.infobox);
|
|
24
24
|
|
|
25
25
|
if (infoboxStyle.pick) {
|
|
26
26
|
properties = _lodash2.default.pick(properties, infoboxStyle.pick);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.infobox.js"],"names":["methods","getDefaultInfoBox","feature","options","properties","engineOptions","_","get","engine","has","infoboxStyle","Object","assign","
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.infobox.js"],"names":["methods","getDefaultInfoBox","feature","options","properties","engineOptions","_","get","engine","has","infoboxStyle","Object","assign","infobox","pick","omit","created","registerStyle"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,WAAS;AACPC,sBAAmBC,OAAnB,EAA4BC,OAA5B,EAAqC;AACnC,UAAIC,aAAaF,QAAQE,UAAzB;AACA,UAAIA,UAAJ,EAAgB;AACd,cAAMC,gBAAgBC,iBAAEC,GAAF,CAAMJ,OAAN,EAAe,KAAKK,MAApB,EAA4BL,OAA5B,CAAtB;AACA;AACA,YAAIG,iBAAEG,GAAF,CAAMJ,aAAN,EAAqB,SAArB,KAAmC,CAACC,iBAAEC,GAAF,CAAMF,aAAN,EAAqB,SAArB,CAAxC,EAAyE,OAAO,EAAP;AACzE,YAAIC,iBAAEG,GAAF,CAAML,UAAN,EAAkB,SAAlB,KAAgC,CAACE,iBAAEC,GAAF,CAAMH,UAAN,EAAkB,SAAlB,CAArC,EAAmE,OAAO,EAAP;AACnE;AACA,cAAMM,eAAeC,OAAOC,MAAP,CAAc,EAAd,EACnBN,iBAAEC,GAAF,CAAM,IAAN,EAAY,gCAAZ,CADmB,EAEnBF,cAAcQ,OAFK,EAEIT,WAAWS,OAFf,CAArB;;AAIA,YAAIH,aAAaI,IAAjB,EAAuB;AACrBV,uBAAaE,iBAAEQ,IAAF,CAAOV,UAAP,EAAmBM,aAAaI,IAAhC,CAAb;AACD,SAFD,MAEO,IAAIJ,aAAaK,IAAjB,EAAuB;AAC5BX,uBAAaE,iBAAES,IAAF,CAAOX,UAAP,EAAmBM,aAAaK,IAAhC,CAAb;AACD;AACF;AACD,aAAOX,UAAP;AACD;AApBM,GADI;AAuBbY,YAAW;AACT,SAAKC,aAAL,CAAmB,SAAnB,EAA8B,KAAKhB,iBAAnC;AACD;AAzBY,C","file":"mixin.infobox.js","sourcesContent":["import _ from 'lodash'\r\n\r\nexport default {\r\n methods: {\r\n getDefaultInfoBox (feature, options) {\r\n let properties = feature.properties\r\n if (properties) {\r\n const engineOptions = _.get(options, this.engine, options)\r\n // Check if explicitely disabled first\r\n if (_.has(engineOptions, 'infobox') && !_.get(engineOptions, 'infobox')) return []\r\n if (_.has(properties, 'infobox') && !_.get(properties, 'infobox')) return []\r\n // Otherwise merge options\r\n const infoboxStyle = Object.assign({},\r\n _.get(this, 'activityOptions.engine.infobox'),\r\n engineOptions.infobox, properties.infobox)\r\n\r\n if (infoboxStyle.pick) {\r\n properties = _.pick(properties, infoboxStyle.pick)\r\n } else if (infoboxStyle.omit) {\r\n properties = _.omit(properties, infoboxStyle.omit)\r\n }\r\n }\r\n return properties\r\n }\r\n },\r\n created () {\r\n this.registerStyle('infobox', this.getDefaultInfoBox)\r\n }\r\n}\r\n"]}
|
|
@@ -24,33 +24,47 @@ exports.default = {
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
methods: {
|
|
27
|
-
setSelectableLevels(layer, levels, initialLevel
|
|
27
|
+
setSelectableLevels(layer, levels, initialLevel) {
|
|
28
28
|
this.selectableLevels = levels;
|
|
29
29
|
this.selectableLevelsLayer = layer;
|
|
30
|
-
if (initialLevel
|
|
31
|
-
initialLevel = _lodash2.default.get(levels, 'values[0]');
|
|
32
|
-
if (initialLevel === undefined) {
|
|
33
|
-
initialLevel = _lodash2.default.get(levels, 'range.min');
|
|
34
|
-
}
|
|
30
|
+
if (_lodash2.default.isNil(initialLevel)) {
|
|
31
|
+
initialLevel = _lodash2.default.get(levels, 'values[0]', _lodash2.default.get(levels, 'range.min'));
|
|
35
32
|
}
|
|
36
33
|
this.setSelectedLevel(initialLevel);
|
|
37
34
|
},
|
|
38
35
|
clearSelectableLevels(layer) {
|
|
39
|
-
if (this.selectableLevelsLayer
|
|
36
|
+
if (this.selectableLevelsLayer) {
|
|
40
37
|
this.setSelectedLevel(null);
|
|
41
38
|
this.selectableLevels = {};
|
|
42
39
|
this.selectableLevelsLayer = null;
|
|
43
|
-
// level slider was associated with given layer
|
|
44
|
-
return true;
|
|
45
40
|
}
|
|
46
|
-
|
|
47
|
-
// level slider wasn't associated with given layer
|
|
48
|
-
return false;
|
|
49
41
|
},
|
|
50
42
|
setSelectedLevel(level) {
|
|
51
43
|
this.selectedLevel = level;
|
|
52
44
|
this.$emit('selected-level-changed', level);
|
|
45
|
+
},
|
|
46
|
+
onShowSelectableLevelsLayer(layer) {
|
|
47
|
+
// Check for valid types
|
|
48
|
+
const levels = _lodash2.default.get(layer, 'levels');
|
|
49
|
+
if (levels) {
|
|
50
|
+
this.setSelectableLevels(layer, levels);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
onHideSelectableLevelsLayer(layer) {
|
|
54
|
+
// Check for valid types
|
|
55
|
+
const levels = _lodash2.default.get(layer, 'levels');
|
|
56
|
+
if (levels) {
|
|
57
|
+
this.clearSelectableLevels(layer);
|
|
58
|
+
}
|
|
53
59
|
}
|
|
60
|
+
},
|
|
61
|
+
created() {
|
|
62
|
+
this.$on('layer-shown', this.onShowSelectableLevelsLayer);
|
|
63
|
+
this.$on('layer-hidden', this.onHideSelectableLevelsLayer);
|
|
64
|
+
},
|
|
65
|
+
beforeDestroy() {
|
|
66
|
+
this.$off('layer-shown', this.onShowSelectableLevelsLayer);
|
|
67
|
+
this.$off('layer-hidden', this.onHideSelectableLevelsLayer);
|
|
54
68
|
}
|
|
55
69
|
};
|
|
56
70
|
module.exports = exports['default'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.levels.js"],"names":["data","selectedLevel","selectableLevels","selectableLevelsLayer","computed","hasSelectableLevels","_","get","length","methods","setSelectableLevels","layer","levels","initialLevel","
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.levels.js"],"names":["data","selectedLevel","selectableLevels","selectableLevelsLayer","computed","hasSelectableLevels","_","get","length","methods","setSelectableLevels","layer","levels","initialLevel","isNil","setSelectedLevel","clearSelectableLevels","level","$emit","onShowSelectableLevelsLayer","onHideSelectableLevelsLayer","created","$on","beforeDestroy","$off"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,SAAQ;AACN,WAAO;AACLC,qBAAe,IADV;AAELC,wBAAkB,EAFb;AAGLC,6BAAuB;AAHlB,KAAP;AAKD,GAPY;AAQbC,YAAU;AACRC,0BAAuB;AACrB,aAAOC,iBAAEC,GAAF,CAAM,KAAKL,gBAAX,EAA6B,QAA7B,EAAuC,EAAvC,EAA2CM,MAA3C,GAAoD,CAA3D;AACD;AAHO,GARG;AAabC,WAAS;AACPC,wBAAqBC,KAArB,EAA4BC,MAA5B,EAAoCC,YAApC,EAAkD;AAChD,WAAKX,gBAAL,GAAwBU,MAAxB;AACA,WAAKT,qBAAL,GAA6BQ,KAA7B;AACA,UAAIL,iBAAEQ,KAAF,CAAQD,YAAR,CAAJ,EAA2B;AACzBA,uBAAeP,iBAAEC,GAAF,CAAMK,MAAN,EAAc,WAAd,EAA2BN,iBAAEC,GAAF,CAAMK,MAAN,EAAc,WAAd,CAA3B,CAAf;AACD;AACD,WAAKG,gBAAL,CAAsBF,YAAtB;AACD,KARM;AASPG,0BAAuBL,KAAvB,EAA8B;AAC5B,UAAI,KAAKR,qBAAT,EAAgC;AAC9B,aAAKY,gBAAL,CAAsB,IAAtB;AACA,aAAKb,gBAAL,GAAwB,EAAxB;AACA,aAAKC,qBAAL,GAA6B,IAA7B;AACD;AACF,KAfM;AAgBPY,qBAAkBE,KAAlB,EAAyB;AACvB,WAAKhB,aAAL,GAAqBgB,KAArB;AACA,WAAKC,KAAL,CAAW,wBAAX,EAAqCD,KAArC;AACD,KAnBM;AAoBPE,gCAA6BR,KAA7B,EAAoC;AAClC;AACA,YAAMC,SAASN,iBAAEC,GAAF,CAAMI,KAAN,EAAa,QAAb,CAAf;AACA,UAAIC,MAAJ,EAAY;AACV,aAAKF,mBAAL,CAAyBC,KAAzB,EAAgCC,MAAhC;AACD;AACF,KA1BM;AA2BPQ,gCAA6BT,KAA7B,EAAoC;AAClC;AACA,YAAMC,SAASN,iBAAEC,GAAF,CAAMI,KAAN,EAAa,QAAb,CAAf;AACA,UAAIC,MAAJ,EAAY;AACV,aAAKI,qBAAL,CAA2BL,KAA3B;AACD;AACF;AAjCM,GAbI;AAgDbU,YAAW;AACT,SAAKC,GAAL,CAAS,aAAT,EAAwB,KAAKH,2BAA7B;AACA,SAAKG,GAAL,CAAS,cAAT,EAAyB,KAAKF,2BAA9B;AACD,GAnDY;AAoDbG,kBAAiB;AACf,SAAKC,IAAL,CAAU,aAAV,EAAyB,KAAKL,2BAA9B;AACA,SAAKK,IAAL,CAAU,cAAV,EAA0B,KAAKJ,2BAA/B;AACD;AAvDY,C","file":"mixin.levels.js","sourcesContent":["import _ from 'lodash'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n selectedLevel: null,\r\n selectableLevels: {},\r\n selectableLevelsLayer: null\r\n }\r\n },\r\n computed: {\r\n hasSelectableLevels () {\r\n return _.get(this.selectableLevels, 'values', []).length > 0\r\n }\r\n },\r\n methods: {\r\n setSelectableLevels (layer, levels, initialLevel) {\r\n this.selectableLevels = levels\r\n this.selectableLevelsLayer = layer\r\n if (_.isNil(initialLevel)) {\r\n initialLevel = _.get(levels, 'values[0]', _.get(levels, 'range.min'))\r\n }\r\n this.setSelectedLevel(initialLevel)\r\n },\r\n clearSelectableLevels (layer) {\r\n if (this.selectableLevelsLayer) {\r\n this.setSelectedLevel(null)\r\n this.selectableLevels = {}\r\n this.selectableLevelsLayer = null\r\n }\r\n },\r\n setSelectedLevel (level) {\r\n this.selectedLevel = level\r\n this.$emit('selected-level-changed', level)\r\n },\r\n onShowSelectableLevelsLayer (layer) {\r\n // Check for valid types\r\n const levels = _.get(layer, 'levels')\r\n if (levels) {\r\n this.setSelectableLevels(layer, levels)\r\n }\r\n },\r\n onHideSelectableLevelsLayer (layer) {\r\n // Check for valid types\r\n const levels = _.get(layer, 'levels')\r\n if (levels) {\r\n this.clearSelectableLevels(layer)\r\n }\r\n }\r\n },\r\n created () {\r\n this.$on('layer-shown', this.onShowSelectableLevelsLayer)\r\n this.$on('layer-hidden', this.onHideSelectableLevelsLayer)\r\n },\r\n beforeDestroy () {\r\n this.$off('layer-shown', this.onShowSelectableLevelsLayer)\r\n this.$off('layer-hidden', this.onHideSelectableLevelsLayer)\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.style.js"],"names":["methods","registerStyle","type","generator","push","unregisterStyle","_","pull","generateStyle","args","Array","from","arguments","shift","style","i","length"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,WAAS;AACPC,kBAAeC,IAAf,EAAqBC,SAArB,EAAgC;AAC9B;AACA,UAAI,CAAC,KAAKD,OAAO,SAAZ,CAAL,EAA6B,KAAKA,OAAO,SAAZ,IAAyB,EAAzB;AAC7B,WAAKA,OAAO,SAAZ,EAAuBE,IAAvB,CAA4BD,SAA5B;AACD,KALM;AAMPE,oBAAiBH,IAAjB,EAAuBC,SAAvB,EAAkC;AAChCG,uBAAEC,IAAF,CAAO,KAAKL,OAAO,SAAZ,CAAP,EAA+BC,SAA/B;AACD,KARM;AASPK,oBAAiB;AACf,YAAMC,OAAOC,MAAMC,IAAN,CAAWC,SAAX,CAAb;AACA,YAAMV,OAAOO,KAAK,CAAL,CAAb;
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.style.js"],"names":["methods","registerStyle","type","generator","push","unregisterStyle","_","pull","generateStyle","args","Array","from","arguments","shift","style","i","length"],"mappings":";;;;;;AAAA;;;;;;kBAEe;AACbA,WAAS;AACPC,kBAAeC,IAAf,EAAqBC,SAArB,EAAgC;AAC9B;AACA,UAAI,CAAC,KAAKD,OAAO,SAAZ,CAAL,EAA6B,KAAKA,OAAO,SAAZ,IAAyB,EAAzB;AAC7B,WAAKA,OAAO,SAAZ,EAAuBE,IAAvB,CAA4BD,SAA5B;AACD,KALM;AAMPE,oBAAiBH,IAAjB,EAAuBC,SAAvB,EAAkC;AAChCG,uBAAEC,IAAF,CAAO,KAAKL,OAAO,SAAZ,CAAP,EAA+BC,SAA/B;AACD,KARM;AASPK,oBAAiB;AACf,YAAMC,OAAOC,MAAMC,IAAN,CAAWC,SAAX,CAAb;AACA,YAAMV,OAAOO,KAAK,CAAL,CAAb;AACA,UAAI,CAAC,KAAKP,OAAO,SAAZ,CAAL,EAA6B;AAC7BO,WAAKI,KAAL;AACA,UAAIC,KAAJ;AACA;AACA;AACA,WAAK,IAAIC,IAAI,KAAKb,OAAO,SAAZ,EAAuBc,MAAvB,GAAgC,CAA7C,EAAgDD,KAAK,CAArD,EAAwDA,GAAxD,EAA6D;AAC3D,cAAMZ,YAAY,KAAKD,OAAO,SAAZ,EAAuBa,CAAvB,CAAlB;AACAD,gBAAQX,UAAU,GAAGM,IAAb,CAAR;AACA,YAAIK,KAAJ,EAAW;AACZ;AACD,aAAOA,KAAP;AACD;AAvBM;AADI,C","file":"mixin.style.js","sourcesContent":["import _ from 'lodash'\r\n\r\nexport default {\r\n methods: {\r\n registerStyle (type, generator) {\r\n // Initialize on first registration\r\n if (!this[type + 'Factory']) this[type + 'Factory'] = []\r\n this[type + 'Factory'].push(generator)\r\n },\r\n unregisterStyle (type, generator) {\r\n _.pull(this[type + 'Factory'], generator)\r\n },\r\n generateStyle () {\r\n const args = Array.from(arguments)\r\n const type = args[0]\r\n if (!this[type + 'Factory']) return\r\n args.shift()\r\n let style\r\n // Iterate over all registered generators until we find one\r\n // Last registered overrides previous ones (usefull to override default styles)\r\n for (let i = this[type + 'Factory'].length - 1; i >= 0; i--) {\r\n const generator = this[type + 'Factory'][i]\r\n style = generator(...args)\r\n if (style) break\r\n }\r\n return style\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -22,6 +22,8 @@ var _moment2 = _interopRequireDefault(_moment);
|
|
|
22
22
|
|
|
23
23
|
var _time = require('../../../core/client/time');
|
|
24
24
|
|
|
25
|
+
var _units = require('../../../core/client/units');
|
|
26
|
+
|
|
25
27
|
var _utils = require('../utils');
|
|
26
28
|
|
|
27
29
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -281,25 +283,25 @@ exports.default = {
|
|
|
281
283
|
};
|
|
282
284
|
let html = '';
|
|
283
285
|
if (!_lodash2.default.isNil(windSpeed) && _lodash2.default.isFinite(windSpeed)) {
|
|
284
|
-
html +=
|
|
286
|
+
html += _units.Units.format(windSpeed, 'm/s');
|
|
285
287
|
// Add related time if any
|
|
286
288
|
if (!uniqTime) html += getTimeAsHtml(_lodash2.default.get(time, windSpeedField.replace('properties.', '')));
|
|
287
289
|
html += '</br>';
|
|
288
290
|
}
|
|
289
291
|
if (!_lodash2.default.isNil(gust) && _lodash2.default.isFinite(gust)) {
|
|
290
|
-
html += `max ${
|
|
292
|
+
html += `max ${_units.Units.format(gust, 'm/s')}`;
|
|
291
293
|
// Add related time if any
|
|
292
294
|
if (!uniqTime) html += getTimeAsHtml(_lodash2.default.get(time, gustField.replace('properties.', '')));
|
|
293
295
|
html += '</br>';
|
|
294
296
|
}
|
|
295
297
|
if (!_lodash2.default.isNil(windDirection) && _lodash2.default.isFinite(windDirection)) {
|
|
296
|
-
html +=
|
|
298
|
+
html += _units.Units.format(windDirection, 'deg');
|
|
297
299
|
// Add related time if any
|
|
298
300
|
if (!uniqTime) html += getTimeAsHtml(_lodash2.default.get(time, windDirectionField.replace('properties.', '')));
|
|
299
301
|
html += '</br>';
|
|
300
302
|
}
|
|
301
303
|
if (!_lodash2.default.isNil(precipitations) && _lodash2.default.isFinite(precipitations)) {
|
|
302
|
-
html +=
|
|
304
|
+
html += _units.Units.format(precipitations, 'mm/h');
|
|
303
305
|
// Add related time if any
|
|
304
306
|
if (!uniqTime) html += getTimeAsHtml(_lodash2.default.get(time, precipitationsField.replace('properties.', '')));
|
|
305
307
|
html += '</br>';
|
|
@@ -311,7 +313,7 @@ exports.default = {
|
|
|
311
313
|
html += '</br>';
|
|
312
314
|
}
|
|
313
315
|
if (!_lodash2.default.isNil(temperature) && _lodash2.default.isFinite(temperature)) {
|
|
314
|
-
html +=
|
|
316
|
+
html += _units.Units.format(temperature, 'degC');
|
|
315
317
|
// Add related time if any
|
|
316
318
|
if (!uniqTime) html += getTimeAsHtml(_lodash2.default.get(time, temperatureField.replace('properties.', '')));
|
|
317
319
|
html += '</br>';
|
|
@@ -376,39 +378,31 @@ exports.default = {
|
|
|
376
378
|
onCurrentForecastTimeChanged(time) {
|
|
377
379
|
if (this.weacastApi) this.weacastApi.setForecastTime(time);
|
|
378
380
|
},
|
|
379
|
-
|
|
380
|
-
//
|
|
381
|
-
if (
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
this.setForecastLevel(null);
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
if (typeof this.setSelectableLevels === 'function') {
|
|
388
|
-
this.$on('selected-level-changed', this.setForecastLevel);
|
|
389
|
-
this.setSelectableLevels(layer, levels);
|
|
390
|
-
}
|
|
381
|
+
onWeacastSelectedLevelChanged(level) {
|
|
382
|
+
// Used when selectable levels are cleared
|
|
383
|
+
if (_lodash2.default.isNil(level)) {
|
|
384
|
+
this.setForecastLevel(null);
|
|
385
|
+
return;
|
|
391
386
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
387
|
+
// Retrieve the layer associated to current level selection
|
|
388
|
+
let layer = this.selectableLevelsLayer;
|
|
389
|
+
if (layer) {
|
|
390
|
+
const type = _lodash2.default.get(layer, `${this.engine}.type`);
|
|
391
|
+
// Check if of right type
|
|
392
|
+
if (type.startsWith('weacast')) {
|
|
393
|
+
this.setForecastLevel(level);
|
|
394
|
+
}
|
|
399
395
|
}
|
|
400
396
|
}
|
|
401
397
|
},
|
|
402
398
|
created() {
|
|
403
399
|
this.$events.$on('time-current-time-changed', this.onCurrentForecastTimeChanged);
|
|
404
|
-
this.$on('
|
|
405
|
-
this.$on('layer-hidden', this.onWeacastHideLayer);
|
|
400
|
+
this.$on('selected-level-changed', this.onWeacastSelectedLevelChanged);
|
|
406
401
|
},
|
|
407
402
|
mounted() {},
|
|
408
403
|
beforeDestroy() {
|
|
409
404
|
this.$events.$off('time-current-time-changed', this.onCurrentForecastTimeChanged);
|
|
410
|
-
this.$off('
|
|
411
|
-
this.$off('layer-hidden', this.onWeacastHideLayer);
|
|
405
|
+
this.$off('selected-level-changed', this.onWeacastSelectedLevelChanged);
|
|
412
406
|
}
|
|
413
407
|
};
|
|
414
408
|
module.exports = exports['default'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../map/client/mixins/mixin.weacast.js"],"names":["data","forecastModel","forecastModels","methods","setupWeacast","weacastApi","$api","setForecastTime","time","forecastTime","emit","getForecastTime","setupForecastModels","error","logger","response","getService","find","models","forecast","isDefault","length","setForecastModel","model","$emit","setForecastLevel","level","forecastLevel","getForecastForLocation","long","lat","startTime","endTime","geometry","type","coordinates","query","$gte","format","$lte","$geoIntersects","$geometry","probedLocation","setCursor","elements","map","element","name","filter","endsWith","toString","tokens","split","_","isFinite","toNumber","create","features","Error","unsetCursor","getForecastProbe","probe","results","$paginate","$select","getForecastForFeature","featureId","windDirection","windSpeed","concat","probeId","_id","$groupBy","$aggregate","getForecastValueAtCurrentTime","times","values","Array","isArray","nearestTime","Time","getCurrentTime","moment","utc","difference","interval","index","getProbedLocationForecastAtCurrentTime","feature","cloneDeep","forOwn","properties","value","key","get","set","getForecastAsHtml","fields","windDirectionField","windSpeedField","gustField","temperatureField","precipitationsField","humidityField","timeField","nameField","gust","temperature","precipitations","humidity","uniqTime","uniqTimes","uniq","getTimeAsHtml","isNil","isValid","html","toFixed","replace","getProbedLocationForecastTooltip","layer","options","SelectionLayerName","L","tooltip","permanent","setContent","createWindBarbMarker","WindBarb","Icon","deg","speed","pointRadius","pointColor","pointStroke","strokeWidth","strokeColor","strokeLength","fillColor","barbSpaceing","barbHeight","forceDir","getProbedLocationForecastMarker","latlng","icon","marker","onCurrentForecastTimeChanged","onWeacastShowLayer","engineLayer","weacast","ForecastLayer","levels","setSelectableLevels","$on","onWeacastHideLayer","clearSelectableLevels","$off","created","$events","mounted","beforeDestroy"],"mappings":"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","file":"mixin.weacast.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { getNearestTime, SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModel: null,\r\n forecastModels: []\r\n }\r\n },\r\n methods: {\r\n async setupWeacast () {\r\n // As we proxy weacast service we use our API\r\n this.weacastApi = this.$api\r\n // We need to implement time management\r\n this.weacastApi.setForecastTime = (time) => {\r\n this.$api.forecastTime = time\r\n this.$api.emit('forecast-time-changed', time)\r\n }\r\n this.weacastApi.getForecastTime = () => {\r\n return this.$api.forecastTime\r\n }\r\n try {\r\n await this.setupForecastModels()\r\n } catch (error) {\r\n logger.error('Cannot retrieve available Weacast forecast models', error)\r\n }\r\n },\r\n async setupForecastModels () {\r\n if (!this.weacastApi) return\r\n const response = await this.weacastApi.getService('forecasts').find()\r\n this.forecastModels = response.data\r\n // store forecast models on the weacast api object too (useful in the weacast grid source)\r\n this.weacastApi.models = this.forecastModels\r\n // Select default if any or first one\r\n let forecastModel = this.forecastModels.find(forecast => forecast.isDefault)\r\n if (!forecastModel) {\r\n forecastModel = (this.forecastModels.length > 0 ? this.forecastModels[0] : null)\r\n }\r\n this.setForecastModel(forecastModel)\r\n },\r\n setForecastModel (model) {\r\n this.forecastModel = model\r\n this.$emit('forecast-model-changed', this.forecastModel)\r\n },\r\n setForecastLevel (level) {\r\n this.forecastLevel = level\r\n this.$emit('forecast-level-changed', this.forecastLevel)\r\n },\r\n async getForecastForLocation (long, lat, startTime, endTime) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // From now to last available time\r\n const geometry = {\r\n type: 'Point',\r\n coordinates: [long, lat]\r\n }\r\n const query = {\r\n forecastTime: {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n },\r\n geometry: {\r\n $geoIntersects: {\r\n $geometry: geometry\r\n }\r\n }\r\n }\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n let elements = this.forecastModel.elements.map(element => element.name)\r\n // Filter available elements according to current level if any\r\n if (this.forecastLevel) elements = elements.filter(element => element.endsWith(this.forecastLevel.toString()))\r\n else {\r\n elements = elements.filter(element => {\r\n const tokens = element.split('-')\r\n return (tokens.length === 0) || !_.isFinite(_.toNumber(tokens[tokens.length - 1]))\r\n })\r\n }\r\n const response = await this.weacastApi.getService('probes')\r\n .create({\r\n forecast: this.forecastModel.name,\r\n elements\r\n }, { query })\r\n if (response.features.length > 0) {\r\n probedLocation = response.features[0]\r\n } else throw new Error('Cannot find valid forecast at location')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n async getForecastProbe (name) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // Avoid reloading probe when not necessary\r\n if (this.probe && (this.probe.name === name) && (this.probe.forecast === this.forecastModel.name)) {\r\n return this.probe\r\n }\r\n const results = await this.weacastApi.getService('probes').find({\r\n query: {\r\n name,\r\n forecast: this.forecastModel.name,\r\n $paginate: false,\r\n $select: ['elements', 'forecast', 'featureId']\r\n }\r\n })\r\n if (results.length > 0) {\r\n this.probe = results[0]\r\n return this.probe\r\n } else {\r\n return null\r\n }\r\n },\r\n async getForecastForFeature (featureId, startTime, endTime) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // Check if probe is available\r\n if (!this.probe) return\r\n\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n let elements = this.forecastModel.elements.map(element => element.name)\r\n // Filter available elements according to current level if any\r\n if (this.forecastLevel) {\r\n elements = elements.filter(element => element.endsWith(this.forecastLevel.toString()))\r\n } else {\r\n elements = elements.filter(element => {\r\n const tokens = element.split('-')\r\n return (tokens.length === 0) || !_.isFinite(_.toNumber(tokens[tokens.length - 1]))\r\n })\r\n }\r\n // Need to add derived values for static probes as they are not computed on the fly\r\n const windDirection = (this.forecastLevel ? `windDirection-${this.forecastLevel}` : 'windDirection')\r\n const windSpeed = (this.forecastLevel ? `windSpeed-${this.forecastLevel}` : 'windSpeed')\r\n elements = elements.concat([windDirection, windSpeed])\r\n\r\n const results = await this.weacastApi.getService('probe-results').find({\r\n query: {\r\n probeId: this.probe._id,\r\n forecastTime: {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n },\r\n [this.probe.featureId]: featureId,\r\n $groupBy: this.probe.featureId,\r\n $aggregate: elements\r\n }\r\n })\r\n if (results.length > 0) {\r\n probedLocation = results[0]\r\n } else throw new Error('Cannot find valid forecast for feature')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n getForecastValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n // Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n // Check if we found a valid time within interval, otherwise the time is missing\r\n if ((nearestTime.difference / 1000) > (0.5 * this.forecastModel.interval)) return null\r\n else return values[nearestTime.index]\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationForecastAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'forecastTime.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getForecastValueAtCurrentTime(times, value))\r\n _.set(feature, 'forecastTime.' + key, this.getForecastValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n getForecastAsHtml (feature, fields = {}) {\r\n // Retrieve target fields on feature\r\n const windDirectionField = _.get(fields, 'windDirection', 'properties.windDirection')\r\n const windSpeedField = _.get(fields, 'windSpeed', 'properties.windSpeed')\r\n const gustField = _.get(fields, 'gust', 'properties.gust')\r\n const temperatureField = _.get(fields, 'temperature', 'properties.temperature')\r\n const precipitationsField = _.get(fields, 'precipitations', 'properties.precipitations')\r\n const humidityField = _.get(fields, 'humidity', 'properties.humidity')\r\n const timeField = _.get(fields, 'time', 'forecastTime')\r\n const nameField = _.get(fields, 'name', 'properties.name')\r\n // Then get values for fields\r\n const windDirection = _.get(feature, `${windDirectionField}`)\r\n const windSpeed = _.get(feature, `${windSpeedField}`)\r\n const gust = _.get(feature, `${gustField}`)\r\n const temperature = _.get(feature, `${temperatureField}`)\r\n const precipitations = _.get(feature, `${precipitationsField}`)\r\n const humidity = _.get(feature, `${humidityField}`)\r\n let time = _.get(feature, `${timeField}`)\r\n // We can have a single time or a map between fields and available times\r\n // If a single time is found we will display it once,\r\n // otherwise we will display a different time for each field\r\n let uniqTime = true\r\n if (typeof time === 'object') {\r\n const uniqTimes = _.uniq(_.values(time))\r\n if (uniqTimes.length > 1) {\r\n uniqTime = false\r\n } else {\r\n // Update time in place with actual value\r\n time = uniqTimes[0]\r\n }\r\n }\r\n const getTimeAsHtml = (time) => {\r\n if (!_.isNil(time)) {\r\n time = moment.utc(time)\r\n if (time.isValid()) return ` (${Time.format(time, 'date.short')} - ${Time.format(time, 'time.long')})`\r\n }\r\n return ''\r\n }\r\n let html = ''\r\n if (!_.isNil(windSpeed) && _.isFinite(windSpeed)) {\r\n html += `${windSpeed.toFixed(1)} m/s`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, windSpeedField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(gust) && _.isFinite(gust)) {\r\n html += `max ${gust.toFixed(1)} m/s`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, gustField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(windDirection) && _.isFinite(windDirection)) {\r\n html += `${windDirection.toFixed(1)} °`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, windDirectionField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(precipitations) && _.isFinite(precipitations)) {\r\n html += `${precipitations.toFixed(1)} mm/h`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, precipitationsField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(humidity) && _.isFinite(humidity)) {\r\n html += `${humidity.toFixed(0)} %`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, humidityField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(temperature) && _.isFinite(temperature)) {\r\n html += `${temperature.toFixed(1)} °C`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, temperatureField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n // If we have any value add name/time information\r\n if (html) {\r\n const name = _.get(feature, `${nameField}`)\r\n if (!_.isNil(name)) html = `<b><u>${name}</u></b></br>` + html\r\n // If we get a signle time for all field add it at the end\r\n if (uniqTime) {\r\n html += getTimeAsHtml(time)\r\n }\r\n }\r\n return html\r\n },\r\n getProbedLocationForecastTooltip (feature, layer, options) {\r\n if (options.name !== SelectionLayerName) return\r\n\r\n // Only wind/temperature can be available at different levels now\r\n const html = this.getForecastAsHtml(feature, {\r\n windDirection: (this.forecastLevel ? `properties.windDirection-${this.forecastLevel}` : 'properties.windDirection'),\r\n windSpeed: (this.forecastLevel ? `properties.windSpeed-${this.forecastLevel}` : 'properties.windSpeed'),\r\n temperature: (this.forecastLevel ? `properties.temperature-${this.forecastLevel}` : 'properties.temperature')\r\n })\r\n return (html ? L.tooltip({ permanent: false }, layer).setContent(`<b>${html}</b>`) : null)\r\n },\r\n createWindBarbMarker (feature, fields = {}) {\r\n // Retrieve target fields on feature\r\n let windDirection = _.get(fields, 'windDirection', 'properties.windDirection')\r\n let windSpeed = _.get(fields, 'windSpeed', 'properties.windSpeed')\r\n // TODO: colorize according to temperature scale if ?\r\n // let temperature = _.get(fields, 'temperature', 'properties.temperature')\r\n // Then get values for fields\r\n windDirection = _.get(feature, `${windDirection}`)\r\n windSpeed = _.get(feature, `${windSpeed}`)\r\n if (_.isNil(windDirection) || !_.isFinite(windDirection) ||\r\n _.isNil(windSpeed) || !_.isFinite(windSpeed)) return null\r\n // Then get values for fields\r\n return new L.WindBarb.Icon({\r\n deg: windDirection,\r\n speed: windSpeed, // Expressed as m/s\r\n pointRadius: 10,\r\n pointColor: '#2196f3',\r\n pointStroke: '#888888',\r\n strokeWidth: 2,\r\n strokeColor: '#888888',\r\n strokeLength: 12,\r\n fillColor: '#2196f3',\r\n barbSpaceing: 4,\r\n barbHeight: 10,\r\n forceDir: true\r\n })\r\n },\r\n getProbedLocationForecastMarker (feature, latlng, options) {\r\n if (options.name !== SelectionLayerName) return\r\n // Use wind barbs on probed features\r\n const icon = this.createWindBarbMarker(feature, {\r\n windDirection: (this.forecastLevel ? `properties.windDirection-${this.forecastLevel}` : 'properties.windDirection'),\r\n windSpeed: (this.forecastLevel ? `properties.windSpeed-${this.forecastLevel}` : 'properties.windSpeed')\r\n })\r\n return (icon ? L.marker(latlng, { icon }) : null)\r\n },\r\n onCurrentForecastTimeChanged (time) {\r\n if (this.weacastApi) this.weacastApi.setForecastTime(time)\r\n },\r\n onWeacastShowLayer (layer, engineLayer) {\r\n // Check for valid types\r\n if (!(engineLayer instanceof L.weacast.ForecastLayer)) {\r\n const levels = _.get(layer, 'levels')\r\n if (!levels) {\r\n this.setForecastLevel(null)\r\n return\r\n }\r\n if (typeof this.setSelectableLevels === 'function') {\r\n this.$on('selected-level-changed', this.setForecastLevel)\r\n this.setSelectableLevels(layer, levels)\r\n }\r\n }\r\n },\r\n onWeacastHideLayer (layer, engineLayer) {\r\n // Check for valid types\r\n if (!(engineLayer instanceof L.weacast.ForecastLayer)) return\r\n if (typeof this.clearSelectableLevels === 'function') {\r\n this.clearSelectableLevels(layer)\r\n this.$off('selected-level-changed', this.setForecastLevel)\r\n }\r\n }\r\n },\r\n created () {\r\n this.$events.$on('time-current-time-changed', this.onCurrentForecastTimeChanged)\r\n this.$on('layer-shown', this.onWeacastShowLayer)\r\n this.$on('layer-hidden', this.onWeacastHideLayer)\r\n },\r\n mounted () {\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentForecastTimeChanged)\r\n this.$off('layer-shown', this.onWeacastShowLayer)\r\n this.$off('layer-hidden', this.onWeacastHideLayer)\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/mixins/mixin.weacast.js"],"names":["data","forecastModel","forecastModels","methods","setupWeacast","weacastApi","$api","setForecastTime","time","forecastTime","emit","getForecastTime","setupForecastModels","error","logger","response","getService","find","models","forecast","isDefault","length","setForecastModel","model","$emit","setForecastLevel","level","forecastLevel","getForecastForLocation","long","lat","startTime","endTime","geometry","type","coordinates","query","$gte","format","$lte","$geoIntersects","$geometry","probedLocation","setCursor","elements","map","element","name","filter","endsWith","toString","tokens","split","_","isFinite","toNumber","create","features","Error","unsetCursor","getForecastProbe","probe","results","$paginate","$select","getForecastForFeature","featureId","windDirection","windSpeed","concat","probeId","_id","$groupBy","$aggregate","getForecastValueAtCurrentTime","times","values","Array","isArray","nearestTime","Time","getCurrentTime","moment","utc","difference","interval","index","getProbedLocationForecastAtCurrentTime","feature","cloneDeep","forOwn","properties","value","key","get","set","getForecastAsHtml","fields","windDirectionField","windSpeedField","gustField","temperatureField","precipitationsField","humidityField","timeField","nameField","gust","temperature","precipitations","humidity","uniqTime","uniqTimes","uniq","getTimeAsHtml","isNil","isValid","html","Units","replace","toFixed","getProbedLocationForecastTooltip","layer","options","SelectionLayerName","L","tooltip","permanent","setContent","createWindBarbMarker","WindBarb","Icon","deg","speed","pointRadius","pointColor","pointStroke","strokeWidth","strokeColor","strokeLength","fillColor","barbSpaceing","barbHeight","forceDir","getProbedLocationForecastMarker","latlng","icon","marker","onCurrentForecastTimeChanged","onWeacastSelectedLevelChanged","selectableLevelsLayer","engine","startsWith","created","$events","$on","mounted","beforeDestroy","$off"],"mappings":"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","file":"mixin.weacast.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport logger from 'loglevel'\r\nimport moment from 'moment'\r\nimport { Time } from '../../../core/client/time'\r\nimport { Units } from '../../../core/client/units'\r\nimport { getNearestTime, SelectionLayerName } from '../utils'\r\n\r\nexport default {\r\n data () {\r\n return {\r\n forecastModel: null,\r\n forecastModels: []\r\n }\r\n },\r\n methods: {\r\n async setupWeacast () {\r\n // As we proxy weacast service we use our API\r\n this.weacastApi = this.$api\r\n // We need to implement time management\r\n this.weacastApi.setForecastTime = (time) => {\r\n this.$api.forecastTime = time\r\n this.$api.emit('forecast-time-changed', time)\r\n }\r\n this.weacastApi.getForecastTime = () => {\r\n return this.$api.forecastTime\r\n }\r\n try {\r\n await this.setupForecastModels()\r\n } catch (error) {\r\n logger.error('Cannot retrieve available Weacast forecast models', error)\r\n }\r\n },\r\n async setupForecastModels () {\r\n if (!this.weacastApi) return\r\n const response = await this.weacastApi.getService('forecasts').find()\r\n this.forecastModels = response.data\r\n // store forecast models on the weacast api object too (useful in the weacast grid source)\r\n this.weacastApi.models = this.forecastModels\r\n // Select default if any or first one\r\n let forecastModel = this.forecastModels.find(forecast => forecast.isDefault)\r\n if (!forecastModel) {\r\n forecastModel = (this.forecastModels.length > 0 ? this.forecastModels[0] : null)\r\n }\r\n this.setForecastModel(forecastModel)\r\n },\r\n setForecastModel (model) {\r\n this.forecastModel = model\r\n this.$emit('forecast-model-changed', this.forecastModel)\r\n },\r\n setForecastLevel (level) {\r\n this.forecastLevel = level\r\n this.$emit('forecast-level-changed', this.forecastLevel)\r\n },\r\n async getForecastForLocation (long, lat, startTime, endTime) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // From now to last available time\r\n const geometry = {\r\n type: 'Point',\r\n coordinates: [long, lat]\r\n }\r\n const query = {\r\n forecastTime: {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n },\r\n geometry: {\r\n $geoIntersects: {\r\n $geometry: geometry\r\n }\r\n }\r\n }\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n let elements = this.forecastModel.elements.map(element => element.name)\r\n // Filter available elements according to current level if any\r\n if (this.forecastLevel) elements = elements.filter(element => element.endsWith(this.forecastLevel.toString()))\r\n else {\r\n elements = elements.filter(element => {\r\n const tokens = element.split('-')\r\n return (tokens.length === 0) || !_.isFinite(_.toNumber(tokens[tokens.length - 1]))\r\n })\r\n }\r\n const response = await this.weacastApi.getService('probes')\r\n .create({\r\n forecast: this.forecastModel.name,\r\n elements\r\n }, { query })\r\n if (response.features.length > 0) {\r\n probedLocation = response.features[0]\r\n } else throw new Error('Cannot find valid forecast at location')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n async getForecastProbe (name) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // Avoid reloading probe when not necessary\r\n if (this.probe && (this.probe.name === name) && (this.probe.forecast === this.forecastModel.name)) {\r\n return this.probe\r\n }\r\n const results = await this.weacastApi.getService('probes').find({\r\n query: {\r\n name,\r\n forecast: this.forecastModel.name,\r\n $paginate: false,\r\n $select: ['elements', 'forecast', 'featureId']\r\n }\r\n })\r\n if (results.length > 0) {\r\n this.probe = results[0]\r\n return this.probe\r\n } else {\r\n return null\r\n }\r\n },\r\n async getForecastForFeature (featureId, startTime, endTime) {\r\n // Not yet ready\r\n if (!this.forecastModel) return\r\n // Check if probe is available\r\n if (!this.probe) return\r\n\r\n let probedLocation\r\n this.setCursor('processing-cursor')\r\n try {\r\n let elements = this.forecastModel.elements.map(element => element.name)\r\n // Filter available elements according to current level if any\r\n if (this.forecastLevel) {\r\n elements = elements.filter(element => element.endsWith(this.forecastLevel.toString()))\r\n } else {\r\n elements = elements.filter(element => {\r\n const tokens = element.split('-')\r\n return (tokens.length === 0) || !_.isFinite(_.toNumber(tokens[tokens.length - 1]))\r\n })\r\n }\r\n // Need to add derived values for static probes as they are not computed on the fly\r\n const windDirection = (this.forecastLevel ? `windDirection-${this.forecastLevel}` : 'windDirection')\r\n const windSpeed = (this.forecastLevel ? `windSpeed-${this.forecastLevel}` : 'windSpeed')\r\n elements = elements.concat([windDirection, windSpeed])\r\n\r\n const results = await this.weacastApi.getService('probe-results').find({\r\n query: {\r\n probeId: this.probe._id,\r\n forecastTime: {\r\n $gte: startTime.format(),\r\n $lte: endTime.format()\r\n },\r\n [this.probe.featureId]: featureId,\r\n $groupBy: this.probe.featureId,\r\n $aggregate: elements\r\n }\r\n })\r\n if (results.length > 0) {\r\n probedLocation = results[0]\r\n } else throw new Error('Cannot find valid forecast for feature')\r\n } catch (error) {\r\n logger.error(error)\r\n }\r\n this.unsetCursor('processing-cursor')\r\n return probedLocation\r\n },\r\n getForecastValueAtCurrentTime (times, values) {\r\n // Check for the right value at time\r\n if (Array.isArray(times) && Array.isArray(values)) {\r\n // Look for the nearest time\r\n const nearestTime = getNearestTime(Time.getCurrentTime(), times.map(time => moment.utc(time)))\r\n // Check if we found a valid time within interval, otherwise the time is missing\r\n if ((nearestTime.difference / 1000) > (0.5 * this.forecastModel.interval)) return null\r\n else return values[nearestTime.index]\r\n } else {\r\n // Constant value\r\n return values\r\n }\r\n },\r\n getProbedLocationForecastAtCurrentTime (probedLocation) {\r\n // Create new geojson from raw response containing all times\r\n const feature = _.cloneDeep(probedLocation)\r\n // Then check for the right value at time\r\n _.forOwn(feature.properties, (value, key) => {\r\n if (Array.isArray(value)) {\r\n const times = _.get(feature, 'forecastTime.' + key)\r\n if (times) {\r\n _.set(feature, 'properties.' + key, this.getForecastValueAtCurrentTime(times, value))\r\n _.set(feature, 'forecastTime.' + key, this.getForecastValueAtCurrentTime(times, times))\r\n }\r\n }\r\n })\r\n return feature\r\n },\r\n getForecastAsHtml (feature, fields = {}) {\r\n // Retrieve target fields on feature\r\n const windDirectionField = _.get(fields, 'windDirection', 'properties.windDirection')\r\n const windSpeedField = _.get(fields, 'windSpeed', 'properties.windSpeed')\r\n const gustField = _.get(fields, 'gust', 'properties.gust')\r\n const temperatureField = _.get(fields, 'temperature', 'properties.temperature')\r\n const precipitationsField = _.get(fields, 'precipitations', 'properties.precipitations')\r\n const humidityField = _.get(fields, 'humidity', 'properties.humidity')\r\n const timeField = _.get(fields, 'time', 'forecastTime')\r\n const nameField = _.get(fields, 'name', 'properties.name')\r\n // Then get values for fields\r\n const windDirection = _.get(feature, `${windDirectionField}`)\r\n const windSpeed = _.get(feature, `${windSpeedField}`)\r\n const gust = _.get(feature, `${gustField}`)\r\n const temperature = _.get(feature, `${temperatureField}`)\r\n const precipitations = _.get(feature, `${precipitationsField}`)\r\n const humidity = _.get(feature, `${humidityField}`)\r\n let time = _.get(feature, `${timeField}`)\r\n // We can have a single time or a map between fields and available times\r\n // If a single time is found we will display it once,\r\n // otherwise we will display a different time for each field\r\n let uniqTime = true\r\n if (typeof time === 'object') {\r\n const uniqTimes = _.uniq(_.values(time))\r\n if (uniqTimes.length > 1) {\r\n uniqTime = false\r\n } else {\r\n // Update time in place with actual value\r\n time = uniqTimes[0]\r\n }\r\n }\r\n const getTimeAsHtml = (time) => {\r\n if (!_.isNil(time)) {\r\n time = moment.utc(time)\r\n if (time.isValid()) return ` (${Time.format(time, 'date.short')} - ${Time.format(time, 'time.long')})`\r\n }\r\n return ''\r\n }\r\n let html = ''\r\n if (!_.isNil(windSpeed) && _.isFinite(windSpeed)) {\r\n html += Units.format(windSpeed, 'm/s')\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, windSpeedField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(gust) && _.isFinite(gust)) {\r\n html += `max ${Units.format(gust, 'm/s')}`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, gustField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(windDirection) && _.isFinite(windDirection)) {\r\n html += Units.format(windDirection, 'deg')\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, windDirectionField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(precipitations) && _.isFinite(precipitations)) {\r\n html += Units.format(precipitations, 'mm/h')\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, precipitationsField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(humidity) && _.isFinite(humidity)) {\r\n html += `${humidity.toFixed(0)} %`\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, humidityField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n if (!_.isNil(temperature) && _.isFinite(temperature)) {\r\n html += Units.format(temperature, 'degC')\r\n // Add related time if any\r\n if (!uniqTime) html += getTimeAsHtml(_.get(time, temperatureField.replace('properties.', '')))\r\n html += '</br>'\r\n }\r\n // If we have any value add name/time information\r\n if (html) {\r\n const name = _.get(feature, `${nameField}`)\r\n if (!_.isNil(name)) html = `<b><u>${name}</u></b></br>` + html\r\n // If we get a signle time for all field add it at the end\r\n if (uniqTime) {\r\n html += getTimeAsHtml(time)\r\n }\r\n }\r\n return html\r\n },\r\n getProbedLocationForecastTooltip (feature, layer, options) {\r\n if (options.name !== SelectionLayerName) return\r\n\r\n // Only wind/temperature can be available at different levels now\r\n const html = this.getForecastAsHtml(feature, {\r\n windDirection: (this.forecastLevel ? `properties.windDirection-${this.forecastLevel}` : 'properties.windDirection'),\r\n windSpeed: (this.forecastLevel ? `properties.windSpeed-${this.forecastLevel}` : 'properties.windSpeed'),\r\n temperature: (this.forecastLevel ? `properties.temperature-${this.forecastLevel}` : 'properties.temperature')\r\n })\r\n return (html ? L.tooltip({ permanent: false }, layer).setContent(`<b>${html}</b>`) : null)\r\n },\r\n createWindBarbMarker (feature, fields = {}) {\r\n // Retrieve target fields on feature\r\n let windDirection = _.get(fields, 'windDirection', 'properties.windDirection')\r\n let windSpeed = _.get(fields, 'windSpeed', 'properties.windSpeed')\r\n // TODO: colorize according to temperature scale if ?\r\n // let temperature = _.get(fields, 'temperature', 'properties.temperature')\r\n // Then get values for fields\r\n windDirection = _.get(feature, `${windDirection}`)\r\n windSpeed = _.get(feature, `${windSpeed}`)\r\n if (_.isNil(windDirection) || !_.isFinite(windDirection) ||\r\n _.isNil(windSpeed) || !_.isFinite(windSpeed)) return null\r\n // Then get values for fields\r\n return new L.WindBarb.Icon({\r\n deg: windDirection,\r\n speed: windSpeed, // Expressed as m/s\r\n pointRadius: 10,\r\n pointColor: '#2196f3',\r\n pointStroke: '#888888',\r\n strokeWidth: 2,\r\n strokeColor: '#888888',\r\n strokeLength: 12,\r\n fillColor: '#2196f3',\r\n barbSpaceing: 4,\r\n barbHeight: 10,\r\n forceDir: true\r\n })\r\n },\r\n getProbedLocationForecastMarker (feature, latlng, options) {\r\n if (options.name !== SelectionLayerName) return\r\n // Use wind barbs on probed features\r\n const icon = this.createWindBarbMarker(feature, {\r\n windDirection: (this.forecastLevel ? `properties.windDirection-${this.forecastLevel}` : 'properties.windDirection'),\r\n windSpeed: (this.forecastLevel ? `properties.windSpeed-${this.forecastLevel}` : 'properties.windSpeed')\r\n })\r\n return (icon ? L.marker(latlng, { icon }) : null)\r\n },\r\n onCurrentForecastTimeChanged (time) {\r\n if (this.weacastApi) this.weacastApi.setForecastTime(time)\r\n },\r\n onWeacastSelectedLevelChanged (level) {\r\n // Used when selectable levels are cleared\r\n if (_.isNil(level)) {\r\n this.setForecastLevel(null)\r\n return\r\n }\r\n // Retrieve the layer associated to current level selection\r\n let layer = this.selectableLevelsLayer\r\n if (layer) {\r\n const type = _.get(layer, `${this.engine}.type`)\r\n // Check if of right type\r\n if (type.startsWith('weacast')) {\r\n this.setForecastLevel(level)\r\n }\r\n }\r\n }\r\n },\r\n created () {\r\n this.$events.$on('time-current-time-changed', this.onCurrentForecastTimeChanged)\r\n this.$on('selected-level-changed', this.onWeacastSelectedLevelChanged)\r\n },\r\n mounted () {\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentForecastTimeChanged)\r\n this.$off('selected-level-changed', this.onWeacastSelectedLevelChanged)\r\n }\r\n}\r\n"]}
|