qwc2 2025.3.31
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/LICENSE +28 -0
- package/README.md +68 -0
- package/actions/display.js +7 -0
- package/actions/editing.js +7 -0
- package/actions/layerinfo.js +7 -0
- package/actions/layers.js +8 -0
- package/actions/localConfig.js +7 -0
- package/actions/locale.js +10 -0
- package/actions/locate.js +8 -0
- package/actions/logging.js +7 -0
- package/actions/map.js +15 -0
- package/actions/measurement.js +8 -0
- package/actions/processNotifications.js +7 -0
- package/actions/redlining.js +7 -0
- package/actions/redliningPick.js +7 -0
- package/actions/serviceinfo.js +7 -0
- package/actions/task.js +9 -0
- package/actions/theme.js +24 -0
- package/actions/windows.js +10 -0
- package/components/AppMenu.js +8 -0
- package/components/AttributeForm.js +34 -0
- package/components/AutoEditForm.js +8 -0
- package/components/CoordinateDisplayer.js +7 -0
- package/components/EditComboField.js +10 -0
- package/components/EditUploadField.js +8 -0
- package/components/FullscreenSwitcher.js +8 -0
- package/components/Icon.js +7 -0
- package/components/IdentifyViewer.js +16 -0
- package/components/ImportLayer.js +25 -0
- package/components/LayerInfoWindow.js +7 -0
- package/components/LinkFeatureForm.js +10 -0
- package/components/MapSelection.js +13 -0
- package/components/NumericInputWindow.js +7 -0
- package/components/PickFeature.js +7 -0
- package/components/PluginsContainer.js +8 -0
- package/components/PrintSelection.js +54 -0
- package/components/QtDesignerForm.js +30 -0
- package/components/ResizeableWindow.js +12 -0
- package/components/SearchBox.js +26 -0
- package/components/ServiceInfoWindow.js +7 -0
- package/components/SideBar.js +9 -0
- package/components/StandardApp.js +35 -0
- package/components/Swipeable.js +1 -0
- package/components/TaskBar.js +7 -0
- package/components/ThemeLayersListWindow.js +9 -0
- package/components/ThemeList.js +12 -0
- package/components/Toolbar.js +7 -0
- package/components/WindowManager.js +7 -0
- package/components/map/OlLayer.js +12 -0
- package/components/map/OlLocate.css +56 -0
- package/components/map/OlLocate.js +17 -0
- package/components/map/OlMap.js +11 -0
- package/components/map/layers/BingLayer.js +8 -0
- package/components/map/layers/GoogleLayer.js +27 -0
- package/components/map/layers/GraticuleLayer.js +8 -0
- package/components/map/layers/ImageLayer.js +8 -0
- package/components/map/layers/MVTLayer.js +7 -0
- package/components/map/layers/OSMLayer.js +8 -0
- package/components/map/layers/OverlayLayer.js +10 -0
- package/components/map/layers/VectorLayer.js +14 -0
- package/components/map/layers/WFSLayer.js +11 -0
- package/components/map/layers/WMSLayer.js +11 -0
- package/components/map/layers/WMTSLayer.js +9 -0
- package/components/map/layers/XYZLayer.js +7 -0
- package/components/map/layers/index.js +8 -0
- package/components/map3d/BottomBar3D.js +7 -0
- package/components/map3d/Compare3D.js +12 -0
- package/components/map3d/Draw3D.js +10 -0
- package/components/map3d/ExportObjects3D.js +17 -0
- package/components/map3d/HeightProfile3D.js +8 -0
- package/components/map3d/HideObjects3D.js +12 -0
- package/components/map3d/Identify3D.js +13 -0
- package/components/map3d/LayerTree3D.js +8 -0
- package/components/map3d/Map3D.js +29 -0
- package/components/map3d/Map3DLight.js +10 -0
- package/components/map3d/MapControls3D.js +20 -0
- package/components/map3d/MapExport3D.js +11 -0
- package/components/map3d/Measure3D.js +23 -0
- package/components/map3d/OverviewMap3D.js +9 -0
- package/components/map3d/SearchField3D.js +16 -0
- package/components/map3d/TopBar3D.js +7 -0
- package/components/map3d/View3DSwitcher.js +7 -0
- package/components/map3d/drawtool/CreateTool3D.js +9 -0
- package/components/map3d/drawtool/EditTool3D.js +9 -0
- package/components/map3d/drawtool/NumericInput3D.js +7 -0
- package/components/map3d/img/viewcone.svg +124 -0
- package/components/map3d/layers/VectorLayer3D.js +7 -0
- package/components/map3d/layers/WFSLayer3D.js +8 -0
- package/components/map3d/layers/WMSLayer3D.js +7 -0
- package/components/map3d/layers/WMTSLayer3D.js +9 -0
- package/components/map3d/layers/index.js +8 -0
- package/components/map3d/models/arrow.glb +0 -0
- package/components/map3d/models/pin.glb +0 -0
- package/components/map3d/slices/map3d.js +1 -0
- package/components/map3d/style/BottomBar3D.css +67 -0
- package/components/map3d/style/Compare3D.css +57 -0
- package/components/map3d/style/Draw3D.css +7 -0
- package/components/map3d/style/HideObjects3D.css +29 -0
- package/components/map3d/style/LayerTree3D.css +126 -0
- package/components/map3d/style/Map3D.css +42 -0
- package/components/map3d/style/Map3DLight.css +72 -0
- package/components/map3d/style/MapControls3D.css +56 -0
- package/components/map3d/style/MapExport3D.css +25 -0
- package/components/map3d/style/OverviewMap3D.css +37 -0
- package/components/map3d/style/SearchField3D.css +7 -0
- package/components/map3d/style/View3DSwitcher.css +27 -0
- package/components/map3d/utils/Tiles3DStyle.js +1 -0
- package/components/share/ShareLink.js +7 -0
- package/components/share/ShareQRCode.js +8 -0
- package/components/share/ShareSocials.js +9 -0
- package/components/share/style/ShareLink.css +13 -0
- package/components/share/style/ShareSocials.css +9 -0
- package/components/style/App.css +229 -0
- package/components/style/AppMenu.css +162 -0
- package/components/style/AttributeForm.css +57 -0
- package/components/style/AutoEditForm.css +64 -0
- package/components/style/DefaultColorScheme.css +60 -0
- package/components/style/EditUploadField.css +103 -0
- package/components/style/FullscreenSwitcher.css +25 -0
- package/components/style/Icon.css +26 -0
- package/components/style/IdentifyViewer.css +249 -0
- package/components/style/ImportLayer.css +28 -0
- package/components/style/LayerInfoWindow.css +46 -0
- package/components/style/LinkFeatureForm.css +48 -0
- package/components/style/NumericInputWindow.css +11 -0
- package/components/style/PickFeature.css +25 -0
- package/components/style/PluginsContainer.css +4 -0
- package/components/style/QtDesignerForm.css +225 -0
- package/components/style/ResizeableWindow.css +178 -0
- package/components/style/SearchBox.css +159 -0
- package/components/style/ServiceInfoWindow.css +34 -0
- package/components/style/SideBar.css +100 -0
- package/components/style/TaskBar.css +35 -0
- package/components/style/ThemeLayersListWindow.css +47 -0
- package/components/style/ThemeList.css +200 -0
- package/components/style/Toolbar.css +20 -0
- package/components/style/WindowManager.css +50 -0
- package/components/timeline/FixedTimeline.js +10 -0
- package/components/timeline/InfiniteTimeline.js +13 -0
- package/components/timeline/TimelineFeaturesSlider.js +10 -0
- package/components/timeline/style/FixedTimeline.css +76 -0
- package/components/timeline/style/InfiniteTimeline.css +94 -0
- package/components/timeline/style/TimelineFeaturesSlider.css +131 -0
- package/components/widgets/AccordeonWidget.js +7 -0
- package/components/widgets/ButtonBar.js +7 -0
- package/components/widgets/ColorButton.js +8 -0
- package/components/widgets/ComboBox.js +7 -0
- package/components/widgets/CopyButton.js +7 -0
- package/components/widgets/DateTimeInput.js +8 -0
- package/components/widgets/EditableSelect.js +8 -0
- package/components/widgets/FileSelector.js +9 -0
- package/components/widgets/Input.js +7 -0
- package/components/widgets/InputContainer.js +7 -0
- package/components/widgets/LayerCatalogWidget.js +3 -0
- package/components/widgets/MenuButton.js +1 -0
- package/components/widgets/ModalDialog.js +7 -0
- package/components/widgets/NavBar.js +7 -0
- package/components/widgets/NumberInput.js +9 -0
- package/components/widgets/PopupMenu.js +1 -0
- package/components/widgets/Primitives.js +7 -0
- package/components/widgets/ReCaptchaWidget.js +1 -0
- package/components/widgets/SearchWidget.js +7 -0
- package/components/widgets/Spinner.js +6 -0
- package/components/widgets/SuggestionInput.js +7 -0
- package/components/widgets/TextInput.js +7 -0
- package/components/widgets/ToggleSwitch.js +7 -0
- package/components/widgets/VectorLayerPicker.js +8 -0
- package/components/widgets/style/AccordeonWidget.css +22 -0
- package/components/widgets/style/ButtonBar.css +88 -0
- package/components/widgets/style/ColorButton.css +88 -0
- package/components/widgets/style/ComboBox.css +83 -0
- package/components/widgets/style/CopyButton.css +21 -0
- package/components/widgets/style/EditableSelect.css +47 -0
- package/components/widgets/style/FileSelector.css +14 -0
- package/components/widgets/style/InputContainer.css +34 -0
- package/components/widgets/style/LayerCatalogWidget.css +59 -0
- package/components/widgets/style/MenuButton.css +122 -0
- package/components/widgets/style/ModalDialog.css +50 -0
- package/components/widgets/style/NavBar.css +12 -0
- package/components/widgets/style/NumberInput.css +76 -0
- package/components/widgets/style/SearchWidget.css +43 -0
- package/components/widgets/style/Spinner.css +32 -0
- package/components/widgets/style/SuggestionInput.css +8 -0
- package/components/widgets/style/TextInput.css +94 -0
- package/components/widgets/style/ToggleSwitch.css +61 -0
- package/components/widgets/style/VectorLayerPicker.css +3 -0
- package/icons/2d.svg +70 -0
- package/icons/3d.svg +70 -0
- package/icons/3d2d.svg +92 -0
- package/icons/after.svg +76 -0
- package/icons/arrow-down.svg +60 -0
- package/icons/arrow-up.svg +60 -0
- package/icons/before.svg +76 -0
- package/icons/bglayer.svg +71 -0
- package/icons/bookmark.svg +170 -0
- package/icons/box.svg +63 -0
- package/icons/buffer.svg +67 -0
- package/icons/camera.svg +118 -0
- package/icons/catalog.svg +62 -0
- package/icons/checked.svg +80 -0
- package/icons/chevron-down.svg +60 -0
- package/icons/chevron-left.svg +59 -0
- package/icons/chevron-right.svg +60 -0
- package/icons/chevron-up.svg +60 -0
- package/icons/circle.svg +70 -0
- package/icons/clear.svg +62 -0
- package/icons/clock.svg +71 -0
- package/icons/cog.svg +60 -0
- package/icons/collapse.svg +73 -0
- package/icons/compare.svg +72 -0
- package/icons/cone.svg +58 -0
- package/icons/confirm.svg +62 -0
- package/icons/copy.svg +60 -0
- package/icons/cuboid.svg +58 -0
- package/icons/cyclomedia.svg +47 -0
- package/icons/cylinder.svg +58 -0
- package/icons/dataimport.svg +116 -0
- package/icons/detach.svg +79 -0
- package/icons/dock.svg +82 -0
- package/icons/dock_bottom.svg +82 -0
- package/icons/dock_left.svg +84 -0
- package/icons/dock_right.svg +84 -0
- package/icons/dock_top.svg +84 -0
- package/icons/draw.svg +78 -0
- package/icons/editdraw.svg +84 -0
- package/icons/edited.svg +78 -0
- package/icons/editing.svg +118 -0
- package/icons/ellipse.svg +72 -0
- package/icons/embed.svg +88 -0
- package/icons/expand.svg +73 -0
- package/icons/export.svg +126 -0
- package/icons/eye.svg +127 -0
- package/icons/featureform.svg +115 -0
- package/icons/fill.svg +62 -0
- package/icons/filter.svg +69 -0
- package/icons/folder-open.svg +60 -0
- package/icons/freehand.svg +82 -0
- package/icons/group.svg +76 -0
- package/icons/home.svg +60 -0
- package/icons/identify_radius.svg +71 -0
- package/icons/identify_region.svg +71 -0
- package/icons/import.svg +62 -0
- package/icons/info-sign.svg +60 -0
- package/icons/info.svg +80 -0
- package/icons/layers.svg +71 -0
- package/icons/light.svg +77 -0
- package/icons/line.svg +61 -0
- package/icons/line_buffer.svg +65 -0
- package/icons/link.svg +75 -0
- package/icons/list-alt.svg +111 -0
- package/icons/lock.svg +54 -0
- package/icons/login.svg +56 -0
- package/icons/logout.svg +56 -0
- package/icons/map3d.svg +51 -0
- package/icons/maximize.svg +84 -0
- package/icons/measure.svg +82 -0
- package/icons/measure_line.svg +87 -0
- package/icons/measure_polygon.svg +88 -0
- package/icons/menu-hamburger.svg +60 -0
- package/icons/minimize.svg +76 -0
- package/icons/minus-sign.svg +60 -0
- package/icons/minus.svg +61 -0
- package/icons/nav-end.svg +74 -0
- package/icons/nav-left.svg +74 -0
- package/icons/nav-right.svg +74 -0
- package/icons/nav-start.svg +73 -0
- package/icons/new.svg +84 -0
- package/icons/nodetool.svg +68 -0
- package/icons/numericinput.svg +86 -0
- package/icons/ok.svg +60 -0
- package/icons/open.svg +79 -0
- package/icons/open_link.svg +74 -0
- package/icons/paint.svg +75 -0
- package/icons/pen.svg +41 -0
- package/icons/person.svg +44 -0
- package/icons/pick.svg +67 -0
- package/icons/pick_point.svg +74 -0
- package/icons/pick_region.svg +71 -0
- package/icons/plus.svg +60 -0
- package/icons/point.svg +67 -0
- package/icons/point_buffer.svg +74 -0
- package/icons/polygon.svg +61 -0
- package/icons/print.svg +60 -0
- package/icons/pyramid.svg +58 -0
- package/icons/radio_checked.svg +78 -0
- package/icons/radio_tristate.svg +75 -0
- package/icons/radio_unchecked.svg +72 -0
- package/icons/rasterexport.svg +124 -0
- package/icons/rect.svg +63 -0
- package/icons/refresh.svg +44 -0
- package/icons/remove.svg +60 -0
- package/icons/report.svg +84 -0
- package/icons/routing-bicycle.svg +40 -0
- package/icons/routing-bus.svg +40 -0
- package/icons/routing-cablecar.svg +40 -0
- package/icons/routing-car.svg +40 -0
- package/icons/routing-ship.svg +40 -0
- package/icons/routing-train.svg +40 -0
- package/icons/routing-tram.svg +40 -0
- package/icons/routing-truck.svg +40 -0
- package/icons/routing-walking.svg +40 -0
- package/icons/routing.svg +68 -0
- package/icons/save.svg +190 -0
- package/icons/scale.svg +62 -0
- package/icons/screenshot.svg +60 -0
- package/icons/search.svg +60 -0
- package/icons/selectbox.svg +79 -0
- package/icons/share.svg +64 -0
- package/icons/snap_edge.svg +79 -0
- package/icons/snap_vertex.svg +79 -0
- package/icons/sphere.svg +58 -0
- package/icons/square.svg +68 -0
- package/icons/sync.svg +72 -0
- package/icons/text.svg +68 -0
- package/icons/themes.svg +81 -0
- package/icons/tilt-down.svg +67 -0
- package/icons/tilt-left.svg +48 -0
- package/icons/tilt-right.svg +48 -0
- package/icons/tilt-up.svg +67 -0
- package/icons/today.svg +45 -0
- package/icons/tools.svg +77 -0
- package/icons/transformtool.svg +74 -0
- package/icons/transparency.svg +132 -0
- package/icons/trash.svg +60 -0
- package/icons/tree_minus.svg +81 -0
- package/icons/tree_plus.svg +81 -0
- package/icons/triangle-down.svg +59 -0
- package/icons/triangle-left.svg +60 -0
- package/icons/triangle-right.svg +60 -0
- package/icons/triangle-up.svg +59 -0
- package/icons/tristate.svg +79 -0
- package/icons/unchecked.svg +74 -0
- package/icons/undock.svg +82 -0
- package/icons/undock_bottom.svg +82 -0
- package/icons/undock_left.svg +82 -0
- package/icons/undock_right.svg +84 -0
- package/icons/undock_top.svg +84 -0
- package/icons/unmaximize.svg +84 -0
- package/icons/unminimize.svg +76 -0
- package/icons/up-down-arrow.svg +66 -0
- package/icons/warning.svg +72 -0
- package/icons/wedge.svg +58 -0
- package/icons/zoom.svg +60 -0
- package/icons/zoomin.svg +71 -0
- package/icons/zoomout.svg +80 -0
- package/libs/openlayers.js +11 -0
- package/package.json +135 -0
- package/plugins/API.js +114 -0
- package/plugins/AttributeTable.js +25 -0
- package/plugins/Authentication.js +13 -0
- package/plugins/BackgroundSwitcher.js +10 -0
- package/plugins/Bookmark.js +13 -0
- package/plugins/BottomBar.js +10 -0
- package/plugins/CookiePopup.js +9 -0
- package/plugins/Cyclomedia.js +11 -0
- package/plugins/Editing.js +21 -0
- package/plugins/FeatureForm.js +21 -0
- package/plugins/FeatureSearch.js +11 -0
- package/plugins/GeometryDigitizer.js +43 -0
- package/plugins/HeightProfile.js +26 -0
- package/plugins/Help.js +11 -0
- package/plugins/HomeButton.js +9 -0
- package/plugins/Identify.js +18 -0
- package/plugins/LayerCatalog.js +45 -0
- package/plugins/LayerTree.js +15 -0
- package/plugins/LocateButton.js +10 -0
- package/plugins/Map.js +22 -0
- package/plugins/MapCompare.js +11 -0
- package/plugins/MapCopyright.js +11 -0
- package/plugins/MapExport.js +23 -0
- package/plugins/MapFilter.js +20 -0
- package/plugins/MapInfoTooltip.js +32 -0
- package/plugins/MapLegend.js +14 -0
- package/plugins/MapTip.js +15 -0
- package/plugins/Measure.js +10 -0
- package/plugins/NewsPopup.js +12 -0
- package/plugins/Panoramax.js +10 -0
- package/plugins/Portal.js +10 -0
- package/plugins/Print.js +22 -0
- package/plugins/ProcessNotifications.js +11 -0
- package/plugins/Redlining.js +12 -0
- package/plugins/Reports.js +15 -0
- package/plugins/Routing.js +23 -0
- package/plugins/ScratchDrawing.js +15 -0
- package/plugins/Settings.js +12 -0
- package/plugins/Share.js +11 -0
- package/plugins/StartupMarker.js +12 -0
- package/plugins/TaskButton.js +9 -0
- package/plugins/ThemeSwitcher.js +10 -0
- package/plugins/TimeManager.js +21 -0
- package/plugins/TopBar.js +13 -0
- package/plugins/ValueTool.js +11 -0
- package/plugins/View3D.js +34 -0
- package/plugins/ZoomButtons.js +11 -0
- package/plugins/map/EditingSupport.js +13 -0
- package/plugins/map/LocateSupport.js +14 -0
- package/plugins/map/MeasurementSupport.js +15 -0
- package/plugins/map/OverviewSupport.js +14 -0
- package/plugins/map/RedliningPickSupport.js +12 -0
- package/plugins/map/RedliningSupport.js +28 -0
- package/plugins/map/ScaleBarSupport.js +10 -0
- package/plugins/map/SnapInteraction.js +1 -0
- package/plugins/map/SnapSupport.js +7 -0
- package/plugins/map/SnappingSupport.js +23 -0
- package/plugins/map/style/OverviewSupport.css +42 -0
- package/plugins/map/style/ScaleBarSupport.css +18 -0
- package/plugins/map/style/SnappingSupport.css +33 -0
- package/plugins/redlining/RedliningBufferSupport.js +8 -0
- package/plugins/style/AttributeTable.css +220 -0
- package/plugins/style/Authentication.css +16 -0
- package/plugins/style/BackgroundSwitcher.css +99 -0
- package/plugins/style/Bookmark.css +62 -0
- package/plugins/style/BottomBar.css +53 -0
- package/plugins/style/Buttons.css +68 -0
- package/plugins/style/CookiePopup.css +24 -0
- package/plugins/style/Cyclomedia.css +66 -0
- package/plugins/style/Editing.css +40 -0
- package/plugins/style/FeatureForm.css +21 -0
- package/plugins/style/FeatureSearch.css +71 -0
- package/plugins/style/GeometryDigitizer.css +28 -0
- package/plugins/style/HeightProfile.css +26 -0
- package/plugins/style/Identify.css +4 -0
- package/plugins/style/LayerCatalog.css +8 -0
- package/plugins/style/LayerTree.css +316 -0
- package/plugins/style/Map.css +43 -0
- package/plugins/style/MapCompare.css +27 -0
- package/plugins/style/MapCopyright.css +17 -0
- package/plugins/style/MapExport.css +55 -0
- package/plugins/style/MapFilter.css +101 -0
- package/plugins/style/MapInfoTooltip.css +78 -0
- package/plugins/style/MapLegend.css +36 -0
- package/plugins/style/MapTip.css +22 -0
- package/plugins/style/Measure.css +23 -0
- package/plugins/style/NewsPopup.css +87 -0
- package/plugins/style/Panoramax.css +15 -0
- package/plugins/style/Portal.css +115 -0
- package/plugins/style/Print.css +116 -0
- package/plugins/style/ProcessNotifications.css +55 -0
- package/plugins/style/Redlining.css +101 -0
- package/plugins/style/Reports.css +11 -0
- package/plugins/style/Routing.css +243 -0
- package/plugins/style/ScratchDrawing.css +8 -0
- package/plugins/style/Settings.css +11 -0
- package/plugins/style/Share.css +59 -0
- package/plugins/style/ThemeSwitcher.css +7 -0
- package/plugins/style/TimeManager.css +91 -0
- package/plugins/style/TopBar.css +50 -0
- package/plugins/style/ValueTool.css +60 -0
- package/reducers/display.js +7 -0
- package/reducers/editing.js +8 -0
- package/reducers/index.js +7 -0
- package/reducers/layerinfo.js +7 -0
- package/reducers/layers.js +14 -0
- package/reducers/localConfig.js +8 -0
- package/reducers/locale.js +8 -0
- package/reducers/locate.js +8 -0
- package/reducers/map.js +11 -0
- package/reducers/measurement.js +8 -0
- package/reducers/processNotifications.js +7 -0
- package/reducers/redlining.js +7 -0
- package/reducers/redliningPick.js +7 -0
- package/reducers/serviceinfo.js +7 -0
- package/reducers/task.js +7 -0
- package/reducers/theme.js +7 -0
- package/reducers/windows.js +7 -0
- package/scripts/dist.sh +16 -0
- package/scripts/gen-plugin-docs.js +9 -0
- package/scripts/makeIconkit.js +7 -0
- package/scripts/package-commands.bat +8 -0
- package/scripts/package-commands.sh +22 -0
- package/scripts/themesConfig.js +48 -0
- package/scripts/themesConfig.py +659 -0
- package/scripts/translateui.sh +51 -0
- package/scripts/updateTranslations.js +17 -0
- package/scripts/wmts_config_generator.py +169 -0
- package/selectors/searchproviders.js +12 -0
- package/static/translations/bg-BG.json +709 -0
- package/static/translations/ca-ES.json +709 -0
- package/static/translations/cs-CZ.json +709 -0
- package/static/translations/de-CH.json +709 -0
- package/static/translations/de-DE.json +709 -0
- package/static/translations/en-US.json +709 -0
- package/static/translations/es-ES.json +709 -0
- package/static/translations/fi-FI.json +709 -0
- package/static/translations/fr-FR.json +709 -0
- package/static/translations/hu-HU.json +709 -0
- package/static/translations/it-IT.json +709 -0
- package/static/translations/ja-JP.json +709 -0
- package/static/translations/nl-NL.json +709 -0
- package/static/translations/no-NO.json +709 -0
- package/static/translations/pl-PL.json +709 -0
- package/static/translations/pt-BR.json +709 -0
- package/static/translations/pt-PT.json +709 -0
- package/static/translations/ro-RO.json +709 -0
- package/static/translations/ru-RU.json +709 -0
- package/static/translations/sv-SE.json +709 -0
- package/static/translations/tr-TR.json +709 -0
- package/static/translations/tsconfig.json +606 -0
- package/stores/StandardStore.js +8 -0
- package/utils/ConfigUtils.js +9 -0
- package/utils/CoordinatesUtils.js +29 -0
- package/utils/DxfUtils.js +10 -0
- package/utils/EditingInterface.js +67 -0
- package/utils/EditingUtils.js +11 -0
- package/utils/FeatureStyles.js +10 -0
- package/utils/IdentifyUtils.js +12 -0
- package/utils/ImageEditor.js +15 -0
- package/utils/LayerUtils.js +57 -0
- package/utils/LocaleUtils.js +9 -0
- package/utils/MapUtils.js +66 -0
- package/utils/MeasureUtils.js +9 -0
- package/utils/MiscUtils.js +15 -0
- package/utils/PermaLinkUtils.js +11 -0
- package/utils/ResourceRegistry.js +7 -0
- package/utils/RoutingInterface.js +12 -0
- package/utils/SearchProviders.js +19 -0
- package/utils/ServiceLayerUtils.js +20 -0
- package/utils/Signal.js +2 -0
- package/utils/ThemeUtils.js +12 -0
- package/utils/VectorLayerUtils.js +20 -0
- package/utils/expr_grammar/README.md +3 -0
- package/utils/expr_grammar/grammar.js +3 -0
- package/utils/expr_grammar/grammar.ne +118 -0
- package/utils/expr_grammar/test.js +13 -0
- package/utils/img/README.markers +1 -0
- package/utils/img/arrowhead.svg +4 -0
- package/utils/img/marker-icon.png +0 -0
- package/utils/img/measurehead.svg +4 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}var END_MARKERS={SECTION:"ENDSEC",TABLE:"ENDTAB",BLOCK:"ENDBLK"};export function explodeDxf(text){var tuples=text.replace(/\s+$/,"").split(/\r\n|\r|\n/g).flatMap(function(_,i,a){return i%2?[]:[a.slice(i,i+2).map(function(x){return x.trim()})]});var maxHandle=100;// Value in QGIS
|
|
2
|
+
var _explode=function explode(pairs){var _toplevelTuples$find;var toplevelTuples=[];var sectionTuples;var marker;var expectEndMarker;var children=pairs.reduce(function(acc,tuple){if(tuple[0]==="5"&&tuple[1]!=="9999999"){maxHandle=Math.max(parseInt(tuple[1],16),maxHandle)}if(tuple[0]==="0"){if(expectEndMarker&&tuple[1]===expectEndMarker){acc.push(_objectSpread({type:marker},_explode(sectionTuples)));sectionTuples=undefined;marker=undefined;expectEndMarker=undefined}else if(expectEndMarker&&tuple[1]!==expectEndMarker){sectionTuples.push(tuple)}else if(!expectEndMarker){if(sectionTuples){acc.push(_objectSpread({type:marker},_explode(sectionTuples)))}sectionTuples=[];marker=tuple[1];expectEndMarker=END_MARKERS[marker]}}else if(sectionTuples){sectionTuples.push(tuple)}else if(acc.length>0){acc[acc.length-1].tailValues.push(tuple)}else{toplevelTuples.push(tuple)}return acc},[]);if(marker&§ionTuples&&!expectEndMarker){children.push(_objectSpread({type:marker},_explode(sectionTuples)))}var name=(_toplevelTuples$find=toplevelTuples.find(function(tuple){return tuple[0]==="2"}))===null||_toplevelTuples$find===void 0?void 0:_toplevelTuples$find[1];return{name:name,values:toplevelTuples,children:children,tailValues:[]}};var result=_explode(tuples);result.maxHandle=maxHandle;return result}export function implodeDxf(exploded){var output="";var handleSeed=100;var dumpValues=function dumpValues(values){return values.forEach(function(tuple){if(tuple[0]==="5"&&parseInt(tuple[0],16)>=100){output+="5\n".concat((handleSeed++).toString(16),"\n")}else{output+="".concat(tuple[0],"\n").concat(tuple[1],"\n")}})};var _implode=function implode(data){dumpValues(data.values);data.children.forEach(function(child){output+="0\n".concat(child.type,"\n");_implode(child);if(END_MARKERS[child.type]){output+="0\n".concat(END_MARKERS[child.type],"\n")}dumpValues(child.tailValues)})};_implode(exploded);return output}export function mergeDxf(documents){var _mergedBlockRecords$c,_mergedBlockRecords$c2,_mergedBlockRecords$c3;// Merge blockRecords, Blocks, Layers and Entities of dxf documents
|
|
3
|
+
var mergedEntities=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="ENTITIES"});var mergedLayers=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="LAYER"});var mergedBlockRecords=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="BLOCK_RECORD"});var mergedBlocks=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="BLOCKS"});// Reference the common block handles of the first document in subsequent documents
|
|
4
|
+
var commonBlockHandles={"*Model_Space":(_mergedBlockRecords$c=mergedBlockRecords.children.find(function(br){return br.name==="*Model_Space"}))===null||_mergedBlockRecords$c===void 0||(_mergedBlockRecords$c=_mergedBlockRecords$c.values)===null||_mergedBlockRecords$c===void 0||(_mergedBlockRecords$c=_mergedBlockRecords$c.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c===void 0?void 0:_mergedBlockRecords$c[1],"*Paper_Space":(_mergedBlockRecords$c2=mergedBlockRecords.children.find(function(br){return br.name==="*Paper_Space"}))===null||_mergedBlockRecords$c2===void 0||(_mergedBlockRecords$c2=_mergedBlockRecords$c2.values)===null||_mergedBlockRecords$c2===void 0||(_mergedBlockRecords$c2=_mergedBlockRecords$c2.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c2===void 0?void 0:_mergedBlockRecords$c2[1],"*Paper_Space0":(_mergedBlockRecords$c3=mergedBlockRecords.children.find(function(br){return br.name==="*Paper_Space0"}))===null||_mergedBlockRecords$c3===void 0||(_mergedBlockRecords$c3=_mergedBlockRecords$c3.values)===null||_mergedBlockRecords$c3===void 0||(_mergedBlockRecords$c3=_mergedBlockRecords$c3.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c3===void 0?void 0:_mergedBlockRecords$c3[1]};var maxHandle=documents[0].maxHandle;documents.slice(1).forEach(function(document){// Get items to merge
|
|
5
|
+
var entities=document.children.find(function(child){return child.type==="SECTION"&&child.name==="ENTITIES"});var layers=document.children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="LAYER"});var blockRecords=document.children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="BLOCK_RECORD"});var blocks=document.children.find(function(child){return child.type==="SECTION"&&child.name==="BLOCKS"});var handleMapping={};// Merge items, adjusting handles as necessary to avoid conflicting handles
|
|
6
|
+
blockRecords.children.forEach(function(blockRecord){var handleTuple=blockRecord.values.find(function(tuple){return tuple[0]==="5"});if(["*Model_Space","*Paper_Space","*Paper_Space0"].includes(blockRecord.name)){handleMapping[handleTuple[1]]=commonBlockHandles[blockRecord.name]}else{var newHandle=(++maxHandle).toString(16);handleMapping[handleTuple[1]]=newHandle;handleTuple[1]=newHandle;mergedBlockRecords.children.push(blockRecord)}});blocks.children.forEach(function(block){// Note: Don't merge common blocks
|
|
7
|
+
if(!["*Model_Space","*Paper_Space","*Paper_Space0"].includes(block.name)){var handleRefTuple=block.values.find(function(tuple){return tuple[0]==="330"});if(handleRefTuple){handleRefTuple[1]=handleMapping[handleRefTuple[1]]}block.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);mergedBlocks.children.push(block)}});layers.children.forEach(function(layer){// Note: Don't merge dummy layer 0
|
|
8
|
+
if(layer.name!=="0"){layer.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);mergedLayers.children.push(layer)}});entities.children.forEach(function(entity){var handleRefTuple=entity.values.find(function(tuple){return tuple[0]==="330"});if(handleRefTuple){handleRefTuple[1]=handleMapping[handleRefTuple[1]]}var handleTuple=entity.values.find(function(tuple){return tuple[0]==="5"});var newHandle=(++maxHandle).toString(16);handleMapping[handleTuple[1]]=newHandle;handleTuple[1]=newHandle;// VERTEX, SEQEND
|
|
9
|
+
entity.children.forEach(function(child){child.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);var childHandleRefTuple=child.values.find(function(tuple){return tuple[0]==="330"});if(childHandleRefTuple){childHandleRefTuple[1]=handleMapping[childHandleRefTuple[1]]}});mergedEntities.children.push(entity)})});// Update layer count
|
|
10
|
+
mergedLayers.values.find(function(tuple){return tuple[0]==="70"})[1]=String(mergedLayers.children.length);return documents[0]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2017-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*//**
|
|
8
|
+
* NOTE: This sample editing interface is designed to work with the counterpart at
|
|
9
|
+
* https://github.com/qwc-services/qwc-data-service
|
|
10
|
+
*
|
|
11
|
+
* You can use any other editing backend by implementing the getFeature, addFeature,
|
|
12
|
+
* editFeature and deleteFeature methods as necessary.
|
|
13
|
+
*/import axios from"axios";import isEmpty from"lodash.isempty";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";function buildErrMsg(err){var message=LocaleUtils.tr("editing.commitfailed");if(err.response&&err.response.data&&err.response.data.message){message=err.response.data.message;if(!isEmpty(err.response.data.geometry_errors)){message+=":\n";message+=err.response.data.geometry_errors.map(function(entry){var entrymsg=" - "+entry.reason;if(entry.location){entrymsg+=" at "+entry.location}return entrymsg})}if(!isEmpty(err.response.data.data_errors)){message+=":\n - "+err.response.data.data_errors.join("\n - ")}if(!isEmpty(err.response.data.validation_errors)){message+=":\n - "+err.response.data.validation_errors.join("\n - ")}if(!isEmpty(err.response.data.attachment_errors)){message+=":\n - "+err.response.data.attachment_errors.join("\n - ")}}else if(err.response&&err.response.statusText){message+=": "+err.response.statusText}return message}/*
|
|
14
|
+
layerId: The edit layer id
|
|
15
|
+
mapPos: the map position
|
|
16
|
+
mapCrs: the map crs
|
|
17
|
+
mapScale: the map scale denominator
|
|
18
|
+
dpi: the map resolution
|
|
19
|
+
callback: function(result), on success result is a collection of features, on failure, result is null
|
|
20
|
+
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
|
|
21
|
+
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
|
|
22
|
+
*/function getFeature(layerId,mapPos,mapCrs,mapScale,dpi,callback){var filter=arguments.length>6&&arguments[6]!==undefined?arguments[6]:null;var filterGeom=arguments.length>7&&arguments[7]!==undefined?arguments[7]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";// 10px tolerance
|
|
23
|
+
var tol=10/dpi*0.0254*mapScale;var bbox=mapPos[0]-tol+","+(mapPos[1]-tol)+","+(mapPos[0]+tol)+","+(mapPos[1]+tol);var params={bbox:bbox,crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&!isEmpty(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/*
|
|
24
|
+
layerId: The edit layer id
|
|
25
|
+
featureId: The feature id
|
|
26
|
+
mapCrs: the map crs
|
|
27
|
+
callback: function(result), on success result is a feature, on failure, result is null
|
|
28
|
+
*/function getFeatureById(layerId,featureId,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var params={crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){response.data.__version__=+new Date;callback(response.data)})["catch"](function(){return callback(null)})}/*
|
|
29
|
+
layerId: The edit layer id
|
|
30
|
+
mapCrs: the map crs
|
|
31
|
+
callback: function(result), on success result is a collection of features, on failure, result is null
|
|
32
|
+
bbox: the filter bounding box as [xmin, xmax, ymin, xmax], or null
|
|
33
|
+
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
|
|
34
|
+
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
|
|
35
|
+
*/function getFeatures(layerId,mapCrs,callback){var bbox=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filter=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var filterGeom=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";var params={crs:mapCrs,bbox:bbox?bbox.join(","):undefined,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&Array.isArray(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/*
|
|
36
|
+
layerId: The edit layer id
|
|
37
|
+
mapCrs: the map crs
|
|
38
|
+
callback: function(result), on success result is a {"bbox": [xmin, ymin, xmax, ymax]} object, on failure, result is null
|
|
39
|
+
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
|
|
40
|
+
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
|
|
41
|
+
*/function getExtent(layerId,mapCrs,callback){var filter=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filterGeom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/extent";var params={crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback(null)})}/*
|
|
42
|
+
layerId: The edit layer id
|
|
43
|
+
featureData: a FormData instance, with:
|
|
44
|
+
- A 'feature' entry containing the GeoJSON serialized feature
|
|
45
|
+
- Zero or more 'file:' prefixed file upload entries
|
|
46
|
+
- Zero or more 'relfile:' prefixed file upload entries
|
|
47
|
+
- Optionally a 'g-recaptcha-response' entry with the captcha response
|
|
48
|
+
callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message
|
|
49
|
+
*/function addFeatureMultipart(layerId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart";var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.post(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/*
|
|
50
|
+
layerId: The edit layer id
|
|
51
|
+
featureId: The id of the feature to edit
|
|
52
|
+
featureData: a FormData instance, with:
|
|
53
|
+
- A 'feature' entry containing the GeoJSON serialized feature
|
|
54
|
+
- Zero or more 'file:' prefixed file upload entries
|
|
55
|
+
- Zero or more 'relfile:' prefixed file upload entries
|
|
56
|
+
- Optionally a 'g-recaptcha-response' entry with the captcha response
|
|
57
|
+
callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message
|
|
58
|
+
*/function editFeatureMultipart(layerId,featureId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart/"+featureId;var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.put(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/*
|
|
59
|
+
layerId: The edit layer id
|
|
60
|
+
featureId: The id of the feature to delete
|
|
61
|
+
callback: function(success, result), if success = true, result is null, if success = false, result is an error message
|
|
62
|
+
recaptchaResponse: Optional, captcha challenge response
|
|
63
|
+
*/function deleteFeature(layerId,featureId,callback){var recaptchaResponse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var headers={"Accept-Language":LocaleUtils.lang()};var data={};if(recaptchaResponse){data["g-recaptcha-response"]=recaptchaResponse}axios["delete"](req,{headers:headers,data:data}).then(function(){callback(true,featureId)})["catch"](function(err){return callback(false,buildErrMsg(err))})}function getRelations(layerId,featureId,tables,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId+"/relations";var params={tables:tables,crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}/*
|
|
64
|
+
keyvalues: <dataset>:<key_column>:<value_column>,<dataset>:<key_column>:<value_column>,...
|
|
65
|
+
callback: function(result), result is a {"keyvalues": {"<dataset>": [{"key": <key>, "value": <value}, ...]}}
|
|
66
|
+
filter: the filter expression as [[["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...]] (one filter expr per keyvalue entry), or null
|
|
67
|
+
*/function getKeyValues(keyvalues,callback){var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+"keyvals?tables="+keyvalues;var params={filter:filter?JSON.stringify(filter):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}export default{getFeature:getFeature,getFeatureById:getFeatureById,getFeatures:getFeatures,getExtent:getExtent,addFeatureMultipart:addFeatureMultipart,editFeatureMultipart:editFeatureMultipart,deleteFeature:deleteFeature,getRelations:getRelations,getKeyValues:getKeyValues};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var _ExpressionFeatureCache;function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import nearley from"nearley";import grammar from"./expr_grammar/grammar";export var ExpressionFeatureCache=/*#__PURE__*/_createClass(function ExpressionFeatureCache(){_classCallCheck(this,ExpressionFeatureCache)});_ExpressionFeatureCache=ExpressionFeatureCache;_defineProperty(ExpressionFeatureCache,"store",{});_defineProperty(ExpressionFeatureCache,"requests",new Set);_defineProperty(ExpressionFeatureCache,"get",function(editIface,dataset,mapCrs,attr,value,promises){var key=dataset+":"+attr+":"+value;if(key in _ExpressionFeatureCache.store){return _ExpressionFeatureCache.store[key]}else if(!_ExpressionFeatureCache.requests.has(key)){_ExpressionFeatureCache.requests.add(key);promises.push(new Promise(function(accept){editIface.getFeatures(dataset,mapCrs,function(result){if(_ExpressionFeatureCache.requests.has(key)){if(((result===null||result===void 0?void 0:result.features)||[]).length===1){_ExpressionFeatureCache.store[key]=result.features[0]}else{_ExpressionFeatureCache.store[key]=null}_ExpressionFeatureCache.requests["delete"](key)}accept()},null,[[attr,"=",value]])}))}return null});_defineProperty(ExpressionFeatureCache,"clear",function(){_ExpressionFeatureCache.store={};_ExpressionFeatureCache.requests=new Set});export function parseExpression(expr,feature,editIface,mapPrefix,mapCrs,reevaluateCallback){var asFilter=arguments.length>6&&arguments[6]!==undefined?arguments[6]:false;var reevaluate=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));var promises=[];window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return ExpressionFeatureCache.get(editIface,mapPrefix+layerName,mapCrs,attr,value,promises)},asFilter:asFilter};var result=null;try{parser.feed(expr.replace(/\n/," "));result=parser.results[0]}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "))}delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
|
|
8
|
+
Promise.all(promises).then(function(){return parseExpression(expr,feature,editIface,mapPrefix,mapCrs,reevaluateCallback,asFilter,true)});return null}else{if(reevaluate){reevaluateCallback()}if(asFilter){result=[result]}return result}}export function parseExpressionsAsync(expressions,feature,editIface,mapPrefix,mapCrs,asFilter){var promises=[];return new Promise(function(resolve){window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return ExpressionFeatureCache.get(editIface,mapPrefix+layerName,mapCrs,attr,value,promises)},asFilter:asFilter};var results=Object.entries(expressions).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],expr=_ref2[1];var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));try{parser.feed(expr.replace(/\n/," "));return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,parser.results[0]))}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "));return res}},{});delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
|
|
9
|
+
Promise.all(promises).then(parseExpressionsAsync(expressions,feature,editIface,mapPrefix,mapCrs,asFilter).then(resolve(results)))}else{resolve(results)}})}var FeatureTemplateFactories={};export function setFeatureTemplateFactory(dataset,factory){FeatureTemplateFactories[dataset]=factory}export function getFeatureTemplate(editConfig,feature,editIface,mapPrefix,mapCrs,callback){if(editConfig.editDataset in FeatureTemplateFactories){feature=FeatureTemplateFactories[editConfig.editDataset](feature)}// Apply default values
|
|
10
|
+
var defaultFieldExpressions=editConfig.fields.reduce(function(res,field){if(field.defaultValue){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field.defaultValue.replace(/^expr:/,"")))}return res},{});ExpressionFeatureCache.clear();parseExpressionsAsync(defaultFieldExpressions,feature,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
|
|
11
|
+
editConfig.fields.forEach(function(field){if(field.id in result&&field.type==="date"){result[field.id]=result[field.id].split("T")[0]}});callback(_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread(_objectSpread({},feature.properties),result)}))})}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2017-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import ol from"openlayers";import minus from"../icons/minus.svg";import plus from"../icons/plus.svg";import ConfigUtils from"./ConfigUtils";import ResourceRegistry from"./ResourceRegistry";import arrowhead from"./img/arrowhead.svg";import markerIcon from"./img/marker-icon.png";import measurehead from"./img/measurehead.svg";ResourceRegistry.addResource("arrowhead",arrowhead);ResourceRegistry.addResource("measurehead",measurehead);ResourceRegistry.addResource("marker",markerIcon);ResourceRegistry.addResource("minus",minus);ResourceRegistry.addResource("plus",plus);var DEFAULT_FEATURE_STYLE={strokeColor:[0,0,255,1],strokeWidth:1,strokeDash:[4],fillColor:[255,0,255,0.33],circleRadius:10,textFill:"black",textStroke:"white",textFont:"11pt sans-serif"};var DEFAULT_MARKER_STYLE={iconAnchor:[0.5,1],opacity:1,iconSrc:markerIcon,color:undefined,scale:undefined,crossOrigin:undefined,textColor:"#000000",textStroke:"#FFFFFF"};var DEFAULT_INTERACTION_STYLE={fillColor:[255,0,0,0.5],strokeColor:"red",strokeWidth:1.5,vertexFillColor:"white",vertexStrokeColor:"red",snapFillColor:[255,255,255,0.05],snapStrokeColor:"#3399CC",snapStrokeWidth:1,snapVertexFillColor:[255,255,255,0.05],snapVertexStrokeColor:"#3399CC",measureFillColor:[255,0,0,0.25],measureStrokeColor:"red",measureStrokeWidth:4,measureVertexFillColor:"white",measureVertexStrokeColor:"red",measureVertexStrokeWidth:2,measurePointRadius:6,sketchPointFillColor:"#0099FF",sketchPointStrokeColor:"white",sketchPointRadius:6,printStrokeColor:"#3399CC",printStrokeWidth:3,printVertexColor:"#FFFFFF",printVertexRadius:6,printBackgroundColor:[0,0,0,0.5]};export var END_MARKERS={OUTARROW:{src:arrowhead,anchor:[0.05,0.5],baserotation:0},INARROW:{src:arrowhead,anchor:[0.05,0.5],baserotation:180},LINE:{src:measurehead,anchor:[0.05,0.5],baserotation:0}};export function computeFeatureStyle(layer,feature){return _objectSpread(_objectSpread(_objectSpread(_objectSpread({},DEFAULT_FEATURE_STYLE),ConfigUtils.getConfigProp("defaultFeatureStyle")),layer.styleOptions),feature.styleOptions)}var defaultStyle=function defaultStyle(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_FEATURE_STYLE),ConfigUtils.getConfigProp("defaultFeatureStyle")),options);var styles=[];styles.push(new ol.style.Style({fill:new ol.style.Fill({color:opts.fillColor}),stroke:new ol.style.Stroke({color:opts.strokeColor,width:opts.strokeWidth,lineDash:opts.strokeDash}),image:opts.circleRadius>0?new ol.style.Circle({radius:opts.circleRadius,fill:new ol.style.Fill({color:opts.fillColor}),stroke:new ol.style.Stroke({color:opts.strokeColor,width:opts.strokeWidth})}):null}));if(feature.getProperties().label){styles.push(new ol.style.Style({geometry:function geometry(f){if(f.getGeometry().getType().startsWith("Multi")){// Only label middle point
|
|
8
|
+
var extent=f.getGeometry().getExtent();return new ol.geom.Point(f.getGeometry().getClosestPoint(ol.extent.getCenter(extent)))}return f.getGeometry()},text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:feature.getProperties().label||"",overflow:true,fill:new ol.style.Fill({color:opts.textFill}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3}),textAlign:feature.getGeometry().getType()==="Point"?"left":"center",textBaseline:feature.getGeometry().getType()==="Point"?"bottom":"middle",offsetX:feature.getGeometry().getType()==="Point"?5+opts.circleRadius:0})}))}if(feature.getProperties().segment_labels){var segmentLabels=feature.getProperties().segment_labels;var coo=feature.getGeometry().getCoordinates();for(var i=0;i<coo.length-1;++i){var p1=coo[i];var p2=coo[i+1];var angle=-Math.atan2(p2[1]-p1[1],p2[0]-p1[0]);while(angle<-0.5*Math.PI){angle+=Math.PI}while(angle>0.5*Math.PI){angle-=Math.PI}styles.push(new ol.style.Style({geometry:new ol.geom.Point([0.5*(p1[0]+p2[0]),0.5*(p1[1]+p2[1])]),text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:segmentLabels[i],fill:new ol.style.Fill({color:opts.textFill}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3}),rotation:angle,offsetY:10})}))}}if(feature.getGeometry().getType()==="LineString"&&opts.headmarker in END_MARKERS){var _p=feature.getGeometry().getCoordinates()[0];var _p2=feature.getGeometry().getCoordinates()[1];var rotation=0.5*Math.PI+Math.atan2(_p[0]-_p2[0],_p[1]-_p2[1]);styles.push(new ol.style.Style({geometry:new ol.geom.Point(_p),image:new ol.style.Icon(_objectSpread(_objectSpread({},END_MARKERS[opts.headmarker]),{},{anchorXUnits:"fraction",anchorYUnits:"fraction",color:opts.strokeColor,rotation:END_MARKERS[opts.headmarker].baserotation/180*Math.PI+rotation,scale:0.125*(1+opts.strokeWidth)// Also update in VectorLayerUtils.generateMarkerGeometry
|
|
9
|
+
}))}))}if(feature.getGeometry().getType()==="LineString"&&opts.tailmarker in END_MARKERS){var l=feature.getGeometry().getCoordinates().length;var _p3=feature.getGeometry().getCoordinates()[l-1];var _p4=feature.getGeometry().getCoordinates()[l-2];var _rotation=0.5*Math.PI+Math.atan2(_p3[0]-_p4[0],_p3[1]-_p4[1]);styles.push(new ol.style.Style({geometry:new ol.geom.Point(_p3),image:new ol.style.Icon(_objectSpread(_objectSpread({},END_MARKERS[opts.tailmarker]),{},{anchorXUnits:"fraction",anchorYUnits:"fraction",color:opts.strokeColor,rotation:END_MARKERS[opts.tailmarker].baserotation/180*Math.PI+_rotation,scale:0.125*(1+opts.strokeWidth)// Also update in VectorLayerUtils.generateMarkerGeometry
|
|
10
|
+
}))}))}return styles};export default{"default":defaultStyle,marker:function marker(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_MARKER_STYLE),ConfigUtils.getConfigProp("defaultMarkerStyle")),options);return[new ol.style.Style({image:new ol.style.Icon({anchor:opts.iconAnchor,anchorXUnits:"fraction",anchorYUnits:"fraction",opacity:opts.opacity,crossOrigin:opts.crossOrigin,src:opts.iconSrc,scale:opts.scale,color:opts.color}),text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:feature.getProperties().label||"",offsetY:8,fill:new ol.style.Fill({color:opts.textColor}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3})})})]},interaction:function interaction(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var fillColor=opts.fillColor;var strokeColor=opts.strokeColor;var strokeWidth=opts.strokeWidth;if(isSnap){fillColor=opts.snapFillColor;strokeColor=opts.snapStrokeColor;strokeWidth=opts.snapStrokeWidth}return new ol.style.Style({fill:new ol.style.Fill({color:fillColor}),stroke:new ol.style.Stroke({color:strokeColor,width:strokeWidth})})},interactionVertex:function interactionVertex(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var strokeWidth=opts.strokeWidth;var vertexFill=opts.vertexFillColor;var vertexStroke=opts.vertexStrokeColor;if(isSnap){strokeWidth=opts.snapStrokeWidth;vertexFill=opts.snapVertexFillColor;vertexStroke=opts.snapVertexStrokeColor}return new ol.style.Style({image:options.img?new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:[0.5,1],imgSize:options.size,rotateWithView:true}):new ol.style.RegularShape({fill:new ol.style.Fill({color:vertexFill}),stroke:new ol.style.Stroke({color:vertexStroke,width:strokeWidth}),points:4,radius:5,angle:Math.PI/4}),geometry:opts.geometryFunction})},measureInteraction:function measureInteraction(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var styleOptions={strokeColor:opts.measureStrokeColor,strokeWidth:opts.measureStrokeWidth,fillColor:opts.measureFillColor,strokeDash:[]};return defaultStyle(feature,styleOptions)},measureInteractionVertex:function measureInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({radius:opts.measurePointRadius,fill:new ol.style.Fill({color:opts.measureVertexFillColor}),stroke:new ol.style.Stroke({color:opts.measureVertexStrokeColor,width:opts.measureVertexStrokeWidth})}),geometry:opts.geometryFunction})},sketchInteraction:function sketchInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({fill:new ol.style.Fill({color:opts.sketchPointFillColor}),stroke:new ol.style.Stroke({color:opts.sketchPointStrokeColor,width:opts.strokeWidth}),radius:opts.sketchPointRadius})})},printInteraction:function printInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:[0,0,0,0]}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionVertex:function printInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:opts.printVertexRadius,fill:new ol.style.Fill({color:opts.fill?opts.printStrokeColor:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})})},printInteractionBackground:function printInteractionBackground(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:opts.printBackgroundColor})})},printInteractionSeries:function printInteractionSeries(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionSeriesIcon:function printInteractionSeriesIcon(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return[new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:20*opts.radius,fill:new ol.style.Fill({color:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})}),new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Icon({src:ResourceRegistry.getResource(opts.img),opacity:0.5,rotation:opts.rotation,scale:opts.radius,rotateWithView:true})})]},image:function image(feature,options){return new ol.style.Style({image:new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:options.anchor,imgSize:options.size,rotateWithView:true})})},text:function text(feature,options){return[new ol.style.Style({text:new ol.style.Text({font:"10pt sans-serif",text:feature.getProperties().label||"",rotation:feature.getProperties().rotation||0,scale:options.strokeWidth,fill:new ol.style.Fill({color:options.fillColor}),stroke:new ol.style.Stroke({color:options.strokeColor,width:2})})})]}};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import axios from"axios";import geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import ol from"openlayers";import url from"url";import{v1 as uuidv1}from"uuid";import{LayerRole}from"../actions/layers";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"./VectorLayerUtils";function identifyRequestParams(layer,queryLayers,projection,params){var _layer$format;var format="text/plain";var infoFormats=layer.infoFormats||[];if(infoFormats.includes("text/xml")&&(layer.serverType==="qgis"||infoFormats.length===1)){format="text/xml"}else if(infoFormats.includes("application/geojson")){format="application/geojson"}else if(infoFormats.includes("application/geo+json")){format="application/geo+json"}else if(infoFormats.includes("application/json")){format="application/json"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.1")){format="text/xml;subtype=gml/3.2.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.0")){format="text/xml;subtype=gml/3.2.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.2")){format="text/xml;subtype=gml/3.2"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.1")){format="text/xml;subtype=gml/3.1.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.0")){format="text/xml;subtype=gml/3.1.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.1")){format="text/xml;subtype=gml/3.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.0")){format="text/xml;subtype=gml/3.0"}else if(infoFormats.includes("text/html")){format="text/html"}else if(infoFormats.includes("application/vnd.ogc.gml")){format="application/vnd.ogc.gml"}var styles=(layer.params.STYLES||"").split(",");var styleMap=layer.params.LAYERS.split(",").reduce(function(res,lyr,idx){var _styles$idx;return _objectSpread(_objectSpread({},res),{},_defineProperty({},lyr,(_styles$idx=styles[idx])!==null&&_styles$idx!==void 0?_styles$idx:""))});var queryStyles=queryLayers.split(",").map(function(lyr){var _styleMap$lyr;return(_styleMap$lyr=styleMap[lyr])!==null&&_styleMap$lyr!==void 0?_styleMap$lyr:""}).join(",");return{url:layer.featureInfoUrl.split("?")[0],params:_objectSpread(_objectSpread(_objectSpread({},url.parse(layer.featureInfoUrl,true).query),{},{service:"WMS",version:layer.version,request:"GetFeatureInfo",id:layer.id,layers:queryLayers,query_layers:queryLayers,styles:queryStyles,srs:projection,crs:projection,format:(_layer$format=layer.format)!==null&&_layer$format!==void 0?_layer$format:"image/png",info_format:format,with_geometry:true,with_maptip:false},layer.dimensionValues),params)}}var IdentifyUtils={getQueryLayers:function getQueryLayers(maplayers,map){var queryableLayers=maplayers.filter(function(l){// All non-background WMS layers with a non-empty queryLayers list
|
|
8
|
+
return l.visibility&&l.type==="wms"&&l.role!==LayerRole.BACKGROUND&&(l.queryLayers||[]).length>0});var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);var result=[];queryableLayers.forEach(function(layer){var layers=[];var queryLayers=layer.queryLayers;for(var i=0;i<queryLayers.length;++i){if(layer.externalLayerMap&&layer.externalLayerMap[queryLayers[i]]){var sublayer=LayerUtils.searchSubLayer(layer,"name",queryLayers[i]);var sublayerVisible=LayerUtils.layerScaleInRange(sublayer,mapScale);if(!isEmpty(layer.externalLayerMap[queryLayers[i]].queryLayers)&&sublayerVisible){layers.push(layer.externalLayerMap[queryLayers[i]])}}else if(layers.length>0&&layers[layers.length-1].id===layer.id){layers[layers.length-1].queryLayers.push(queryLayers[i])}else{layers.push(_objectSpread(_objectSpread({},layer),{},{queryLayers:[queryLayers[i]]}))}}result=result.concat(layers)});return result},buildRequest:function buildRequest(layer,queryLayers,center,map){var _layer$params$FILTER;var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var resolution=MapUtils.computeForZoom(map.resolutions,map.zoom);var dx=0.5*resolution*size[0];var dy=0.5*resolution*size[1];var version=layer.version;var bbox=[center[0]-dx,center[1]-dy,center[0]+dx,center[1]+dy];if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&version==="1.3.0"){bbox=[center[1]-dx,center[0]-dy,center[1]+dx,center[0]+dy]}var params=_objectSpread({height:size[0],width:size[1],feature_count:100,x:Math.round(size[0]*0.5),y:Math.round(size[1]*0.5),i:Math.round(size[0]*0.5),j:Math.round(size[1]*0.5),bbox:bbox.join(","),filter:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},buildFilterRequest:function buildFilterRequest(layer,queryLayers,filterGeom,map){var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var params=_objectSpread({height:size[0],width:size[1],feature_count:100,bbox:map.bbox.bounds.join(","),FILTER_GEOM:filterGeom},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},sendRequest:function sendRequest(request,responseHandler){var urlParts=url.parse(request.url,true);urlParts.query=_objectSpread(_objectSpread({},urlParts.query),request.params);delete urlParts.search;var requestUrl=url.format(urlParts);var maxUrlLength=ConfigUtils.getConfigProp("wmsMaxGetUrlLength",null,2048);if(requestUrl.length>maxUrlLength){// Switch to POST if url is too long
|
|
9
|
+
var reqUrlParts=requestUrl.split("?");var options={headers:{"content-type":"application/x-www-form-urlencoded"}};axios.post(reqUrlParts[0],reqUrlParts[1],options).then(function(postResp){responseHandler(postResp.data)})["catch"](function(){axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})})}else{axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})}},parseResponse:function parseResponse(response,layer,format,clickPoint,projection,featureInfoReturnsLayerName,layers){var decimals=CoordinatesUtils.getPrecision(projection);var posstr=clickPoint?clickPoint[0].toFixed(decimals)+", "+clickPoint[1].toFixed(decimals):"";var results={};if(["application/json","application/geojson","application/geo+json","GeoJSON"].includes(format)){results=IdentifyUtils.parseGeoJSONResponse(response,projection,layer)}else if(format==="text/xml"){results=IdentifyUtils.parseXmlResponse(response,projection,posstr,featureInfoReturnsLayerName,layers)}else if(format==="application/vnd.ogc.gml"){results=IdentifyUtils.parseGmlResponse(response,projection,posstr,layer)}else if(format.startsWith("text/xml;subtype=gml/3.1")||format.startsWith("text/xml;subtype=gml/3.0")){results=IdentifyUtils.parseGml3Response(response,projection,posstr,layer)}else if(format.startsWith("text/xml;subtype=gml/3.2")){results=IdentifyUtils.parseGml32Response(response,projection,posstr,layer)}else if(format==="text/plain"){results[layer.name]=[{type:"text",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}else if(format==="text/html"){results[layer.name]=[{type:"html",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}// Add clickPos, bounding box, displayname and layer name / title
|
|
10
|
+
for(var _i=0,_Object$keys=Object.keys(results);_i<_Object$keys.length;_i++){var layername=_Object$keys[_i];var _iterator=_createForOfIteratorHelper(results[layername]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _item$layertitle;var item=_step.value;if(item.type==="Feature"&&!item.bbox&&item.geometry){item.crs=projection;item.bbox=geojsonBbox(item)}item.clickPos=clickPoint;item.displayname=IdentifyUtils.determineDisplayName(layer,layername,item);item.layertitle=(_item$layertitle=item.layertitle)!==null&&_item$layertitle!==void 0?_item$layertitle:layername}}catch(err){_iterator.e(err)}finally{_iterator.f()}}return results},determineDisplayName:function determineDisplayName(layer,layername,item){var properties=item.properties||{};if(item.displayfield){if(properties[item.displayfield]&&properties[item.displayfield][0]!=="<"){return properties[item.displayfield]}}var sublayer=LayerUtils.searchSubLayer(layer,"name",layername);if(sublayer&&sublayer.displayField){if(properties[sublayer.displayField]&&properties[sublayer.displayField][0]!=="<"){return properties[sublayer.displayField]}}return properties.name||properties.Name||properties.NAME||item.id},parseXmlFeature:function parseXmlFeature(feature,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo){var featureResult={};featureResult.type="Feature";featureResult.id=id;featureResult.featurereport=featurereport;featureResult.displayfield=displayfield;featureResult.layername=layername;featureResult.layertitle=layertitle;featureResult.layerinfo=layerinfo;var bboxes=feature.getElementsByTagName("BoundingBox");if(bboxes.length>0){var bbox=bboxes[0];var crs=bbox.attributes.CRS?bbox.attributes.CRS.value:bbox.attributes.SRS.value;featureResult.bbox=[parseFloat(bbox.attributes.minx.value),parseFloat(bbox.attributes.miny.value),parseFloat(bbox.attributes.maxx.value),parseFloat(bbox.attributes.maxy.value)];featureResult.crs=crs}featureResult.properties={};var attrmapping={};var attributes=feature.getElementsByTagName("Attribute");for(var i=0;i<attributes.length;++i){var attribute=attributes[i];if(attribute.attributes.name.value==="geometry"){var wkt=attribute.attributes.value.value;var geoJsonFeature=VectorLayerUtils.wktToGeoJSON(wkt,geometrycrs,featureResult.crs);if(geoJsonFeature){featureResult.geometry=geoJsonFeature.geometry}}else{featureResult.properties[attribute.attributes.name.value]=attribute.attributes.value.value;if(attribute.attributes.attrname){attrmapping[attribute.attributes.name.value]=attribute.attributes.attrname.value}}}var htmlContent=feature.getElementsByTagName("HtmlContent");if(htmlContent.length>0){featureResult.properties.htmlContent=htmlContent[0].textContent;featureResult.properties.htmlContentInline=htmlContent[0].getAttribute("inline")==="1"||htmlContent[0].getAttribute("inline")==="true"}if(!isEmpty(attrmapping)){featureResult.attribnames=attrmapping}return featureResult},parseXmlResponse:function parseXmlResponse(response,geometrycrs){var _this=this;var posstr=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var featureInfoReturnsLayerName=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var mapLayers=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var layers=[].slice.call(doc.firstChild.getElementsByTagName("Layer"));var result={};var idcounter=0;var _iterator2=_createForOfIteratorHelper(layers),_step2;try{var _loop=function _loop(){var layer=_step2.value;var featurereport=layer.attributes.featurereport?layer.attributes.featurereport.value:null;var displayfield=layer.attributes.displayfield?layer.attributes.displayfield.value:null;var layername="";var layertitle="";if(featureInfoReturnsLayerName){layername=layer.attributes.name.value;var match=LayerUtils.searchLayer(mapLayers,"name",layername);layertitle=match?match.sublayer.title:layername}else{layertitle=layer.attributes.name.value;layername=layer.attributes.layername?layer.attributes.layername.value:layertitle}var layerinfo=layer.attributes.layerinfo?layer.attributes.layerinfo.value:null;var features=[].slice.call(layer.getElementsByTagName("Feature"));if(features.length>0){result[layername]=features.map(function(feature){return _this.parseXmlFeature(feature,geometrycrs,feature.attributes.id.value,featurereport,displayfield,layername,layertitle,layerinfo)})}else{var attributes=[].slice.call(layer.getElementsByTagName("Attribute"));if(attributes.length>0){var id=posstr||""+idcounter++;result[layername]=[_this.parseXmlFeature(layer,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo)]}}};for(_iterator2.s();!(_step2=_iterator2.n()).done;){_loop()}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return result},parseGeoJSONResponse:function parseGeoJSONResponse(response,geometrycrs,layer){var result={};(response.features||[]).map(function(feature){// Deduce layer name as far as possible from feature id
|
|
11
|
+
var id=feature.id||(feature.properties||{}).OBJECTID||uuidv1();if(result[layer.name]===undefined){result[layer.name]=[]}var geometry=feature.geometry;if(geometry&&response.crs){var _response$crs$propert,_response$crs$propert2;// Reproject geometry only if there is crs information in GetFeatureInfo response
|
|
12
|
+
geometry=VectorLayerUtils.reprojectGeometry(geometry,(_response$crs$propert=(_response$crs$propert2=response.crs.properties)===null||_response$crs$propert2===void 0?void 0:_response$crs$propert2.name)!==null&&_response$crs$propert!==void 0?_response$crs$propert:"EPSG:4326",geometrycrs)}result[layer.name].push(_objectSpread(_objectSpread({},feature),{},{id:id,geometry:geometry,layername:layer.name,layertitle:layer.title}))});return result},parseGmlResponse:function parseGmlResponse(response,geometrycrs,posstr,layer){var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var result={};var msGMLOutput=doc.getElementsByTagName("msGMLOutput")[0];if(msGMLOutput){var count=0;var _iterator3=_createForOfIteratorHelper([].slice.call(msGMLOutput.children)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layerEl=_step3.value;var layerName=layerEl.nodeName.replace(/_layer$/,"");var featureName=layerName+"_feature";result[layerName]=[];var _iterator4=_createForOfIteratorHelper([].slice.call(layerEl.getElementsByTagName(featureName))),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var featureEl=_step4.value;var context=[{featureType:featureName}];var feature=new ol.format.GeoJSON().writeFeatureObject(new ol.format.GML2().readFeatureElement(featureEl,context));feature.id=count++;feature.layername=layer.name;feature.layertitle=layer.title;delete feature.properties.boundedBy;result[layerName].push(feature)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else{result[layer.name]=[{type:"text",text:response,id:posstr}]}return result},parseGml3Response:function parseGml3Response(response,geometrycrs,posstr,layer){var _fmtGeoJson$writeFeat,_fmtGeoJson$writeFeat2;var fmtGml3=new ol.format.GML3;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat=(_fmtGeoJson$writeFeat2=fmtGeoJson.writeFeaturesObject(fmtGml3.readFeatures(response)))===null||_fmtGeoJson$writeFeat2===void 0?void 0:_fmtGeoJson$writeFeat2.features)!==null&&_fmtGeoJson$writeFeat!==void 0?_fmtGeoJson$writeFeat:[])},parseGml32Response:function parseGml32Response(response,geometrycrs,posstr,layer){var _fmtGeoJson$writeFeat3,_fmtGeoJson$writeFeat4;var fmtGml32=new ol.format.GML32;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat3=(_fmtGeoJson$writeFeat4=fmtGeoJson.writeFeaturesObject(fmtGml32.readFeatures(response)))===null||_fmtGeoJson$writeFeat4===void 0?void 0:_fmtGeoJson$writeFeat4.features)!==null&&_fmtGeoJson$writeFeat3!==void 0?_fmtGeoJson$writeFeat3:[])}};export default IdentifyUtils;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import Painterro from"painterro";import LocaleUtils from"../utils/LocaleUtils";import"../components/widgets/style/ModalDialog.css";export function showImageEditor(imageData,imageDataCallback){// Do old-school JS rather than react portal as portal event bubbling messes up Painterro
|
|
8
|
+
var modalDialogContainer=document.createElement("div");modalDialogContainer.className="modal-dialog-container";var modalDialog=document.createElement("div");modalDialog.className="modal-dialog";modalDialog.style.width="80%";var modalDialogTitle=document.createElement("div");modalDialogTitle.className="modal-dialog-title";var titleIcon=document.createElement("span");titleIcon.className="icon icon-paint";modalDialogTitle.appendChild(titleIcon);var titleLabel=document.createElement("span");titleLabel.innerText=LocaleUtils.tr("imageeditor.title");modalDialogTitle.appendChild(titleLabel);var closeIcon=document.createElement("span");closeIcon.className="icon icon_clickable icon-remove";modalDialogTitle.appendChild(closeIcon);modalDialog.appendChild(modalDialogTitle);var modalDialogBody=document.createElement("div");modalDialogBody.className="modal-dialog-body";modalDialogBody.id="painterro";modalDialogBody.addEventListener("keypress",function(ev){// Prevent i.e. +/- from triggering map zoom
|
|
9
|
+
ev.stopPropagation()});modalDialog.appendChild(modalDialogBody);modalDialogContainer.appendChild(modalDialog);document.body.appendChild(modalDialogContainer);// eslint-disable-next-line
|
|
10
|
+
window.ptro=Painterro({id:"painterro",hiddenTools:["open"],language:LocaleUtils.lang().slice(0,2).toLowerCase(),onBeforeClose:function onBeforeClose(hasUnsaved,doClose){if(hasUnsaved){// eslint-disable-next-line
|
|
11
|
+
if(confirm(LocaleUtils.tr("imageeditor.confirmclose"))){doClose()}}},onClose:function onClose(){window.ptro.hide();delete window.ptro;// Delay to next iteration to ensure ptro event handlers have executed
|
|
12
|
+
setTimeout(function(){document.body.removeChild(modalDialogContainer)},0)},saveHandler:function saveHandler(image,done){imageDataCallback(image.asDataURL("image/jpeg"));done(true);window.ptro.hide();delete window.ptro;// Delay to next iteration to ensure ptro event handlers have executed
|
|
13
|
+
setTimeout(function(){document.body.removeChild(modalDialogContainer)},0)}}).show(imageData);closeIcon.addEventListener("click",function(){// eslint-disable-next-line
|
|
14
|
+
if(confirm(LocaleUtils.tr("imageeditor.confirmclose"))){window.ptro.hide();delete window.ptro;// Delay to next iteration to ensure ptro event handlers have executed
|
|
15
|
+
setTimeout(function(){document.body.removeChild(modalDialogContainer)},0)}})}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}/**
|
|
2
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import isEmpty from"lodash.isempty";import isEqual from"lodash.isequal";import url from"url";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../actions/layers";import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";import MapUtils from"./MapUtils";import VectorLayerUtils from"./VectorLayerUtils";var LayerUtils={restoreLayerParams:function restoreLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers){var exploded=LayerUtils.explodeLayers([themeLayer]);// Restore theme layer configuration
|
|
8
|
+
var _iterator=_createForOfIteratorHelper(exploded),_step;try{var _loop=function _loop(){var entry=_step.value;var layerConfig=layerConfigs.find(function(layer){return layer.type==="theme"&&layer.name===entry.sublayer.name});if(layerConfig){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style;if(!entry.sublayer.style){entry.sublayer.style=!isEmpty(entry.sublayer.styles)?Object.keys(entry.sublayer.styles)[0]:""}}else{entry.sublayer.visibility=false}};for(_iterator.s();!(_step=_iterator.n()).done;){_loop()}// Create placeholders for external layers to be added in front
|
|
9
|
+
}catch(err){_iterator.e(err)}finally{_iterator.f()}var external=[];var _iterator2=_createForOfIteratorHelper(layerConfigs),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layerConfig=_step2.value;if(layerConfig.type==="separator"){// No point restoring separators
|
|
10
|
+
}else if(layerConfig.type!=="theme"){external=external.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig,externalLayers,layerConfig.id))}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}exploded=[].concat(_toConsumableArray(external),_toConsumableArray(exploded));LayerUtils.insertPermalinkLayers(exploded,permalinkLayers);var layers=LayerUtils.implodeLayers(exploded);LayerUtils.setGroupVisiblities(layers);return layers},restoreOrderedLayerParams:function restoreOrderedLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers){var exploded=LayerUtils.explodeLayers([themeLayer]);var reordered=[];// Iterate over layer configs and reorder items accordingly, create external layer placeholders as neccessary
|
|
11
|
+
var _iterator3=_createForOfIteratorHelper(layerConfigs),_step3;try{var _loop2=function _loop2(){var layerConfig=_step3.value;if(layerConfig.type==="theme"){var entry=exploded.find(function(e){return e.sublayer.name===layerConfig.name});if(entry){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style;if(!entry.sublayer.style){entry.sublayer.style=!isEmpty(entry.sublayer.styles)?Object.keys(entry.sublayer.styles)[0]:""}reordered.push(entry)}}else if(layerConfig.type==="separator"){reordered=reordered.concat(LayerUtils.createSeparatorLayer(layerConfig.name))}else{reordered=reordered.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig,externalLayers,layerConfig.id))}};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop2()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}LayerUtils.insertPermalinkLayers(reordered,permalinkLayers);var layers=LayerUtils.implodeLayers(reordered);LayerUtils.setGroupVisiblities(layers);return layers},setGroupVisiblities:function setGroupVisiblities(layers){var parentVisible=false;var parentInvisible=false;var _iterator4=_createForOfIteratorHelper(layers),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var layer=_step4.value;if(!isEmpty(layer.sublayers)){layer.visibility=LayerUtils.setGroupVisiblities(layer.sublayers)}parentInvisible=parentInvisible||layer.tristate;delete layer.tristate;parentVisible=parentVisible||layer.visibility}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}return parentVisible&&!parentInvisible},createSeparatorLayer:function createSeparatorLayer(title){return LayerUtils.explodeLayers([{type:"separator",title:title,role:LayerRole.USERLAYER,uuid:uuidv4(),id:uuidv4()}])},createExternalLayerPlaceholder:function createExternalLayerPlaceholder(layerConfig,externalLayers,id){var key=layerConfig.type+":"+layerConfig.url;(externalLayers[key]=externalLayers[key]||[]).push({id:id,name:layerConfig.name,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style,params:layerConfig.params});return LayerUtils.explodeLayers([{id:id,type:"placeholder",name:layerConfig.name,title:layerConfig.name,role:LayerRole.USERLAYER,loading:true,uuid:uuidv4()}])},insertPermalinkLayers:function insertPermalinkLayers(exploded,layers){var _iterator5=_createForOfIteratorHelper(layers||[]),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var layer=_step5.value;var insLayer=LayerUtils.explodeLayers([layer])[0];if(insLayer.layer.role!==LayerRole.USERLAYER||insLayer.layer.type!=="vector"){continue}delete insLayer.layer.pos;exploded.splice(layer.pos,0,insLayer)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}},collectWMSSublayerParams:function collectWMSSublayerParams(sublayer,layerNames,opacities,styles,queryable,visibilities,parentVisibility){var layerVisibility=sublayer.visibility===undefined?true:sublayer.visibility;var visibility=layerVisibility&&parentVisibility;if(visibility||visibilities){if(!isEmpty(sublayer.sublayers)){// Is group
|
|
12
|
+
sublayer.sublayers.map(function(sublyr){LayerUtils.collectWMSSublayerParams(sublyr,layerNames,opacities,styles,queryable,visibilities,visibility)})}else{layerNames.push(sublayer.name);opacities.push(Number.isInteger(sublayer.opacity)?sublayer.opacity:255);// Only specify style if more than one style choice exists
|
|
13
|
+
styles.push(Object.keys(sublayer.styles||{}).length>1?sublayer.style||"":"");if(sublayer.queryable&&!sublayer.omitFromQueryLayers){queryable.push(sublayer.name)}if(visibilities){// eslint-disable-next-line
|
|
14
|
+
visibilities.push(layerVisibility?parentVisibility?1:0.5:0)}}}},buildWMSLayerParams:function buildWMSLayerParams(layer){var filter=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var params=layer.params||{};var newParams={};var queryLayers=[];var initialOpacities=undefined;if(!Array.isArray(layer.sublayers)){var _ref,_layer$initialOpaciti,_layer$opacity,_ref2,_layer$style;// Background layers may just contain layer.params.OPACITIES
|
|
15
|
+
// User layers will be controlled with layer.opacity, and value will be replicated in layer.params.OPACITIES
|
|
16
|
+
// => Store the initial layer.params.OPACITIES as initialOpacities, compute actual opacities
|
|
17
|
+
// by multipliying layer.opacity with initialOpacities
|
|
18
|
+
initialOpacities=(_ref=(_layer$initialOpaciti=layer.initialOpacities)!==null&&_layer$initialOpaciti!==void 0?_layer$initialOpaciti:params.OPACITIES)!==null&&_ref!==void 0?_ref:"";var layers=(params.LAYERS||layer.name).split(",").filter(Boolean);var opacities=initialOpacities.split(",").filter(Boolean);var opacityMult=((_layer$opacity=layer.opacity)!==null&&_layer$opacity!==void 0?_layer$opacity:255)/255;newParams=_objectSpread({LAYERS:layers.join(","),OPACITIES:layers.map(function(x,i){var _opacities$i;return Math.round(((_opacities$i=opacities[i])!==null&&_opacities$i!==void 0?_opacities$i:"255")*opacityMult)}).map(Math.round).join(","),STYLES:(_ref2=(_layer$style=layer.style)!==null&&_layer$style!==void 0?_layer$style:params.STYLES)!==null&&_ref2!==void 0?_ref2:layers.map(function(){return""}).join(",")},layer.dimensionValues);queryLayers=layer.queryable&&!layer.omitFromQueryLayers?[layer.name]:[]}else{var layerNames=[];var _opacities=[];var styles=[];layer.sublayers.map(function(sublayer){LayerUtils.collectWMSSublayerParams(sublayer,layerNames,_opacities,styles,queryLayers,null,layer.visibility)});layerNames.reverse();_opacities.reverse();styles.reverse();if(layer.drawingOrder&&layer.drawingOrder.length>0){var indices=layer.drawingOrder.map(function(lyr){return layerNames.indexOf(lyr)}).filter(function(idx){return idx>=0});layerNames=indices.map(function(idx){return layerNames[idx]});_opacities=indices.map(function(idx){return _opacities[idx]});styles=indices.map(function(idx){return styles[idx]})}newParams=_objectSpread({LAYERS:layerNames.join(","),OPACITIES:_opacities.map(Math.round).join(","),STYLES:styles.join(",")},layer.dimensionValues)}if(filter.filterParams){newParams.FILTER=Object.entries(filter.filterParams).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),layername=_ref4[0],filters=_ref4[1];if(!newParams.LAYERS.split(",").includes(layername)){return res}return[].concat(_toConsumableArray(res),[layername+":"+filters.map(function(expr){return Array.isArray(expr)?LayerUtils.formatFilterExpr(expr):"AND"}).join(" ")])},[]).join(";")}if(filter.filterGeom){newParams.FILTER_GEOM=VectorLayerUtils.geoJSONGeomToWkt(filter.filterGeom)}return{params:newParams,queryLayers:queryLayers,initialOpacities:initialOpacities}},formatFilterExpr:function formatFilterExpr(expr){var _this=this;if(expr.length===3&&typeof expr[0]==="string"){var op=expr[1].toUpperCase();if(typeof expr[2]==="number"){return"\"".concat(expr[0],"\" ").concat(op," ").concat(expr[2])}else if(expr[2]===null){return"\"".concat(expr[0],"\" ").concat(op," NULL")}else if(Array.isArray(expr[2])){return"\"".concat(expr[0],"\" ").concat(op," ( ").concat(expr[2].join(" , ")," )")}else{return"\"".concat(expr[0],"\" ").concat(op," '").concat(expr[2],"'")}}else{return"( "+expr.map(function(entry){return Array.isArray(entry)?_this.formatFilterExpr(entry):entry.toUpperCase()}).join(" ")+" )"}},addUUIDs:function addUUIDs(group){var usedUUIDs=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Set;group.uuid=!group.uuid||usedUUIDs.has(group.uuid)?uuidv4():group.uuid;usedUUIDs.add(group.uuid);if(!isEmpty(group.sublayers)){Object.assign(group,{sublayers:group.sublayers.slice(0)});for(var i=0;i<group.sublayers.length;++i){group.sublayers[i]=_objectSpread({},group.sublayers[i]);LayerUtils.addUUIDs(group.sublayers[i],usedUUIDs)}}},buildWMSLayerUrlParam:function buildWMSLayerUrlParam(layers){var layernames=[];var opacities=[];var styles=[];var visibilities=[];var queryable=[];var _iterator6=_createForOfIteratorHelper(layers),_step6;try{var _loop3=function _loop3(){var layer=_step6.value;if(layer.role===LayerRole.THEME&&!isEmpty(layer.sublayers)){LayerUtils.collectWMSSublayerParams(layer,layernames,opacities,styles,queryable,visibilities,layer.visibility)}else if(layer.role===LayerRole.USERLAYER&&layer.type==="wms"){var sublayernames=[];LayerUtils.collectWMSSublayerParams(layer,sublayernames,opacities,styles,queryable,visibilities,layer.visibility);var layerurl=layer.url;if(layer.extwmsparams){layerurl+=(layerurl.includes("?")?"&":"?")+Object.entries(layer.extwmsparams||{}).map(function(_ref5){var _ref6=_slicedToArray(_ref5,2),key=_ref6[0],value=_ref6[1];return"extwms."+key+"="+value}).join("&")}layernames.push.apply(layernames,_toConsumableArray(sublayernames.map(function(name){return"wms:"+layerurl+"#"+name})))}else if(layer.role===LayerRole.USERLAYER&&(layer.type==="wfs"||layer.type==="wmts")){layernames.push(layer.type+":"+(layer.capabilitiesUrl||layer.url)+"#"+layer.name);opacities.push(layer.opacity);styles.push(layer.style);visibilities.push(layer.visibility)}else if(layer.role===LayerRole.USERLAYER&&layer.type==="separator"){layernames.push("sep:"+layer.title);opacities.push(255);styles.push("");visibilities.push(true)}};for(_iterator6.s();!(_step6=_iterator6.n()).done;){_loop3()}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}var result=layernames.map(function(layername,idx){var param=layername;if(opacities[idx]<255){param+="["+(100-Math.round(opacities[idx]/255*100))+"]"}if(styles[idx]){param+="{"+styles[idx]+"}"}if(visibilities[idx]===0||visibilities[idx]===false){param+="!"}else if(visibilities[idx]===0.5){param+="~"}return param});if(ConfigUtils.getConfigProp("urlReverseLayerOrder")){result.reverse()}return result.join(",")},splitLayerUrlParam:function splitLayerUrlParam(entry){var opacityPattern=/\[(\d+)\]/;var stylePattern=/{([^}]+)}/;var extPattern=/^(\w+):(.*)#([^#]+)$/;var id=uuidv4();var type="theme";var layerUrl=null;var opacity=255;var style="";var visibility=true;var tristate=false;if(entry.endsWith("!")){visibility=false;entry=entry.slice(0,-1)}else if(entry.endsWith("~")){visibility=false;tristate=true;entry=entry.slice(0,-1)}var m=null;if(m=entry.match(opacityPattern)){opacity=Math.round(255-parseFloat(m[1])/100*255);entry=entry.slice(0,m.index)+entry.slice(m.index+m[0].length)}if(m=entry.match(stylePattern)){style=m[1];entry=entry.slice(0,m.index)+entry.slice(m.index+m[0].length)}var name=entry;if(m=entry.match(extPattern)){type=m[1];layerUrl=m[2];name=m[3]}else if(name.startsWith("sep:")){type="separator";name=name.slice(4)}return{id:id,type:type,url:layerUrl,name:name,opacity:opacity,style:style,visibility:visibility,tristate:tristate}},pathEqualOrBelow:function pathEqualOrBelow(parent,child){return isEqual(child.slice(0,parent.length),parent)},removeLayer:function removeLayer(layers,layer,sublayerpath){// Extract foreground layers
|
|
19
|
+
var fglayers=layers.filter(function(lyr){return lyr.role!==LayerRole.BACKGROUND});// Explode layers (one entry for every single sublayer)
|
|
20
|
+
var exploded=LayerUtils.explodeLayers(fglayers);// Remove matching entries
|
|
21
|
+
exploded=exploded.filter(function(entry){return entry.layer.uuid!==layer.uuid||!LayerUtils.pathEqualOrBelow(sublayerpath,entry.path)});// Re-assemble layers
|
|
22
|
+
var newlayers=LayerUtils.implodeLayers(exploded);// Ensure theme layer is never removed
|
|
23
|
+
if(!newlayers.find(function(lyr){return lyr.role===LayerRole.THEME})){var oldThemeLayer=layers.find(function(lyr){return lyr.role===LayerRole.THEME});if(oldThemeLayer){newlayers.push(_objectSpread(_objectSpread({},oldThemeLayer),{},{sublayers:[]}))}}// Re-add background layers
|
|
24
|
+
return[].concat(_toConsumableArray(newlayers),_toConsumableArray(layers.filter(function(lyr){return lyr.role===LayerRole.BACKGROUND})))},insertSeparator:function insertSeparator(layers,title,beforelayerId,beforesublayerpath){// Extract foreground layers
|
|
25
|
+
var fglayers=layers.filter(function(layer){return layer.role!==LayerRole.BACKGROUND});// Explode layers (one entry for every single sublayer)
|
|
26
|
+
var exploded=LayerUtils.explodeLayers(fglayers);// Remove matching entries
|
|
27
|
+
var pos=exploded.findIndex(function(entry){return entry.layer.id===beforelayerId&&isEqual(beforesublayerpath,entry.path)});if(pos!==-1){// Add separator
|
|
28
|
+
exploded.splice(pos,0,LayerUtils.createSeparatorLayer(title)[0])}// Re-assemble layers, re-add background layers
|
|
29
|
+
return[].concat(_toConsumableArray(LayerUtils.implodeLayers(exploded)),_toConsumableArray(layers.filter(function(layer){return layer.role===LayerRole.BACKGROUND})))},reorderLayer:function reorderLayer(layers,movelayer,sublayerpath,delta,preventSplittingGroups){// Extract foreground layers
|
|
30
|
+
var fglayers=layers.filter(function(layer){return layer.role!==LayerRole.BACKGROUND});// Explode layers (one entry for every single sublayer)
|
|
31
|
+
var exploded=LayerUtils.explodeLayers(fglayers);// Find entry to move
|
|
32
|
+
if(movelayer){var indices=exploded.reduce(function(result,entry,index){if(entry.layer.uuid===movelayer.uuid&&LayerUtils.pathEqualOrBelow(sublayerpath,entry.path)){return[].concat(_toConsumableArray(result),[index])}return result},[]);if(isEmpty(indices)){return layers}indices.sort(function(a,b){return a-b});if(delta<0&&indices[0]<=0||delta>0&&indices[indices.length-1]>=exploded.length-1){return layers}if(preventSplittingGroups){// Prevent moving an entry out of a containing group
|
|
33
|
+
var idx=delta<0?indices[0]:indices[indices.length-1];var level=sublayerpath.length;if(level>exploded[idx+delta].path.length||level>0&&!isEqual(exploded[idx+delta].path.slice(0,level-1),sublayerpath.slice(0,-1))){return layers}// Avoid splitting sibling groups when reordering
|
|
34
|
+
if(exploded[idx+delta].path.length>level||!isEqual(exploded[idx+delta].path.slice(0,-1),sublayerpath.slice(0,-1))){// Find next slot
|
|
35
|
+
var siblinggrouppath=exploded[idx+delta].path.slice(0,level);siblinggrouppath[siblinggrouppath.length-1]+=delta;while(idx+delta>=0&&idx+delta<exploded.length&&(exploded[idx+delta].path.length>level||!isEqual(exploded[idx+delta].path.slice(0,level),siblinggrouppath))){delta+=delta>0?1:-1}// The above logic adds the number of items to skip to the delta which is already -1 or +1, so we need to decrease delta by one accordingly
|
|
36
|
+
if(Math.abs(delta)>1){delta+=delta>0?-1:1}if(idx+delta<0||idx+delta>=exploded.length){return layers}}}// Reorder layer
|
|
37
|
+
if(delta<0){var _iterator7=_createForOfIteratorHelper(indices),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var _idx=_step7.value;exploded.splice(_idx+delta,0,exploded.splice(_idx,1)[0])}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}}else{var _iterator8=_createForOfIteratorHelper(indices.reverse()),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var _idx2=_step8.value;exploded.splice(_idx2+delta,0,exploded.splice(_idx2,1)[0])}}catch(err){_iterator8.e(err)}finally{_iterator8.f()}}}// Re-assemble layers
|
|
38
|
+
var newlayers=LayerUtils.implodeLayers(exploded);// Re-add background layers
|
|
39
|
+
return[].concat(_toConsumableArray(newlayers),_toConsumableArray(layers.filter(function(layer){return layer.role===LayerRole.BACKGROUND})))},explodeLayers:function explodeLayers(layers){// Return array with one entry for every single sublayer)
|
|
40
|
+
var exploded=[];var _iterator9=_createForOfIteratorHelper(layers),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var layer=_step9.value;if(!isEmpty(layer.sublayers)){this.explodeSublayers(layer,layer,exploded)}else{var newLayer=_objectSpread({},layer);exploded.push({layer:newLayer,path:[],sublayer:newLayer})}}}catch(err){_iterator9.e(err)}finally{_iterator9.f()}return exploded},explodeSublayers:function explodeSublayers(layer,parent,exploded){var parentpath=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];for(var idx=0;idx<parent.sublayers.length;++idx){var path=[].concat(_toConsumableArray(parentpath),[idx]);if(parent.sublayers[idx].sublayers){LayerUtils.explodeSublayers(layer,parent.sublayers[idx],exploded,path)}else{// Reduced layer with one single sublayer per level, up to leaf
|
|
41
|
+
var redLayer=_objectSpread({},layer);var group=redLayer;var _iterator10=_createForOfIteratorHelper(path),_step10;try{for(_iterator10.s();!(_step10=_iterator10.n()).done;){var jdx=_step10.value;group.sublayers=[_objectSpread({},group.sublayers[jdx])];group=group.sublayers[0]}}catch(err){_iterator10.e(err)}finally{_iterator10.f()}exploded.push({layer:redLayer,path:path,sublayer:group})}}},implodeLayers:function implodeLayers(exploded){var newlayers=[];var usedLayerUUids=new Set;// Merge all possible items of an exploded layer array
|
|
42
|
+
var _iterator11=_createForOfIteratorHelper(exploded),_step11;try{for(_iterator11.s();!(_step11=_iterator11.n()).done;){var entry=_step11.value;var _layer2=entry.layer;// Attempt to merge with previous if possible
|
|
43
|
+
var target=newlayers.length>0?newlayers[newlayers.length-1]:null;var source=_layer2;if(target&&target.sublayers&&target.id===_layer2.id){var innertarget=target.sublayers[target.sublayers.length-1];var innersource=source.sublayers[0];// Exploded entries have only one entry per sublayer level
|
|
44
|
+
while(innertarget&&innertarget.sublayers&&innertarget.name===innersource.name){target=innertarget;source=innersource;innertarget=target.sublayers[target.sublayers.length-1];innersource=source.sublayers[0];// Exploded entries have only one entry per sublayer level
|
|
45
|
+
}target.sublayers.push(source.sublayers[0]);LayerUtils.addUUIDs(source.sublayers[0],usedLayerUUids)}else{newlayers.push(_layer2);LayerUtils.addUUIDs(_layer2,usedLayerUUids)}}// Ensure mutually exclusive groups have exactly one visible layer
|
|
46
|
+
}catch(err){_iterator11.e(err)}finally{_iterator11.f()}for(var _i=0,_newlayers=newlayers;_i<_newlayers.length;_i++){var layer=_newlayers[_i];LayerUtils.ensureMutuallyExclusive(layer)}for(var _i2=0,_newlayers2=newlayers;_i2<_newlayers2.length;_i2++){var _layer=_newlayers2[_i2];if(_layer.type==="wms"){Object.assign(_layer,LayerUtils.recomputeLayerBBox(_layer))}}return newlayers},insertLayer:function insertLayer(layers,newlayer,beforeattr,beforeval){var exploded=LayerUtils.explodeLayers(layers);var explodedAdd=LayerUtils.explodeLayers([newlayer]);var index=exploded.findIndex(function(entry){return entry.sublayer[beforeattr]===beforeval});if(index!==-1){exploded.splice.apply(exploded,[index,0].concat(_toConsumableArray(explodedAdd)))}return LayerUtils.implodeLayers(exploded)},ensureMutuallyExclusive:function ensureMutuallyExclusive(group){if(!isEmpty(group.sublayers)){if(group.mutuallyExclusive){var tristateSublayer=group.sublayers.find(function(sublayer){return sublayer.tristate===true});var visibleSublayer=tristateSublayer||group.sublayers.find(function(sublayer){return sublayer.visibility===true})||group.sublayers[0];var _iterator12=_createForOfIteratorHelper(group.sublayers),_step12;try{for(_iterator12.s();!(_step12=_iterator12.n()).done;){var sublayer=_step12.value;sublayer.visibility=sublayer===visibleSublayer}}catch(err){_iterator12.e(err)}finally{_iterator12.f()}}var _iterator13=_createForOfIteratorHelper(group.sublayers),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var _sublayer=_step13.value;LayerUtils.ensureMutuallyExclusive(_sublayer)}}catch(err){_iterator13.e(err)}finally{_iterator13.f()}}},getSublayerNames:function getSublayerNames(layer){var _this2=this;var toplevel=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return[toplevel&&layer.sublayers||filter&&!filter(layer)?null:layer.name].concat((layer.sublayers||[]).reduce(function(list,sublayer){return list.concat(_toConsumableArray(_this2.getSublayerNames(sublayer,false,filter)))},[])).filter(function(x){return x})},mergeSubLayers:function mergeSubLayers(baselayer,addlayer){addlayer=_objectSpread(_objectSpread({},baselayer),{},{sublayers:addlayer.sublayers});addlayer.externalLayerMap=_objectSpread({},addlayer.externalLayerMap);LayerUtils.extractExternalLayersFromSublayers(addlayer,addlayer);LayerUtils.addUUIDs(addlayer);if(isEmpty(addlayer.sublayers)){return _objectSpread({},baselayer)}if(isEmpty(baselayer.sublayers)){return addlayer}var explodedBase=LayerUtils.explodeLayers([baselayer]);var existing=explodedBase.map(function(entry){return entry.sublayer.name});var explodedAdd=LayerUtils.explodeLayers([addlayer]);explodedAdd=explodedAdd.filter(function(entry){return!existing.includes(entry.sublayer.name)});return LayerUtils.implodeLayers(explodedAdd.concat(explodedBase))[0]},searchSubLayer:function searchSubLayer(layer,attr,value){var path=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];if(layer.sublayers){var idx=0;var _iterator14=_createForOfIteratorHelper(layer.sublayers),_step14;try{for(_iterator14.s();!(_step14=_iterator14.n()).done;){var sublayer=_step14.value;var match=sublayer[attr]===value?sublayer:LayerUtils.searchSubLayer(sublayer,attr,value,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator14.e(err)}finally{_iterator14.f()}}else{if(layer[attr]===value){return layer}}return null},matchSubLayer:function matchSubLayer(layer,func){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];if(layer.sublayers){var idx=0;var _iterator15=_createForOfIteratorHelper(layer.sublayers),_step15;try{for(_iterator15.s();!(_step15=_iterator15.n()).done;){var sublayer=_step15.value;var match=func(sublayer)?sublayer:LayerUtils.matchSubLayer(sublayer,func,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator15.e(err)}finally{_iterator15.f()}}else{if(func(layer)){return layer}}return null},searchLayer:function searchLayer(layers,key,value){var roles=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[LayerRole.THEME,LayerRole.USERLAYER];var _iterator16=_createForOfIteratorHelper(layers),_step16;try{for(_iterator16.s();!(_step16=_iterator16.n()).done;){var layer=_step16.value;if(roles.includes(layer.role)){var matchsublayer=LayerUtils.searchSubLayer(layer,key,value);if(matchsublayer){return{layer:layer,sublayer:matchsublayer}}}}}catch(err){_iterator16.e(err)}finally{_iterator16.f()}return null},sublayerVisible:function sublayerVisible(layer,sublayerpath){var visible=layer.visibility!==false;var sublayer=layer;var _iterator17=_createForOfIteratorHelper(sublayerpath),_step17;try{for(_iterator17.s();!(_step17=_iterator17.n()).done;){var index=_step17.value;sublayer=sublayer.sublayers[index];visible&=sublayer.visibility!==false;if(!visible){return false}}}catch(err){_iterator17.e(err)}finally{_iterator17.f()}return true},computeLayerVisibility:function computeLayerVisibility(layer){if(isEmpty(layer.sublayers)||layer.visibility===false){return layer.visibility?1:0}var visible=0;layer.sublayers.map(function(sublayer){var _sublayer$visibility;var sublayervisibility=(_sublayer$visibility=sublayer.visibility)!==null&&_sublayer$visibility!==void 0?_sublayer$visibility:true;if(sublayer.sublayers&&sublayervisibility){visible+=LayerUtils.computeLayerVisibility(sublayer)}else{visible+=sublayervisibility?1:0}});return visible/layer.sublayers.length},computeLayerOpacity:function computeLayerOpacity(layer){if(isEmpty(layer.sublayers)){var _layer$opacity2;return(_layer$opacity2=layer.opacity)!==null&&_layer$opacity2!==void 0?_layer$opacity2:255}var opacity=0;layer.sublayers.map(function(sublayer){opacity+=LayerUtils.computeLayerOpacity(sublayer)});return opacity/layer.sublayers.length},computeLayerQueryable:function computeLayerQueryable(layer){var queryable=0;layer.sublayers.map(function(sublayer){var _sublayer$omitFromQue;var sublayerqueryable=(_sublayer$omitFromQue=!sublayer.omitFromQueryLayers)!==null&&_sublayer$omitFromQue!==void 0?_sublayer$omitFromQue:true;if(sublayer.sublayers&&sublayerqueryable){queryable+=LayerUtils.computeLayerQueryable(sublayer)}else{queryable+=sublayerqueryable?1:0}});return queryable/layer.sublayers.length},hasQueryableSublayers:function hasQueryableSublayers(layer){return layer.sublayers.find(function(sublayer){return sublayer.sulayers?LayerUtils.hasQueryableSublayers(sublayer):sublayer.queryable})},cloneLayer:function cloneLayer(layer,sublayerpath){var newlayer=_objectSpread({},layer);var cur=newlayer;for(var i=0;i<sublayerpath.length;++i){var idx=sublayerpath[i];cur.sublayers=[].concat(_toConsumableArray(cur.sublayers.slice(0,idx)),[_objectSpread({},cur.sublayers[idx])],_toConsumableArray(cur.sublayers.slice(idx+1)));cur=cur.sublayers[idx]}return{newlayer:newlayer,newsublayer:cur}},collectGroupLayers:function collectGroupLayers(layer,parentGroups,groupLayers){if(!isEmpty(layer.sublayers)){var _iterator18=_createForOfIteratorHelper(layer.sublayers),_step18;try{for(_iterator18.s();!(_step18=_iterator18.n()).done;){var sublayer=_step18.value;LayerUtils.collectGroupLayers(sublayer,parentGroups.concat(layer.name),groupLayers)}}catch(err){_iterator18.e(err)}finally{_iterator18.f()}}else{var _iterator19=_createForOfIteratorHelper(parentGroups),_step19;try{for(_iterator19.s();!(_step19=_iterator19.n()).done;){var group=_step19.value;groupLayers[group]=(groupLayers[group]||[]).concat(layer.name)}}catch(err){_iterator19.e(err)}finally{_iterator19.f()}}},replaceLayerGroups:function replaceLayerGroups(layerConfigs,layer){var groupLayers={};LayerUtils.collectGroupLayers(layer,[],groupLayers);var newLayerConfigs=[];var _iterator20=_createForOfIteratorHelper(layerConfigs),_step20;try{var _loop4=function _loop4(){var layerConfig=_step20.value;if(layerConfig.name in groupLayers){newLayerConfigs.push.apply(newLayerConfigs,_toConsumableArray(groupLayers[layerConfig.name].map(function(name){return _objectSpread(_objectSpread({},layerConfig),{},{name:name})})))}else{newLayerConfigs.push(layerConfig)}};for(_iterator20.s();!(_step20=_iterator20.n()).done;){_loop4()}}catch(err){_iterator20.e(err)}finally{_iterator20.f()}return newLayerConfigs},extractExternalLayersFromSublayers:function extractExternalLayersFromSublayers(toplayer,layer){if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer){if(sublayer.externalLayer){var externalLayer=_objectSpread({},sublayer.externalLayer);LayerUtils.completeExternalLayer(externalLayer,sublayer,toplayer.mapCrs);toplayer.externalLayerMap[sublayer.name]=externalLayer;sublayer=_objectSpread({},sublayer);delete sublayer.externalLayer}if(sublayer.sublayers){LayerUtils.extractExternalLayersFromSublayers(toplayer,sublayer)}return sublayer})}},completeExternalLayer:function completeExternalLayer(externalLayer,sublayer,mapCrs){externalLayer.title=externalLayer.title||(sublayer||{}).title||externalLayer.name;externalLayer.uuid=uuidv4();if(externalLayer.type==="wms"||externalLayer.params){externalLayer.version=externalLayer.version||"1.3.0";externalLayer.featureInfoUrl=externalLayer.featureInfoUrl||externalLayer.url;externalLayer.legendUrl=externalLayer.legendUrl||externalLayer.url;externalLayer.queryLayers=externalLayer.queryLayers||externalLayer.params.LAYERS.split(",");var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i3=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i3<_Object$keys.length;_i3++){var entry=_Object$keys[_i3];if(externalLayer.featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){externalLayer.infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}}else if(externalLayer.type==="mvt"){externalLayer.projection=mapCrs;if(externalLayer.tileGridName){externalLayer.tileGridConfig=(ConfigUtils.getConfigProp("mvtTileGrids")||{})[externalLayer.tileGridName];if(!externalLayer.tileGridConfig){/* eslint-disable-next-line */console.warn("Tile grid config not found: "+externalLayer.tileGridName)}}}},getLegendUrl:function getLegendUrl(layer,sublayer,scale,map,bboxDependentLegend,scaleDependentLegend,extraLegendParameters){if(layer.type!=="wms"){return layer.legendUrl||""}var requestParams={SERVICE:"WMS",REQUEST:"GetLegendGraphic",FORMAT:"image/png",CRS:map.projection,SRS:map.projection,SLD_VERSION:"1.1.0",WIDTH:200};if(extraLegendParameters){Object.assign(requestParams,Object.fromEntries(extraLegendParameters.split("&").map(function(entry){return entry.split("=")})))}if(scaleDependentLegend===true||scaleDependentLegend==="theme"&&layer.role===LayerRole.THEME){requestParams.SCALE=Math.round(scale)}if(bboxDependentLegend===true||bboxDependentLegend==="theme"&&layer.role===LayerRole.THEME){var bounds=map.bbox.bounds;if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&layer.version==="1.3.0"){requestParams.BBOX=[bounds[1],bounds[0],bounds[3],bounds[2]].join(",")}else{requestParams.BBOX=bounds.join(",")}}if(layer.externalLayerMap&&layer.externalLayerMap[sublayer.name]){var externalLayer=layer.externalLayerMap[sublayer.name];if(externalLayer.type!=="wms"){return externalLayer.legendUrl||""}var urlParts=url.parse(externalLayer.legendUrl,true);urlParts.query=Object.keys(urlParts.query).filter(function(key){// Filter service, request, version
|
|
47
|
+
return!["service","request","version"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,urlParts.query[key]))},{});urlParts.query=_objectSpread(_objectSpread(_objectSpread({VERSION:layer.version},urlParts.query),requestParams),{},{LAYER:externalLayer.params.LAYERS});delete urlParts.search;return url.format(urlParts)}else{var _layer$params$FILTER;var layername=layer===sublayer?layer.params.LAYERS.split(",").reverse().join(","):sublayer.name;var style=layer===sublayer?layer.params.STYLES.split(",").reverse().join(","):sublayer.style;var _urlParts=url.parse(layer.legendUrl,true);_urlParts.query=Object.keys(_urlParts.query).filter(function(key){// Filter service, request, version
|
|
48
|
+
return!["service","request","version"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,_urlParts.query[key]))},{});_urlParts.query=_objectSpread(_objectSpread(_objectSpread({VERSION:layer.version},_urlParts.query),requestParams),{},{LAYER:layername,STYLES:style,FILTER:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""});delete _urlParts.search;return url.format(_urlParts)}},layerScaleInRange:function layerScaleInRange(layer,mapScale){return(layer.minScale===undefined||mapScale>=layer.minScale)&&(layer.maxScale===undefined||mapScale<layer.maxScale)},addExternalLayerPrintParams:function addExternalLayerPrintParams(layer,params,printCrs,counterRef){var qgisServerVersion=ConfigUtils.getConfigProp("qgisServerVersion",null,3);if(qgisServerVersion>=3){if(layer.type==="wms"){var layerUrl=layer.url;var urlParts=url.parse(layerUrl,true);// Resolve relative urls
|
|
49
|
+
if(!urlParts.host){var locationParts=url.parse(window.location.href);urlParts.protocol=locationParts.protocol;urlParts.host=locationParts.host;delete urlParts.search;layerUrl=url.format(urlParts)}var identifier=String.fromCharCode(65+counterRef[0]++);params.LAYERS.push("EXTERNAL_WMS:"+identifier);params.STYLES.push("");params.COLORS.push("");params[identifier+":url"]=layerUrl;params[identifier+":layers"]=layer.params.LAYERS;params[identifier+":styles"]=layer.params.STYLES;params[identifier+":format"]="image/png";if(layer.serverType==="qgis"&&layer.params.FILTER){params[identifier+":filter"]=layer.params.FILTER}params[identifier+":crs"]=printCrs;params[identifier+":dpiMode"]="7";params[identifier+":contextualWMSLegend"]="0";// If only one layer is request, request external layer with full opacity
|
|
50
|
+
// and control opacity at QGIS server level (helps preserving opacity if external server does not support OPACITIES)
|
|
51
|
+
var opacities=layer.params.OPACITIES.split(",");if(opacities.length===1){params.OPACITIES.push(opacities[0]);params[identifier+":opacities"]="255"}else{params.OPACITIES.push("255");params[identifier+":opacities"]=layer.params.OPACITIES}if(layer.url.includes("?")){params[identifier+":IgnoreGetMapUrl"]="1"}Object.entries(layer.extwmsparams||{}).forEach(function(_ref7){var _ref8=_slicedToArray(_ref7,2),key=_ref8[0],value=_ref8[1];params[identifier+":"+key]=value})}}else if(qgisServerVersion===2){if(layer.type==="wms"){var names=layer.params.LAYERS.split(",");var _opacities2=layer.params.OPACITIES.split(",");for(var idx=0;idx<names.length;++idx){// Handled by qwc-print-service
|
|
52
|
+
params.LAYERS.push("wms:".concat(layer.url,"#").concat(names[idx]));params.OPACITIES.push(_opacities2[idx]);params.COLORS.push("");params.STYLES.push("")}}else if(layer.type==="wfs"){// Handled by qwc-print-service
|
|
53
|
+
params.LAYERS.push("wfs:".concat(layer.url,"#").concat(layer.name));params.OPACITIES.push(layer.opacity);params.COLORS.push(layer.color);params.STYLES.push("")}}},collectPrintParams:function collectPrintParams(layers,theme,printScale,printCrs,printExternalLayers,omitBackgroundLayer){var params={LAYERS:[],OPACITIES:[],STYLES:[],COLORS:[],FILTER:"",FILTER_GEOM:""};var counterRef=[0];var _iterator21=_createForOfIteratorHelper(layers),_step21;try{for(_iterator21.s();!(_step21=_iterator21.n()).done;){var _layer3=_step21.value;if(_layer3.role===LayerRole.THEME&&_layer3.params.LAYERS){var _layer3$params$FILTER,_layer3$params$FILTER2;params.LAYERS.push(_layer3.params.LAYERS);params.OPACITIES.push(_layer3.params.OPACITIES);params.STYLES.push(_layer3.params.STYLES);params.COLORS.push(_layer3.params.LAYERS.split(",").map(function(){return""}).join(","));params.FILTER=(_layer3$params$FILTER=_layer3.params.FILTER)!==null&&_layer3$params$FILTER!==void 0?_layer3$params$FILTER:"";params.FILTER_GEOM=(_layer3$params$FILTER2=_layer3.params.FILTER_GEOM)!==null&&_layer3$params$FILTER2!==void 0?_layer3$params$FILTER2:""}else if(printExternalLayers&&_layer3.role===LayerRole.USERLAYER&&_layer3.visibility!==false&&LayerUtils.layerScaleInRange(_layer3,printScale)){LayerUtils.addExternalLayerPrintParams(_layer3,params,printCrs,counterRef)}}}catch(err){_iterator21.e(err)}finally{_iterator21.f()}var backgroundLayer=layers.find(function(layer){return layer.role===LayerRole.BACKGROUND&&layer.visibility===true});if(backgroundLayer&&!omitBackgroundLayer){var backgroundLayerName=backgroundLayer.name;var themeBackgroundLayer=theme.backgroundLayers.find(function(entry){return entry.name===backgroundLayerName});var printBackgroundLayer=themeBackgroundLayer?themeBackgroundLayer.printLayer:null;if(printBackgroundLayer){// Use printLayer defined in qgis project
|
|
54
|
+
var printBgLayerName=printBackgroundLayer;if(Array.isArray(printBackgroundLayer)){printBgLayerName=null;for(var i=0;i<printBackgroundLayer.length;++i){printBgLayerName=printBackgroundLayer[i].name;if(printScale<=printBackgroundLayer[i].maxScale){break}}}if(printBgLayerName){var match=null;if((match=printBgLayerName.match(/^(\w+):(.*)#([^#]+)$/))&&match[1]==="wms"){if(printExternalLayers){var layer={type:"wms",params:{LAYERS:match[3],OPACITIES:"255",STYLES:""},url:match[2]};LayerUtils.addExternalLayerPrintParams(layer,params,printCrs,counterRef)}}else{params.LAYERS.push(printBgLayerName);params.OPACITIES.push("255");params.COLORS.push("");params.STYLES.push("")}}}else if(printExternalLayers){// Inject client-side wms as external layer for print
|
|
55
|
+
var items=backgroundLayer.type==="group"?backgroundLayer.items:[backgroundLayer];items.slice(0).reverse().forEach(function(layer){if(LayerUtils.layerScaleInRange(layer,printScale)){LayerUtils.addExternalLayerPrintParams(layer,params,printCrs,counterRef)}})}}params.LAYERS=params.LAYERS.reverse().join(",");params.OPACITIES=params.OPACITIES.reverse().join(",");params.COLORS=params.COLORS.reverse().join(",");params.STYLES=params.STYLES.reverse().join(",");return params},getTimeDimensionValues:function getTimeDimensionValues(layer){var result={names:new Set,values:new Set,attributes:{}};if(layer.visibility){(layer.dimensions||[]).forEach(function(dimension){if(dimension.units==="ISO8601"&&dimension.value){result.names.add(dimension.name);dimension.value.split(/,\s+/).filter(function(x){return x}).forEach(function(x){return result.values.add(x)});result.attributes[layer.name]=[dimension.fieldName,dimension.endFieldName]}})}(layer.sublayers||[]).forEach(function(sublayer){var sublayerResult=LayerUtils.getTimeDimensionValues(sublayer);sublayerResult.names.forEach(function(x){return result.names.add(x)});sublayerResult.values.forEach(function(x){return result.values.add(x)});result.attributes=_objectSpread(_objectSpread({},result.attributes),sublayerResult.attributes)});return result},getAttribution:function getAttribution(layer,map){var showThemeAttributionOnly=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var transformedMapBBoxes=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};if(layer.visibility===false||showThemeAttributionOnly&&layer.role!==LayerRole.THEME){return{}}var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);if(!LayerUtils.layerScaleInRange(layer,mapScale)){return{}}if(layer.bbox&&layer.bbox.bounds){var layerCrs=layer.bbox.crs||map.projection;if(!transformedMapBBoxes[layerCrs]){transformedMapBBoxes[layerCrs]=CoordinatesUtils.reprojectBbox(map.bbox.bounds,map.projection,layerCrs)}var mapbbox=transformedMapBBoxes[layerCrs];var laybbox=layer.bbox.bounds;if(mapbbox[0]>laybbox[2]||mapbbox[2]<laybbox[0]||mapbbox[1]>laybbox[3]||mapbbox[3]<laybbox[1]){// Extents don't overlap
|
|
56
|
+
return{}}}var copyrights={};if(layer.sublayers){Object.assign(copyrights,layer.sublayers.reduce(function(res,sublayer){return _objectSpread(_objectSpread({},res),LayerUtils.getAttribution(sublayer,map,false,transformedMapBBoxes))},{}))}else if(layer.type==="group"&&layer.items){Object.assign(copyrights,layer.items.reduce(function(res,sublayer){return _objectSpread(_objectSpread({},res),LayerUtils.getAttribution(sublayer,map,false,transformedMapBBoxes))},{}))}if(layer.attribution&&layer.attribution.Title){var key=layer.attribution.OnlineResource||layer.attribution.Title;copyrights[key]={title:layer.attribution.OnlineResource?layer.attribution.Title:null,layers:[].concat(_toConsumableArray((copyrights[key]||{}).layers||[]),[layer])}}return copyrights},recomputeLayerBBox:function recomputeLayerBBox(layer){if(isEmpty(layer.sublayers)){return layer}var bounds=null;var newlayer=_objectSpread({},layer);newlayer.sublayers=newlayer.sublayers.map(function(sublayer){sublayer=LayerUtils.recomputeLayerBBox(sublayer);if(!bounds&&sublayer.bbox&&sublayer.bbox.bounds){bounds=CoordinatesUtils.reprojectBbox(sublayer.bbox.bounds,sublayer.bbox.crs,"EPSG:4326")}else if(bounds&&sublayer.bbox&&sublayer.bbox.bounds){var sublayerbounds=CoordinatesUtils.reprojectBbox(sublayer.bbox.bounds,sublayer.bbox.crs,"EPSG:4326");bounds=[Math.min(bounds[0],sublayerbounds[0]),Math.min(bounds[1],sublayerbounds[1]),Math.max(bounds[2],sublayerbounds[2]),Math.max(bounds[3],sublayerbounds[3])]}return sublayer});if(bounds){newlayer.bbox={bounds:bounds,crs:"EPSG:4326"}}return newlayer},propagateLayerProperty:function propagateLayerProperty(newlayer,property,value){var path=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;Object.assign(newlayer,_defineProperty({},property,value));// Don't propagate visibility for mutually exclusive groups
|
|
57
|
+
if(newlayer.sublayers&&!(property==="visibility"&&newlayer.mutuallyExclusive)){newlayer.sublayers=newlayer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread({},sublayer);LayerUtils.propagateLayerProperty(newsublayer,property,value,path?path.slice(1):null);return newsublayer}else{return sublayer}})}}};export default LayerUtils;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 GeoSolutions Sas
|
|
3
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the BSD-style license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/import StandardApp from"../components/StandardApp";import ConfigUtils from"./ConfigUtils";var LocaleUtils={tr:function tr(key){var state=StandardApp.store.getState();var text=key in state.locale.messages?state.locale.messages[key]||state.locale.fallbackMessages[key]||key:key;var args=Array.prototype.slice.call(arguments,1);if(args.length>0){return text.replace(/{(\d+)}/g,function(match,number){return typeof args[number]!=="undefined"?args[number]:match})}else{return text}},// Just a stub to make updateTranslations pick up the msgId
|
|
9
|
+
trmsg:function trmsg(key){return key},trWithFallback:function trWithFallback(key,fallback){var state=StandardApp.store.getState();return state.locale.messages[key]||fallback},lang:function lang(){var state=StandardApp.store.getState();return state.locale.current},toLocaleFixed:function toLocaleFixed(number,decimals){if(ConfigUtils.getConfigProp("localeAwareNumbers")){return number.toLocaleString(LocaleUtils.lang(),{minimumFractionDigits:decimals,maximumFractionDigits:decimals})}else{return number.toFixed(decimals)}}};export default LocaleUtils;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015-2016 GeoSolutions Sas
|
|
3
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the BSD-style license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";var DEFAULT_SCREEN_DPI=96;var METERS_PER_UNIT={"m":1,"degrees":111194.87428468118,"ft":0.3048,"us-ft":1200/3937};var hooks={};var MapUtils={GET_PIXEL_FROM_COORDINATES_HOOK:"GET_PIXEL_FROM_COORDINATES_HOOK",GET_COORDINATES_FROM_PIXEL_HOOK:"GET_COORDINATES_FROM_PIXEL_HOOK",GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK:"GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK",GET_NATIVE_LAYER:"GET_NATIVE_LAYER",GET_MAP:"GET_MAP",registerHook:function registerHook(name,hook){hooks[name]=hook},getHook:function getHook(name){return hooks[name]},/**
|
|
9
|
+
* @param dpi {number} dot per inch resolution
|
|
10
|
+
* @return {number} dot per meter resolution
|
|
11
|
+
*/dpi2dpm:function dpi2dpm(dpi){return(dpi||DEFAULT_SCREEN_DPI)*(100/2.54)},/**
|
|
12
|
+
* @param dpi {number} screen resolution in dots per inch.
|
|
13
|
+
* @param projection {string} map projection.
|
|
14
|
+
* @return {number} dots per map unit.
|
|
15
|
+
*/dpi2dpu:function dpi2dpu(dpi,projection){var units=CoordinatesUtils.getUnits(projection);return METERS_PER_UNIT[units]*MapUtils.dpi2dpm(dpi)},/**
|
|
16
|
+
* Get a list of scales for each zoom level of the Google Mercator.
|
|
17
|
+
* @param minZoom {number} min zoom level.
|
|
18
|
+
* @param maxZoom {number} max zoom level.
|
|
19
|
+
* @return {array} a list of scale for each zoom level in the given interval.
|
|
20
|
+
*/getGoogleMercatorScales:function getGoogleMercatorScales(minZoom,maxZoom){var dpi=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_SCREEN_DPI;// Google mercator params
|
|
21
|
+
var RADIUS=6378137;var TILE_WIDTH=256;var ZOOM_FACTOR=2;var retval=[];for(var l=minZoom;l<=maxZoom;l++){retval.push(2*Math.PI*RADIUS/(TILE_WIDTH*Math.pow(ZOOM_FACTOR,l)/MapUtils.dpi2dpm(dpi)))}return retval},/**
|
|
22
|
+
* @param scales {array} list of scales.
|
|
23
|
+
* @param projection {string} map projection.
|
|
24
|
+
* @param dpi {number} screen resolution in dots per inch.
|
|
25
|
+
* @return {array} a list of resolutions corresponding to the given scales, projection and dpi.
|
|
26
|
+
*/getResolutionsForScales:function getResolutionsForScales(scales,projection){var dpi=arguments.length>2&&arguments[2]!==undefined?arguments[2]:DEFAULT_SCREEN_DPI;var dpu=MapUtils.dpi2dpu(dpi,projection);var resolutions=scales.map(function(scale){return scale/dpu});return resolutions},/**
|
|
27
|
+
* Calculates the best fitting zoom level for the given extent.
|
|
28
|
+
*
|
|
29
|
+
* @param extent {Array} [minx, miny, maxx, maxy]
|
|
30
|
+
* @param resolutions {Array} The list of available map resolutions
|
|
31
|
+
* @param mapSize {Object} current size of the map.
|
|
32
|
+
* @param minZoom {number} min zoom level.
|
|
33
|
+
* @param maxZoom {number} max zoom level.
|
|
34
|
+
* @param dpi {number} screen resolution in dot per inch.
|
|
35
|
+
* @return {Number} the zoom level fitting th extent
|
|
36
|
+
*/getZoomForExtent:function getZoomForExtent(extent,resolutions,mapSize,minZoom,maxZoom){var wExtent=extent[2]-extent[0];var hExtent=extent[3]-extent[1];var xResolution=Math.abs(wExtent/mapSize.width);var yResolution=Math.abs(hExtent/mapSize.height);var extentResolution=Math.max(xResolution,yResolution);if(ConfigUtils.getConfigProp("allowFractionalZoom")===true){return Math.max(minZoom,Math.min(this.computeZoom(resolutions,extentResolution),maxZoom))}else{var calc=resolutions.reduce(function(previous,resolution,index){var diff=Math.abs(resolution-extentResolution);return diff>previous.diff?previous:{diff:diff,zoom:index}},{diff:Number.POSITIVE_INFINITY,zoom:0});return Math.max(minZoom,Math.min(calc.zoom,maxZoom))}},/**
|
|
37
|
+
* Calculates the extent for the provided center and zoom level
|
|
38
|
+
* @param center {Array} [x, y]
|
|
39
|
+
* @param zoom {number} The zoom level
|
|
40
|
+
* @param resolutions {Array} The list of map resolutions
|
|
41
|
+
* @param mapSize {Object} The current size of the map
|
|
42
|
+
*/getExtentForCenterAndZoom:function getExtentForCenterAndZoom(center,zoom,resolutions,mapSize){if(ConfigUtils.getConfigProp("allowFractionalZoom")!==true){zoom=Math.round(zoom)}var width=this.computeForZoom(resolutions,zoom)*mapSize.width;var height=this.computeForZoom(resolutions,zoom)*mapSize.height;return[center[0]-0.5*width,center[1]-0.5*height,center[0]+0.5*width,center[1]+0.5*height]},/**
|
|
43
|
+
* Transform width and height specified in meters to the units of the specified projection
|
|
44
|
+
*
|
|
45
|
+
* @param projection {string} projection.
|
|
46
|
+
* @param center {Array} Center of extent in EPSG:4326 coordinates.
|
|
47
|
+
* @param width {number} Width in meters.
|
|
48
|
+
* @param height {number} Height in meters.
|
|
49
|
+
*/transformExtent:function transformExtent(projection,center,width,height){var units=CoordinatesUtils.getUnits(projection);if(units==="ft"){return{width:width/METERS_PER_UNIT.ft,height:height/METERS_PER_UNIT.ft}}else if(units==="us-ft"){return{width:width/METERS_PER_UNIT["us-ft"],height:height/METERS_PER_UNIT["us-ft"]}}else if(units==="degrees"){// https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree
|
|
50
|
+
var phi=center[1]/180*Math.PI;var latPerM=111132.92-559.82*Math.cos(2*phi)+1.175*Math.cos(4*phi)-0.0023*Math.cos(6*phi);var lonPerM=111412.84*Math.cos(phi)-93.5*Math.cos(3*phi)+0.118*Math.cos(5*phi);return{width:width/lonPerM,height:height/latPerM}}return{width:width,height:height}},/**
|
|
51
|
+
* Compute the scale or resolution matching a (possibly fractional) zoom level.
|
|
52
|
+
*
|
|
53
|
+
* @param list {Array} List of scales or resolutions.
|
|
54
|
+
* @param zoomLevel (number) Zoom level (integer or fractional).
|
|
55
|
+
* @return Scale of resolution matching zoomLevel
|
|
56
|
+
*/computeForZoom:function computeForZoom(list,zoomLevel){if(ConfigUtils.getConfigProp("allowFractionalZoom")!==true){return list[Math.min(list.length-1,Math.round(zoomLevel))]}zoomLevel=Math.max(zoomLevel,0);var upper=Math.ceil(zoomLevel);var lower=Math.floor(zoomLevel);if(upper>=list.length){return list[list.length-1]}var frac=zoomLevel-lower;return list[lower]*(1-frac)+list[upper]*frac},/**
|
|
57
|
+
* Compute the (possibly fractional) zoom level matching the specified scale or resolution.
|
|
58
|
+
*
|
|
59
|
+
* @param list {Array} List of scales or resolutions.
|
|
60
|
+
* @param value (number) Scale or resolution.
|
|
61
|
+
* @return Zoom level matching the specified scale or resolution.
|
|
62
|
+
*/computeZoom:function computeZoom(list,value){if(ConfigUtils.getConfigProp("allowFractionalZoom")===true){var index=0;for(var i=1;i<list.length-1;++i){if(value<=list[i]){index=i}}return index+(value-list[index])/(list[index+1]-list[index])}else{var closestVal=Math.abs(value-list[0]);var closestIdx=0;for(var _i=1;_i<list.length;++_i){var currVal=Math.abs(value-list[_i]);if(currVal<closestVal){closestVal=currVal;closestIdx=_i}}return closestIdx}},/**
|
|
63
|
+
* Convert degrees to radians
|
|
64
|
+
* @param degrees {number}
|
|
65
|
+
* @return {number} in radians
|
|
66
|
+
*/degreesToRadians:function degreesToRadians(degrees){var pi=Math.PI;return degrees*(pi/180)}};export default MapUtils;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2016 GeoSolutions Sas
|
|
3
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the BSD-style license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/import ol from"openlayers";import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";import LocaleUtils from"./LocaleUtils";var MeasureUtils={getFormattedBearingValue:function getFormattedBearingValue(azimuth){var bearing="";if(azimuth>=0&&azimuth<90){bearing="N "+this.degToDms(azimuth)+" E"}else if(azimuth>90&&azimuth<=180){bearing="S "+this.degToDms(180-azimuth)+" E"}else if(azimuth>180&&azimuth<270){bearing="S "+this.degToDms(azimuth-180)+" W"}else if(azimuth>=270&&azimuth<=360){bearing="N "+this.degToDms(360-azimuth)+" W"}return bearing},formatDuration:function formatDuration(valueSeconds){return new Date(valueSeconds*1000).toISOString().slice(11,19)},formatMeasurement:function formatMeasurement(valueMetric,isArea){var unit=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"metric";var decimals=arguments.length>3&&arguments[3]!==undefined?arguments[3]:-1;var withUnit=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;if(decimals<0){decimals=ConfigUtils.getConfigProp("measurementPrecision",null,2)}var result="";var unitlabel=unit;switch(unit){case"metric":if(isArea){if(valueMetric>1000000){result=LocaleUtils.toLocaleFixed(valueMetric/1000000,decimals);unitlabel="km\xB2"}else if(valueMetric>10000){result=LocaleUtils.toLocaleFixed(valueMetric/10000,decimals);unitlabel="ha"}else{result=LocaleUtils.toLocaleFixed(valueMetric,decimals);unitlabel="m\xB2"}}else{if(valueMetric>1000){result=LocaleUtils.toLocaleFixed(valueMetric/1000,decimals);unitlabel="km"}else{result=LocaleUtils.toLocaleFixed(valueMetric,decimals);unitlabel="m"}}break;case"imperial":if(isArea){if(valueMetric>2.58999*1000000){result=LocaleUtils.toLocaleFixed(valueMetric*3.86102159e-7,decimals);unitlabel="mi\xB2"}else if(valueMetric>4046.86){result=LocaleUtils.toLocaleFixed(valueMetric*0.0001,decimals);unitlabel="acre"}else{result=LocaleUtils.toLocaleFixed(valueMetric*10.7639,decimals);unitlabel="ft\xB2"}}else{if(valueMetric>1609.34){result=LocaleUtils.toLocaleFixed(valueMetric*0.000621371,decimals);unitlabel="mi"}else{result=LocaleUtils.toLocaleFixed(valueMetric*3.28084,decimals);unitlabel="ft"}}break;case"m":result=LocaleUtils.toLocaleFixed(valueMetric,decimals);break;case"ft":result=LocaleUtils.toLocaleFixed(valueMetric*3.28084,decimals);break;case"km":result=LocaleUtils.toLocaleFixed(valueMetric*0.001,decimals);break;case"mi":result=LocaleUtils.toLocaleFixed(valueMetric*0.000621371,decimals);break;case"sqm":result=LocaleUtils.toLocaleFixed(valueMetric,decimals);unitlabel="m\xB2";break;case"sqft":result=LocaleUtils.toLocaleFixed(valueMetric*10.7639,decimals);unitlabel="ft\xB2";break;case"sqkm":result=LocaleUtils.toLocaleFixed(valueMetric*0.000001,decimals);unitlabel="km\xB2";break;case"sqmi":result=LocaleUtils.toLocaleFixed(valueMetric*3.86102159e-7,decimals);unitlabel="mi\xB2";break;case"ha":result=LocaleUtils.toLocaleFixed(valueMetric*0.0001,decimals);break;case"acre":result=LocaleUtils.toLocaleFixed(valueMetric*0.000247105381467,decimals);break;default:result=LocaleUtils.toLocaleFixed(valueMetric,decimals);break}if(withUnit){result+=" "+unitlabel}return result},getFormattedLength:function getFormattedLength(unit,length){var decimals=arguments.length>2&&arguments[2]!==undefined?arguments[2]:2;var withUnit=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var result="";switch(unit){case"m":result=LocaleUtils.toLocaleFixed(length,decimals);break;case"ft":result=LocaleUtils.toLocaleFixed(length*3.28084,decimals);break;case"km":result=LocaleUtils.toLocaleFixed(length*0.001,decimals);break;case"mi":result=LocaleUtils.toLocaleFixed(length*0.000621371,decimals);break;default:result=LocaleUtils.toLocaleFixed(length,decimals);break}if(withUnit){result+=" "+unit}return result},convertLength:function convertLength(length,fromUnit,toUnit){var lengthMeters=length;switch(fromUnit){case"m":lengthMeters=length;break;case"ft":lengthMeters=length*0.3048;break;case"km":lengthMeters=length*1000;break;case"mi":lengthMeters=length*1609.34;break;default:lengthMeters=length;break}switch(toUnit){case"m":return lengthMeters;case"ft":return lengthMeters*3.28084;case"km":return lengthMeters*0.001;case"mi":return lengthMeters*0.000621371;default:return lengthMeters}},getFormattedArea:function getFormattedArea(unit,area){var decimals=arguments.length>2&&arguments[2]!==undefined?arguments[2]:2;var withUnit=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var result="";var unitlabel=unit;switch(unit){case"sqm":result=LocaleUtils.toLocaleFixed(area,decimals);unitlabel="m\xB2";break;case"sqft":result=LocaleUtils.toLocaleFixed(area*10.7639,decimals);unitlabel="ft\xB2";break;case"sqkm":result=LocaleUtils.toLocaleFixed(area*0.000001,decimals);unitlabel="km\xB2";break;case"sqmi":result=LocaleUtils.toLocaleFixed(area*3.86102159e-7,decimals);unitlabel="mi\xB2";break;case"ha":result=LocaleUtils.toLocaleFixed(area*0.0001,decimals);break;case"acre":result=LocaleUtils.toLocaleFixed(area*0.000247105381467,decimals);break;default:result=LocaleUtils.toLocaleFixed(area,decimals);break}if(withUnit){result+=" "+unitlabel}return result},degToDms:function degToDms(deg){// convert decimal deg to minutes and seconds
|
|
9
|
+
var d=Math.floor(deg);var minfloat=(deg-d)*60;var m=Math.floor(minfloat);var secfloat=(minfloat-m)*60;var s=Math.floor(secfloat);return""+d+"\xB0 "+m+"' "+s+"'' "},updateFeatureMeasurements:function updateFeatureMeasurements(feature,geomType,featureCrs,settings){var _settings$displayCrs;var geodesic=ConfigUtils.getConfigProp("geodesicMeasurements");var measurements={lenUnit:settings.lenUnit,areaUnit:settings.areaUnit};var displayCrs=(_settings$displayCrs=settings.displayCrs)!==null&&_settings$displayCrs!==void 0?_settings$displayCrs:featureCrs;feature.set("label","");feature.set("segment_labels",undefined);var geom=feature.getGeometry();if(geomType==="Point"){feature.set("label",CoordinatesUtils.getFormattedCoordinate(geom.getCoordinates(),featureCrs,displayCrs))}else if(geomType==="LineString"){var lengths=MeasureUtils.computeSegmentLengths(geom.getCoordinates(),featureCrs,geodesic);measurements.segment_lengths=lengths;measurements.length=lengths.reduce(function(sum,len){return sum+len},0);feature.set("segment_labels",lengths.map(function(length){return MeasureUtils.formatMeasurement(length,false,settings.lenUnit)}))}else if(["Ellipse","Polygon","Square","Box"].includes(geomType)){var area=MeasureUtils.computeArea(geom,featureCrs,geodesic);measurements.area=area;feature.set("label",MeasureUtils.formatMeasurement(area,true,settings.areaUnit))}else if(geomType==="Circle"){var radius=geom.getRadius();measurements.radius=radius;feature.set("label","r = "+MeasureUtils.formatMeasurement(radius,false,settings.lenUnit))}else if(geomType==="Bearing"){var coo=geom.getCoordinates();measurements.bearing=CoordinatesUtils.calculateAzimuth(coo[0],coo[1],featureCrs);feature.set("label",MeasureUtils.getFormattedBearingValue(measurements.bearing))}feature.set("measurements",measurements)},computeSegmentLengths:function computeSegmentLengths(coordinates,featureCrs,geodesic){var lengths=[];var units=CoordinatesUtils.getUnits(featureCrs);if(geodesic||units==="degrees"){var wgsCoo=coordinates.map(function(coo){return CoordinatesUtils.reproject(coo,featureCrs,"EPSG:4326")});for(var i=0;i<wgsCoo.length-1;++i){lengths.push(ol.sphere.getDistance(wgsCoo[i],wgsCoo[i+1]))}}else{var conv=units==="feet"?0.3048:1;for(var _i=0;_i<coordinates.length-1;++_i){var dx=coordinates[_i+1][0]-coordinates[_i][0];var dy=coordinates[_i+1][1]-coordinates[_i][1];lengths.push(Math.sqrt(dx*dx+dy*dy)*conv)}}return lengths},computeArea:function computeArea(geometry,featureCrs,geodesic){var units=CoordinatesUtils.getUnits(featureCrs);if(geodesic||units==="degrees"){return ol.sphere.getArea(geometry,{projection:featureCrs})}else{var conv=units==="feet"?0.3048:1;return geometry.getArea()*conv*conv}}};export default MeasureUtils;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}/**
|
|
2
|
+
* Copyright 2018-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import ConfigUtils from"./ConfigUtils";var MiscUtils={addLinkAnchors:function addLinkAnchors(text){// If text already contains tags, do nothing
|
|
8
|
+
var tagRegEx=/(<.[^(><.)]+>)/;if(tagRegEx.exec(text)){return text}var urlRegEx=new RegExp(ConfigUtils.getConfigProp("urlRegEx",null,// Original String: (\s|^)((http(s)?|(s)?ftp):\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=\u00C0-\u00FF\u0370-\u03FF]*)
|
|
9
|
+
// Escaped with https://www.freeformatter.com/json-escape.html
|
|
10
|
+
// eslint-disable-next-line
|
|
11
|
+
"(\\s|^)((http(s)?|(s)?ftp):\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=\\u00C0-\\u00FF\\u0370-\\u03FF]*)"),"g");var value=text;var match=null;while(match=urlRegEx.exec(value)){// If URL is part of a HTML attribute, don't add anchor
|
|
12
|
+
if(value.substring(match.index-2,match.index).match(/^=['"]$/)===null){var url=match[0].substr(match[1].length);var protoUrl=url;if(match[2]===undefined){if(match[0].indexOf("@")!==-1){protoUrl="mailto:"+url}else{protoUrl="http://"+url}}var pos=match.index+match[1].length;var anchor="<a href=\""+MiscUtils.htmlEncode(protoUrl)+"\" target=\"_blank\">"+MiscUtils.htmlEncode(url)+"</a>";value=value.substring(0,pos)+anchor+value.substring(pos+url.length);urlRegEx.lastIndex=pos+anchor.length}}// Reset
|
|
13
|
+
urlRegEx.lastIndex=0;return value},htmlEncode:function htmlEncode(text){return text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},getCsrfToken:function getCsrfToken(){var csrfTag=Array.from(document.getElementsByTagName("meta")).find(function(tag){return tag.getAttribute("name")==="csrf-token"});return csrfTag?csrfTag.getAttribute("content"):""},setupKillTouchEvents:function setupKillTouchEvents(el){if(el){// To stop touchmove propagating to parent which can trigger a swipe
|
|
14
|
+
el.addEventListener("touchmove",function(ev){ev.stopPropagation()},{passive:false})}},killEvent:function killEvent(ev){if(ev.cancelable){ev.stopPropagation();ev.preventDefault()}},blendColors:function blendColors(color1,color2,ratio){color1=[parseInt(color1[1]+color1[2],16),parseInt(color1[3]+color1[4],16),parseInt(color1[5]+color1[6],16)];color2=[parseInt(color2[1]+color2[2],16),parseInt(color2[3]+color2[4],16),parseInt(color2[5]+color2[6],16)];var color3=[(1-ratio)*color1[0]+ratio*color2[0],(1-ratio)*color1[1]+ratio*color2[1],(1-ratio)*color1[2]+ratio*color2[2]];var toHex=function toHex(num){return("0"+Math.round(num).toString(16)).slice(-2)};return"#"+toHex(color3[0])+toHex(color3[1])+toHex(color3[2])},ensureArray:function ensureArray(el){if(el===undefined){return[]}else if(Array.isArray(el)){return el}return[el]},capitalizeFirst:function capitalizeFirst(text){return text.slice(0,1).toUpperCase()+text.slice(1)},isBrightColor:function isBrightColor(hex){var color=+("0x"+hex.slice(1).replace(hex.length<5&&/./g,"$&$&"));var r=color>>16;var g=color>>8&255;var b=color&255;var hsp=Math.sqrt(0.299*(r*r)+0.587*(g*g)+0.114*(b*b));return hsp>127.5},adjustProtocol:function adjustProtocol(url){if(location.protocol==="https:"&&url.startsWith("http:")){return"https:"+url.substr(5)}return url},convertEmToPx:function convertEmToPx(emsize){var defaultfontsize=getComputedStyle(document.documentElement).fontSize;return emsize*parseFloat(defaultfontsize)},getFaviconFromIcon:function getFaviconFromIcon(icon,size){var glyph=null;var _iterator=_createForOfIteratorHelper(document.styleSheets),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var sheet=_step.value;var _iterator2=_createForOfIteratorHelper(sheet.cssRules),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var rule=_step2.value;if(rule.selectorText===".icon-".concat(icon,"::before")){glyph=rule.style.content.replace(/["']/g,"");break}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(glyph===null){return null}var canvas=document.createElement("canvas");canvas.width=size;canvas.height=size;var ctx=canvas.getContext("2d");ctx.font="".concat(size-5,"px qwc2-icons");ctx.textAlign="center";ctx.textBaseline="middle";ctx.fillStyle="#FFF";// You can change this color if needed
|
|
15
|
+
ctx.fillText(glyph,size/2,size/2);return canvas.toDataURL("image/png")},resolveAssetsPath:function resolveAssetsPath(path){return path&&path.startsWith(":/")?ConfigUtils.getAssetsPath()+path.substr(1):path}};export default MiscUtils;
|