@kalisio/kdk 1.4.2 → 1.6.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/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
- package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
- package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
- package/.nyc_output/{dbeb2602-0ac2-4e66-978b-0d29548359ca.json → 612b4859-9645-45c1-a41e-1fae420518c4.json} +0 -0
- package/.nyc_output/{e47d1e4c-2fff-4dcb-908f-d3081162547c.json → bab87fe9-d99a-4759-99e6-3fc4622eeca0.json} +0 -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/CHANGELOG.md +69 -10
- package/coverage/core/api/application.js.html +500 -422
- package/coverage/core/api/authentication.js.html +119 -119
- package/coverage/core/api/db.js.html +172 -172
- package/coverage/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/core/api/hooks/index.html +172 -172
- package/coverage/core/api/hooks/index.js.html +24 -24
- package/coverage/core/api/index.html +76 -76
- package/coverage/core/api/index.js.html +30 -30
- package/coverage/core/api/marshall.js.html +57 -57
- package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/core/api/models/index.html +50 -50
- package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/core/api/oauth2-handler.js.html +18 -18
- package/coverage/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/core/api/services/account/account.service.js.html +104 -104
- package/coverage/core/api/services/account/index.html +32 -32
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/core/api/services/authorisations/index.html +28 -28
- package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/core/api/services/databases/index.html +24 -24
- package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/core/api/services/devices/index.html +28 -28
- package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/core/api/services/groups/index.html +13 -13
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +118 -118
- package/coverage/core/api/services/mailer/index.html +24 -24
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/core/api/services/organisations/index.html +24 -24
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/core/api/services/pusher/index.html +34 -34
- package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/core/api/services/storage/index.html +21 -21
- package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/core/api/services/users/index.html +21 -21
- package/coverage/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +16 -16
- package/coverage/core/common/permissions.js.html +320 -290
- package/coverage/index.html +181 -181
- package/coverage/lcov-report/core/api/application.js.html +500 -422
- package/coverage/lcov-report/core/api/authentication.js.html +119 -119
- package/coverage/lcov-report/core/api/db.js.html +172 -172
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/lcov-report/core/api/hooks/index.html +172 -172
- package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
- package/coverage/lcov-report/core/api/index.html +76 -76
- package/coverage/lcov-report/core/api/index.js.html +30 -30
- package/coverage/lcov-report/core/api/marshall.js.html +57 -57
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/models/index.html +50 -50
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
- package/coverage/lcov-report/core/api/services/account/index.html +32 -32
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +118 -118
- package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/lcov-report/core/api/services/users/index.html +21 -21
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +16 -16
- package/coverage/lcov-report/core/common/permissions.js.html +320 -290
- package/coverage/lcov-report/index.html +181 -181
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- 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 +3683 -3825
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/map/api/hooks/index.html +7 -7
- 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/navigation-bar.js +49 -1
- package/lib/core/api/application.js +35 -9
- 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/collection/KColumn.vue +29 -28
- package/lib/core/client/components/collection/KFilter.vue +97 -72
- 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/KFileField.vue +14 -36
- 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/frame/KAction.vue +1 -2
- package/lib/core/client/components/frame/KModal.vue +66 -20
- package/lib/core/client/components/frame/KScrollArea.vue +65 -0
- package/lib/core/client/components/frame/index.js +6 -1
- 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 +38 -40
- package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
- package/lib/core/client/components/layout/KAbout.vue +47 -49
- 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/KGroupsActivity.vue +1 -1
- 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/viewer/KModalViewer.vue +10 -9
- package/lib/core/client/i18n/core_en.json +72 -8
- package/lib/core/client/i18n/core_fr.json +66 -8
- package/lib/core/client/index.js +31 -0
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/layout.js +8 -1
- package/lib/core/client/layout.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-widget.js +5 -3
- package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
- package/lib/core/client/reader.js +85 -0
- package/lib/core/client/reader.js.map +1 -0
- package/lib/core/client/readers/index.js +30 -0
- package/lib/core/client/readers/index.js.map +1 -0
- package/lib/core/client/readers/reader.csv.js +54 -0
- package/lib/core/client/readers/reader.csv.js.map +1 -0
- package/lib/core/client/readers/reader.json.js +49 -0
- package/lib/core/client/readers/reader.json.js.map +1 -0
- package/lib/core/client/services/index.js +14 -3
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +6 -4
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +4 -3
- package/lib/core/client/time.js.map +1 -1
- package/lib/core/client/units.js +195 -0
- package/lib/core/client/units.js.map +1 -0
- 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 +72 -0
- package/lib/map/api/hooks/hooks.query.js +7 -2
- package/lib/map/api/hooks/hooks.query.js.map +1 -1
- package/lib/map/api/models/features.model.mongodb.js +3 -0
- package/lib/map/api/models/features.model.mongodb.js.map +1 -1
- package/lib/map/client/components/KCaptureToolbar.vue +151 -0
- package/lib/map/client/components/KColorLegend.vue +16 -4
- package/lib/map/client/components/KFeaturesChart.vue +10 -11
- package/lib/map/client/components/KFeaturesFilter.vue +40 -39
- package/lib/map/client/components/KFeaturesTable.vue +15 -16
- package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
- package/lib/map/client/components/KLayerStyleEditor.vue +3 -2
- package/lib/map/client/components/KLayerStyleForm.vue +38 -27
- package/lib/map/client/components/KMeasureTool.vue +337 -0
- package/lib/map/client/components/KTimeline.vue +5 -9
- package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
- package/lib/map/client/components/catalog/KCatalog.vue +26 -7
- package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
- package/lib/map/client/components/catalog/KLayerCategories.vue +3 -2
- package/lib/map/client/components/catalog/KLayersSelector.vue +8 -6
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +1 -1
- package/lib/map/client/components/widget/KInformationBox.vue +8 -17
- package/lib/map/client/components/widget/KMapillaryViewer.vue +5 -1
- package/lib/map/client/components/widget/KTimeSeries.vue +92 -9
- package/lib/map/client/i18n/map_en.json +51 -20
- package/lib/map/client/i18n/map_fr.json +51 -20
- package/lib/map/client/init.js +7 -1
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/MaskLayer.js +9 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +16 -21
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.popup.js +7 -1
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +54 -9
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
- package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +51 -97
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +43 -11
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.popup.js +7 -1
- package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.style.js +1 -1
- package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +2 -0
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.context.js +26 -3
- package/lib/map/client/mixins/mixin.context.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +3 -3
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +4 -0
- package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +7 -5
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/readers/index.js +54 -0
- package/lib/map/client/readers/index.js.map +1 -0
- package/lib/map/client/readers/reader.geojson.js +87 -0
- package/lib/map/client/readers/reader.geojson.js.map +1 -0
- package/lib/map/client/readers/reader.gpx.js +52 -0
- package/lib/map/client/readers/reader.gpx.js.map +1 -0
- package/lib/map/client/readers/reader.kml.js +52 -0
- package/lib/map/client/readers/reader.kml.js.map +1 -0
- 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 +0 -7
- package/lib/map/client/utils.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/runner.js +1 -2
- package/lib/test/client/core/runner.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 +2 -2
- package/lib/test/client/core/utils.js.map +1 -1
- package/lib/test/client/map/catalog.js +50 -49
- package/lib/test/client/map/catalog.js.map +1 -1
- package/package.json +3 -3
- package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
- package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
- package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
- package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
- package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
- package/extras/testcafe/Dockerfile +0 -48
- package/extras/testcafe/docker-entrypoint.sh +0 -27
- package/extras/testcafe/page-models/core/account.js +0 -75
- package/extras/testcafe/page-models/core/base-collection.js +0 -41
- package/extras/testcafe/page-models/core/base-page.js +0 -25
- package/extras/testcafe/page-models/core/groups.js +0 -36
- package/extras/testcafe/page-models/core/index.js +0 -140
- package/extras/testcafe/page-models/core/layout.js +0 -145
- package/extras/testcafe/page-models/core/members.js +0 -98
- package/extras/testcafe/page-models/core/organisations.js +0 -76
- package/extras/testcafe/page-models/core/screens.js +0 -99
- package/extras/testcafe/page-models/core/tags.js +0 -21
- package/extras/testcafe/page-models/map/add-layer.js +0 -51
- package/extras/testcafe/page-models/map/catalog.js +0 -132
- package/extras/testcafe/page-models/map/index.js +0 -36
- package/extras/testcafe/page-models/map/map-activity.js +0 -42
- package/extras/testcafe/page-models/map/timeline.js +0 -67
|
@@ -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>';
|
|
@@ -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","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 { 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 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"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _reader = require('./reader.geojson');
|
|
8
|
+
|
|
9
|
+
Object.keys(_reader).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
Object.defineProperty(exports, key, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () {
|
|
14
|
+
return _reader[key];
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
var _reader2 = require('./reader.kml');
|
|
20
|
+
|
|
21
|
+
Object.keys(_reader2).forEach(function (key) {
|
|
22
|
+
if (key === "default" || key === "__esModule") return;
|
|
23
|
+
Object.defineProperty(exports, key, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () {
|
|
26
|
+
return _reader2[key];
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
var _reader3 = require('./reader.gpx');
|
|
32
|
+
|
|
33
|
+
Object.keys(_reader3).forEach(function (key) {
|
|
34
|
+
if (key === "default" || key === "__esModule") return;
|
|
35
|
+
Object.defineProperty(exports, key, {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () {
|
|
38
|
+
return _reader3[key];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
var _reader4 = require('./reader.shp');
|
|
44
|
+
|
|
45
|
+
Object.keys(_reader4).forEach(function (key) {
|
|
46
|
+
if (key === "default" || key === "__esModule") return;
|
|
47
|
+
Object.defineProperty(exports, key, {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function () {
|
|
50
|
+
return _reader4[key];
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/readers/index.js"],"names":[],"mappings":";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"index.js","sourcesContent":["export * from './reader.geojson'\r\nexport * from './reader.kml'\r\nexport * from './reader.gpx'\r\nexport * from './reader.shp'\r\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.GeoJSONReader = undefined;
|
|
7
|
+
|
|
8
|
+
var _loglevel = require('loglevel');
|
|
9
|
+
|
|
10
|
+
var _loglevel2 = _interopRequireDefault(_loglevel);
|
|
11
|
+
|
|
12
|
+
var _lodash = require('lodash');
|
|
13
|
+
|
|
14
|
+
var _lodash2 = _interopRequireDefault(_lodash);
|
|
15
|
+
|
|
16
|
+
var _i18next = require('i18next');
|
|
17
|
+
|
|
18
|
+
var _i18next2 = _interopRequireDefault(_i18next);
|
|
19
|
+
|
|
20
|
+
var _geojsonhint = require('@mapbox/geojsonhint');
|
|
21
|
+
|
|
22
|
+
var _geojsonhint2 = _interopRequireDefault(_geojsonhint);
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
|
+
const GeoJSONReader = exports.GeoJSONReader = {
|
|
27
|
+
read(files, options) {
|
|
28
|
+
if (files.length !== 1) {
|
|
29
|
+
_loglevel2.default.debug('invlaid \'fields\' arguments');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const file = files[0];
|
|
33
|
+
_loglevel2.default.debug(`reading GeoJSON file ${file.name}`);
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const reader = new FileReader();
|
|
36
|
+
reader.onloadend = () => {
|
|
37
|
+
let content = reader.result;
|
|
38
|
+
try {
|
|
39
|
+
content = JSON.parse(content);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
reject(new Error(_i18next2.default.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// check the crs
|
|
45
|
+
// if valid delete it because of https://github.com/kalisio/kdk/issues/518
|
|
46
|
+
if (content.crs) {
|
|
47
|
+
// we support only named crs and expressed in WGS84
|
|
48
|
+
const name = _lodash2.default.get(content.crs, 'properties.name');
|
|
49
|
+
if (name) {
|
|
50
|
+
const crs = name.toLowerCase();
|
|
51
|
+
const allowedCrs = ['epsg:4326', 'urn:ogc:def:crs:OGC:1.3:CRS84', 'urn:ogc:def:crs:EPSG::4326'];
|
|
52
|
+
const isCrsValid = _lodash2.default.some(allowedCrs, allowrdCrs => {
|
|
53
|
+
return allowrdCrs.toLowerCase() === crs;
|
|
54
|
+
});
|
|
55
|
+
if (!isCrsValid) {
|
|
56
|
+
reject(new Error(_i18next2.default.t('errors.INVALID_GEOJSON_CRS', { file: file.name }), { errors: `Invalid CRS ${name}` }));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
delete content.crs;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// lint the geosjon file
|
|
63
|
+
const messages = _geojsonhint2.default.hint(content, options);
|
|
64
|
+
// filter the message according the level to find the errors
|
|
65
|
+
const errors = _lodash2.default.filter(messages, message => {
|
|
66
|
+
return _lodash2.default.get(message, 'level') !== 'message';
|
|
67
|
+
});
|
|
68
|
+
if (errors.length > 0) {
|
|
69
|
+
_loglevel2.default.debug(errors);
|
|
70
|
+
reject(new Error(_i18next2.default.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// the geosjon file is correct
|
|
74
|
+
resolve(content);
|
|
75
|
+
};
|
|
76
|
+
reader.onerror = error => {
|
|
77
|
+
_loglevel2.default.debug(error);
|
|
78
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
|
|
79
|
+
};
|
|
80
|
+
reader.readAsText(file);
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
getAdditionalFiles() {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=reader.geojson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/readers/reader.geojson.js"],"names":["GeoJSONReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","JSON","parse","error","Error","i18next","t","errors","crs","_","get","toLowerCase","allowedCrs","isCrsValid","some","allowrdCrs","messages","geojsonhint","hint","filter","message","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEO,MAAMA,wCAAgB;AAC3BC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,wBAAuBC,KAAKC,IAAK,EAA/C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAUE,KAAKC,KAAL,CAAWH,OAAX,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,0BAAV,EAAsC,EAAEf,MAAMA,KAAKC,IAAb,EAAtC,CAAV,EAAsE,EAAEe,QAAQJ,KAAV,EAAtE,CAAP;AACA;AACD;AACD;AACA;AACA,YAAIJ,QAAQS,GAAZ,EAAiB;AACf;AACA,gBAAMhB,OAAOiB,iBAAEC,GAAF,CAAMX,QAAQS,GAAd,EAAmB,iBAAnB,CAAb;AACA,cAAIhB,IAAJ,EAAU;AACR,kBAAMgB,MAAMhB,KAAKmB,WAAL,EAAZ;AACA,kBAAMC,aAAa,CAAC,WAAD,EAAc,+BAAd,EAA+C,4BAA/C,CAAnB;AACA,kBAAMC,aAAaJ,iBAAEK,IAAF,CAAOF,UAAP,EAAoBG,UAAD,IAAgB;AAAE,qBAAOA,WAAWJ,WAAX,OAA6BH,GAApC;AAAyC,aAA9E,CAAnB;AACA,gBAAI,CAACK,UAAL,EAAiB;AACflB,qBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,4BAAV,EAAwC,EAAEf,MAAMA,KAAKC,IAAb,EAAxC,CAAV,EAAwE,EAAEe,QAAS,eAAcf,IAAK,EAA9B,EAAxE,CAAP;AACA;AACD;AACD,mBAAOO,QAAQS,GAAf;AACD;AACF;AACD;AACA,cAAMQ,WAAWC,sBAAYC,IAAZ,CAAiBnB,OAAjB,EAA0BZ,OAA1B,CAAjB;AACA;AACA,cAAMoB,SAASE,iBAAEU,MAAF,CAASH,QAAT,EAAmBI,WAAW;AAC3C,iBAAOX,iBAAEC,GAAF,CAAMU,OAAN,EAAe,OAAf,MAA4B,SAAnC;AACD,SAFc,CAAf;AAGA,YAAIb,OAAOnB,MAAP,GAAgB,CAApB,EAAuB;AACrBC,6BAAOC,KAAP,CAAaiB,MAAb;AACAZ,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,6BAAV,EAAyC,EAAEf,MAAMA,KAAKC,IAAb,EAAzC,CAAV,EAAyE,EAAEe,MAAF,EAAzE,CAAP;AACA;AACD;AACD;AACAb,gBAAQK,OAAR;AACD,OArCD;AAsCAH,aAAOyB,OAAP,GAAkBlB,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAO0B,UAAP,CAAkB/B,IAAlB;AACD,KA7CM,CAAP;AA8CD,GAtD0B;AAuD3BgC,uBAAsB;AACpB,WAAO,EAAP;AACD;AAzD0B,CAAtB","file":"reader.geojson.js","sourcesContent":["import logger from 'loglevel'\r\nimport _ from 'lodash'\r\nimport i18next from 'i18next'\r\nimport geojsonhint from '@mapbox/geojsonhint'\r\n\r\nexport const GeoJSONReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading GeoJSON file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = JSON.parse(content)\r\n } catch (error) {\r\n reject(new Error(i18next.t('errors.INVALID_JSON_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n // check the crs\r\n // if valid delete it because of https://github.com/kalisio/kdk/issues/518\r\n if (content.crs) {\r\n // we support only named crs and expressed in WGS84\r\n const name = _.get(content.crs, 'properties.name')\r\n if (name) {\r\n const crs = name.toLowerCase()\r\n const allowedCrs = ['epsg:4326', 'urn:ogc:def:crs:OGC:1.3:CRS84', 'urn:ogc:def:crs:EPSG::4326']\r\n const isCrsValid = _.some(allowedCrs, (allowrdCrs) => { return allowrdCrs.toLowerCase() === crs })\r\n if (!isCrsValid) {\r\n reject(new Error(i18next.t('errors.INVALID_GEOJSON_CRS', { file: file.name }), { errors: `Invalid CRS ${name}` }))\r\n return\r\n }\r\n delete content.crs\r\n }\r\n }\r\n // lint the geosjon file\r\n const messages = geojsonhint.hint(content, options)\r\n // filter the message according the level to find the errors\r\n const errors = _.filter(messages, message => {\r\n return _.get(message, 'level') !== 'message'\r\n })\r\n if (errors.length > 0) {\r\n logger.debug(errors)\r\n reject(new Error(i18next.t('errors.INVALID_GEOJSON_FILE', { file: file.name }), { errors }))\r\n return\r\n }\r\n // the geosjon file is correct\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.GPXReader = undefined;
|
|
7
|
+
|
|
8
|
+
var _loglevel = require('loglevel');
|
|
9
|
+
|
|
10
|
+
var _loglevel2 = _interopRequireDefault(_loglevel);
|
|
11
|
+
|
|
12
|
+
var _i18next = require('i18next');
|
|
13
|
+
|
|
14
|
+
var _i18next2 = _interopRequireDefault(_i18next);
|
|
15
|
+
|
|
16
|
+
var _togeojson = require('@tmcw/togeojson');
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
const GPXReader = exports.GPXReader = {
|
|
21
|
+
read(files, options) {
|
|
22
|
+
if (files.length !== 1) {
|
|
23
|
+
_loglevel2.default.debug('invlaid \'fields\' arguments');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const file = files[0];
|
|
27
|
+
_loglevel2.default.debug(`reading GPX file ${file.name}`);
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const reader = new FileReader();
|
|
30
|
+
reader.onloadend = () => {
|
|
31
|
+
let content = reader.result;
|
|
32
|
+
try {
|
|
33
|
+
content = (0, _togeojson.gpx)(new DOMParser().parseFromString(content, 'text/xml'));
|
|
34
|
+
} catch (error) {
|
|
35
|
+
_loglevel2.default.debug(error);
|
|
36
|
+
reject(new Error(_i18next2.default.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
resolve(content);
|
|
40
|
+
};
|
|
41
|
+
reader.onerror = error => {
|
|
42
|
+
_loglevel2.default.debug(error);
|
|
43
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
|
|
44
|
+
};
|
|
45
|
+
reader.readAsText(file);
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
getAdditionalFiles() {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=reader.gpx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/readers/reader.gpx.js"],"names":["GPXReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","Error","i18next","t","errors","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AAEO,MAAMA,gCAAY;AACvBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,oBAAmBC,KAAKC,IAAK,EAA3C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdd,6BAAOC,KAAP,CAAaa,KAAb;AACAR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACA;AACD;AACDT,gBAAQK,OAAR;AACD,OAVD;AAWAH,aAAOY,OAAP,GAAkBL,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAOa,UAAP,CAAkBlB,IAAlB;AACD,KAlBM,CAAP;AAmBD,GA3BsB;AA4BvBmB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA9BsB,CAAlB","file":"reader.gpx.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { gpx } from '@tmcw/togeojson'\r\n\r\nexport const GPXReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading GPX file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = gpx(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_GPX_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.KMLReader = undefined;
|
|
7
|
+
|
|
8
|
+
var _loglevel = require('loglevel');
|
|
9
|
+
|
|
10
|
+
var _loglevel2 = _interopRequireDefault(_loglevel);
|
|
11
|
+
|
|
12
|
+
var _i18next = require('i18next');
|
|
13
|
+
|
|
14
|
+
var _i18next2 = _interopRequireDefault(_i18next);
|
|
15
|
+
|
|
16
|
+
var _togeojson = require('@tmcw/togeojson');
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
const KMLReader = exports.KMLReader = {
|
|
21
|
+
read(files, options) {
|
|
22
|
+
if (files.length !== 1) {
|
|
23
|
+
_loglevel2.default.debug('invlaid \'fields\' arguments');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const file = files[0];
|
|
27
|
+
_loglevel2.default.debug(`reading KML file ${file.name}`);
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const reader = new FileReader();
|
|
30
|
+
reader.onloadend = () => {
|
|
31
|
+
let content = reader.result;
|
|
32
|
+
try {
|
|
33
|
+
content = (0, _togeojson.kml)(new DOMParser().parseFromString(content, 'text/xml'));
|
|
34
|
+
} catch (error) {
|
|
35
|
+
_loglevel2.default.debug(error);
|
|
36
|
+
reject(new Error(_i18next2.default.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
resolve(content);
|
|
40
|
+
};
|
|
41
|
+
reader.onerror = error => {
|
|
42
|
+
_loglevel2.default.debug(error);
|
|
43
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
|
|
44
|
+
};
|
|
45
|
+
reader.readAsText(file);
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
getAdditionalFiles() {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=reader.kml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/readers/reader.kml.js"],"names":["KMLReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","DOMParser","parseFromString","error","Error","i18next","t","errors","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AAEO,MAAMA,gCAAY;AACvBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,oBAAmBC,KAAKC,IAAK,EAA3C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAU,oBAAI,IAAIE,SAAJ,GAAgBC,eAAhB,CAAgCH,OAAhC,EAAyC,UAAzC,CAAJ,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdd,6BAAOC,KAAP,CAAaa,KAAb;AACAR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACA;AACD;AACDT,gBAAQK,OAAR;AACD,OAVD;AAWAH,aAAOY,OAAP,GAAkBL,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQJ,KAAV,EAArE,CAAP;AACD,OAHD;AAIAP,aAAOa,UAAP,CAAkBlB,IAAlB;AACD,KAlBM,CAAP;AAmBD,GA3BsB;AA4BvBmB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA9BsB,CAAlB","file":"reader.kml.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport { kml } from '@tmcw/togeojson'\r\n\r\nexport const KMLReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading KML file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = kml(new DOMParser().parseFromString(content, 'text/xml'))\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_KML_FILE', { file: file.name }), { errors: error }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SHPReader = undefined;
|
|
7
|
+
|
|
8
|
+
var _lodash = require('lodash');
|
|
9
|
+
|
|
10
|
+
var _lodash2 = _interopRequireDefault(_lodash);
|
|
11
|
+
|
|
12
|
+
var _path = require('path');
|
|
13
|
+
|
|
14
|
+
var _path2 = _interopRequireDefault(_path);
|
|
15
|
+
|
|
16
|
+
var _loglevel = require('loglevel');
|
|
17
|
+
|
|
18
|
+
var _loglevel2 = _interopRequireDefault(_loglevel);
|
|
19
|
+
|
|
20
|
+
var _i18next = require('i18next');
|
|
21
|
+
|
|
22
|
+
var _i18next2 = _interopRequireDefault(_i18next);
|
|
23
|
+
|
|
24
|
+
var _shpjs = require('shpjs');
|
|
25
|
+
|
|
26
|
+
var _shpjs2 = _interopRequireDefault(_shpjs);
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
|
31
|
+
|
|
32
|
+
const SHPReader = exports.SHPReader = {
|
|
33
|
+
read(files, options) {
|
|
34
|
+
var _this = this;
|
|
35
|
+
|
|
36
|
+
return _asyncToGenerator(function* () {
|
|
37
|
+
if (files.length < 1 || files.length > _this.getAdditionalFiles().length + 1) {
|
|
38
|
+
_loglevel2.default.info('invlaid \'files\' arguments');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const promises = [];
|
|
42
|
+
const shpFile = files[0];
|
|
43
|
+
promises.push(new Promise(function (resolve, reject) {
|
|
44
|
+
const reader = new FileReader();
|
|
45
|
+
reader.onloadend = function () {
|
|
46
|
+
resolve(reader.result);
|
|
47
|
+
};
|
|
48
|
+
reader.onerror = function (error) {
|
|
49
|
+
_loglevel2.default.debug(error);
|
|
50
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: shpFile.name }), { errors: error }));
|
|
51
|
+
};
|
|
52
|
+
reader.readAsArrayBuffer(shpFile);
|
|
53
|
+
}));
|
|
54
|
+
const prjFile = _lodash2.default.find(files, function (file) {
|
|
55
|
+
return _path2.default.extname(file.name) === '.prj';
|
|
56
|
+
});
|
|
57
|
+
if (prjFile) {
|
|
58
|
+
promises.push(new Promise(function (resolve, reject) {
|
|
59
|
+
const reader = new FileReader();
|
|
60
|
+
reader.onloadend = function () {
|
|
61
|
+
resolve(reader.result);
|
|
62
|
+
};
|
|
63
|
+
reader.onerror = function (error) {
|
|
64
|
+
_loglevel2.default.debug(error);
|
|
65
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: prjFile.name }), { errors: error }));
|
|
66
|
+
};
|
|
67
|
+
reader.readAsText(prjFile);
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
const dbfFile = _lodash2.default.find(files, function (file) {
|
|
71
|
+
return _path2.default.extname(file.name) === '.dbf';
|
|
72
|
+
});
|
|
73
|
+
if (dbfFile) {
|
|
74
|
+
promises.push(new Promise(function (resolve, reject) {
|
|
75
|
+
const reader = new FileReader();
|
|
76
|
+
reader.onloadend = function () {
|
|
77
|
+
resolve(reader.result);
|
|
78
|
+
};
|
|
79
|
+
reader.onerror = function (error) {
|
|
80
|
+
_loglevel2.default.debug(error);
|
|
81
|
+
reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: dbfFile.name }), { errors: error }));
|
|
82
|
+
};
|
|
83
|
+
reader.readAsArrayBuffer(dbfFile);
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
// resolver the promises
|
|
87
|
+
const buffers = yield Promise.all(promises);
|
|
88
|
+
// parse the buffers to return the geosjon content
|
|
89
|
+
// ff a dbFile is defined it returns a FeatureCollection
|
|
90
|
+
if (dbfFile) {
|
|
91
|
+
if (prjFile) return _shpjs2.default.combine([_shpjs2.default.parseShp(buffers[0], buffers[1]), _shpjs2.default.parseDbf(buffers[2])]);
|
|
92
|
+
return _shpjs2.default.combine([_shpjs2.default.parseShp(buffers[0]), _shpjs2.default.parseDbf(buffers[1])]);
|
|
93
|
+
}
|
|
94
|
+
// otherwise it returns an array of geometries that we need to convert to a FeatureCollection
|
|
95
|
+
let content;
|
|
96
|
+
if (prjFile) content = _shpjs2.default.parseShp(buffers[0], buffers[1]);
|
|
97
|
+
content = _shpjs2.default.parseShp(buffers[0]);
|
|
98
|
+
const geoJson = {
|
|
99
|
+
type: 'FeatureCollection',
|
|
100
|
+
features: []
|
|
101
|
+
};
|
|
102
|
+
_lodash2.default.forEach(content, function (geometry) {
|
|
103
|
+
geoJson.features.push({
|
|
104
|
+
type: 'Feature',
|
|
105
|
+
properties: {},
|
|
106
|
+
geometry
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
return geoJson;
|
|
110
|
+
})();
|
|
111
|
+
},
|
|
112
|
+
getAdditionalFiles() {
|
|
113
|
+
return ['.dbf', '.prj', '.shx', '.cpg'];
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=reader.shp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../map/client/readers/reader.shp.js"],"names":["SHPReader","read","files","options","length","getAdditionalFiles","logger","info","promises","shpFile","push","Promise","resolve","reject","reader","FileReader","onloadend","result","onerror","error","debug","Error","i18next","t","file","name","errors","readAsArrayBuffer","prjFile","_","find","path","extname","readAsText","dbfFile","buffers","all","shp","combine","parseShp","parseDbf","content","geoJson","type","features","forEach","properties","geometry"],"mappings":"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","file":"reader.shp.js","sourcesContent":["import _ from 'lodash'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport shp from 'shpjs'\r\n\r\nexport const SHPReader = {\r\n async read (files, options) {\r\n if (files.length < 1 || files.length > this.getAdditionalFiles().length + 1) {\r\n logger.info('invlaid \\'files\\' arguments')\r\n return\r\n }\r\n const promises = []\r\n const shpFile = files[0]\r\n promises.push(new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: shpFile.name }), { errors: error }))\r\n }\r\n reader.readAsArrayBuffer(shpFile)\r\n }))\r\n const prjFile = _.find(files, file => path.extname(file.name) === '.prj')\r\n if (prjFile) {\r\n promises.push(new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: prjFile.name }), { errors: error }))\r\n }\r\n reader.readAsText(prjFile)\r\n }))\r\n }\r\n const dbfFile = _.find(files, file => path.extname(file.name) === '.dbf')\r\n if (dbfFile) {\r\n promises.push(new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: dbfFile.name }), { errors: error }))\r\n }\r\n reader.readAsArrayBuffer(dbfFile)\r\n }))\r\n }\r\n // resolver the promises\r\n const buffers = await Promise.all(promises)\r\n // parse the buffers to return the geosjon content\r\n // ff a dbFile is defined it returns a FeatureCollection\r\n if (dbfFile) {\r\n if (prjFile) return shp.combine([shp.parseShp(buffers[0], buffers[1]), shp.parseDbf(buffers[2])])\r\n return shp.combine([shp.parseShp(buffers[0]), shp.parseDbf(buffers[1])])\r\n }\r\n // otherwise it returns an array of geometries that we need to convert to a FeatureCollection\r\n let content\r\n if (prjFile) content = shp.parseShp(buffers[0], buffers[1])\r\n content = shp.parseShp(buffers[0])\r\n const geoJson = {\r\n type: 'FeatureCollection',\r\n features: []\r\n }\r\n _.forEach(content, geometry => {\r\n geoJson.features.push({\r\n type: 'Feature',\r\n properties: {},\r\n geometry\r\n })\r\n })\r\n return geoJson\r\n },\r\n getAdditionalFiles () {\r\n return ['.dbf', '.prj', '.shx', '.cpg']\r\n }\r\n}\r\n"]}
|