qwc2 2025.10.9 → 2025.10.14
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/actions/display.js +30 -1
- package/actions/editing.js +22 -1
- package/actions/layerinfo.js +13 -1
- package/actions/layers.js +213 -3
- package/actions/localConfig.js +58 -1
- package/actions/locale.js +21 -1
- package/actions/locate.js +26 -1
- package/actions/logging.js +10 -1
- package/actions/map.js +105 -2
- package/actions/measurement.js +12 -1
- package/actions/processNotifications.js +37 -1
- package/actions/redlining.js +18 -1
- package/actions/redliningPick.js +12 -1
- package/actions/search.js +12 -1
- package/actions/serviceinfo.js +12 -1
- package/actions/task.js +55 -3
- package/actions/theme.js +339 -19
- package/actions/windows.js +164 -5
- package/components/AppMenu.js +435 -3
- package/components/AttributeForm.js +928 -32
- package/components/AttributeTableWidget.js +1105 -13
- package/components/AutoEditForm.js +189 -3
- package/components/CoordinateDisplayer.js +78 -2
- package/components/EditComboField.js +190 -6
- package/components/EditUploadField.js +315 -3
- package/components/ExportSelection.js +203 -2
- package/components/FullscreenSwitcher.js +90 -3
- package/components/Icon.js +81 -2
- package/components/IdentifyViewer.js +1161 -6
- package/components/ImportLayer.js +718 -20
- package/components/LayerInfoWindow.js +145 -2
- package/components/LinkFeatureForm.js +246 -5
- package/components/MapButton.js +88 -2
- package/components/MapSelection.js +287 -8
- package/components/MessageBar.js +68 -2
- package/components/NumericInputWindow.js +359 -2
- package/components/PickFeature.js +266 -2
- package/components/PluginsContainer.js +227 -8
- package/components/PrintSelection.js +620 -49
- package/components/ProcessNotifications.js +104 -2
- package/components/QtDesignerForm.js +1137 -18
- package/components/ResizeableWindow.js +591 -8
- package/components/SearchBox.js +1307 -20
- package/components/ServiceInfoWindow.js +107 -2
- package/components/SideBar.js +204 -4
- package/components/StandardApp.js +381 -20
- package/components/Swipeable.js +15 -1
- package/components/TaskBar.js +85 -2
- package/components/ThemeLayersListWindow.js +216 -4
- package/components/ThemeList.js +381 -7
- package/components/Toolbar.js +106 -2
- package/components/WindowManager.js +178 -2
- package/components/map/OlLayer.js +257 -6
- package/components/map/OlMap.js +405 -5
- package/components/map/layers/BingLayer.js +31 -2
- package/components/map/layers/GoogleLayer.js +222 -19
- package/components/map/layers/GraticuleLayer.js +21 -1
- package/components/map/layers/ImageLayer.js +15 -1
- package/components/map/layers/MVTLayer.js +52 -2
- package/components/map/layers/OSMLayer.js +24 -2
- package/components/map/layers/OverlayLayer.js +55 -3
- package/components/map/layers/VectorLayer.js +173 -8
- package/components/map/layers/WFSLayer.js +220 -6
- package/components/map/layers/WMSLayer.js +180 -6
- package/components/map/layers/WMTSLayer.js +67 -3
- package/components/map/layers/XYZLayer.js +24 -2
- package/components/map/layers/index.js +28 -1
- package/components/map3d/EditDataset3D.js +190 -3
- package/components/map3d/HeightProfile3D.js +402 -3
- package/components/map3d/ImportObjects3D.js +162 -2
- package/components/map3d/Map3D.js +1304 -38
- package/components/map3d/MapControls3D.js +392 -7
- package/components/map3d/SearchField3D.js +183 -11
- package/components/map3d/View3DSwitcher.js +98 -2
- package/components/map3d/drawtool/CreateTool3D.js +174 -4
- package/components/map3d/drawtool/EditTool3D.js +590 -6
- package/components/map3d/drawtool/NumericInput3D.js +336 -4
- package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
- package/components/map3d/layers/VectorLayer3D.js +53 -2
- package/components/map3d/layers/WFSLayer3D.js +109 -3
- package/components/map3d/layers/WMSLayer3D.js +70 -2
- package/components/map3d/layers/WMTSLayer3D.js +27 -3
- package/components/map3d/layers/index.js +14 -1
- package/components/map3d/utils/FirstPersonControls3D.js +423 -16
- package/components/map3d/utils/MiscUtils3D.js +221 -13
- package/components/map3d/utils/OrbitControls3D.js +176 -5
- package/components/map3d/utils/Tiles3DStyle.js +238 -9
- package/components/share/ShareLink.js +54 -2
- package/components/share/ShareQRCode.js +62 -2
- package/components/share/ShareSocials.js +125 -3
- package/components/timeline/FixedTimeline.js +236 -5
- package/components/timeline/InfiniteTimeline.js +347 -8
- package/components/timeline/TimelineFeaturesSlider.js +439 -5
- package/components/widgets/AccordeonWidget.js +96 -2
- package/components/widgets/ButtonBar.js +124 -2
- package/components/widgets/ColorButton.js +201 -3
- package/components/widgets/ComboBox.js +166 -2
- package/components/widgets/CopyButton.js +110 -2
- package/components/widgets/DateTimeInput.js +100 -3
- package/components/widgets/EditableSelect.js +230 -3
- package/components/widgets/FileSelector.js +128 -4
- package/components/widgets/Input.js +124 -2
- package/components/widgets/InputContainer.js +96 -2
- package/components/widgets/LayerCatalogWidget.js +219 -3
- package/components/widgets/MenuButton.js +157 -1
- package/components/widgets/ModalDialog.js +64 -2
- package/components/widgets/NavBar.js +119 -2
- package/components/widgets/NumberInput.js +226 -4
- package/components/widgets/PopupMenu.js +72 -1
- package/components/widgets/Primitives.js +6 -1
- package/components/widgets/ReCaptchaWidget.js +55 -1
- package/components/widgets/SearchWidget.js +255 -2
- package/components/widgets/Spinner.js +44 -2
- package/components/widgets/SuggestionInput.js +77 -2
- package/components/widgets/TextInput.js +308 -2
- package/components/widgets/ToggleSwitch.js +85 -2
- package/components/widgets/VectorLayerPicker.js +85 -3
- package/libs/openlayers.js +225 -5
- package/package.json +1 -1
- package/plugins/API.js +358 -15
- package/plugins/AttributeTable.js +109 -3
- package/plugins/Authentication.js +130 -5
- package/plugins/BackgroundSwitcher.js +218 -4
- package/plugins/Bookmark.js +289 -3
- package/plugins/BottomBar.js +298 -4
- package/plugins/CookiePopup.js +67 -3
- package/plugins/Cyclomedia.js +442 -5
- package/plugins/Editing.js +497 -9
- package/plugins/FeatureForm.js +366 -4
- package/plugins/FeatureSearch.js +458 -3
- package/plugins/GeometryDigitizer.js +664 -7
- package/plugins/HeightProfile.js +763 -15
- package/plugins/Help.js +102 -3
- package/plugins/HomeButton.js +80 -3
- package/plugins/Identify.js +543 -5
- package/plugins/LayerCatalog.js +215 -4
- package/plugins/LayerTree.js +1194 -6
- package/plugins/LocateButton.js +94 -3
- package/plugins/Map.js +320 -16
- package/plugins/MapCompare.js +94 -3
- package/plugins/MapCopyright.js +127 -5
- package/plugins/MapExport.js +613 -20
- package/plugins/MapFilter.js +868 -12
- package/plugins/MapInfoTooltip.js +277 -3
- package/plugins/MapLegend.js +253 -4
- package/plugins/MapTip.js +290 -4
- package/plugins/Measure.js +220 -4
- package/plugins/NewsPopup.js +137 -3
- package/plugins/OverviewMap.js +167 -7
- package/plugins/Panoramax.js +340 -2
- package/plugins/Portal.js +199 -4
- package/plugins/Print.js +1231 -15
- package/plugins/Redlining.js +750 -6
- package/plugins/Reports.js +332 -3
- package/plugins/Routing.js +1278 -15
- package/plugins/ScratchDrawing.js +173 -5
- package/plugins/Settings.js +241 -4
- package/plugins/Share.js +198 -3
- package/plugins/StartupMarker.js +84 -4
- package/plugins/TaskButton.js +88 -3
- package/plugins/ThemeSwitcher.js +164 -4
- package/plugins/TimeManager.js +971 -10
- package/plugins/TopBar.js +300 -7
- package/plugins/TourGuide.js +213 -2
- package/plugins/ValueTool.js +419 -4
- package/plugins/View3D.js +519 -14
- package/plugins/ZoomButtons.js +165 -3
- package/plugins/map/EditingSupport.js +199 -7
- package/plugins/map/LocateSupport.js +260 -4
- package/plugins/map/MeasurementSupport.js +216 -8
- package/plugins/map/RedliningPickSupport.js +201 -7
- package/plugins/map/RedliningSupport.js +726 -17
- package/plugins/map/SnapInteraction.js +101 -1
- package/plugins/map/SnapSupport.js +210 -2
- package/plugins/map/SnappingSupport.js +356 -17
- package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
- package/plugins/map3d/BottomBar3D.js +118 -3
- package/plugins/map3d/Compare3D.js +422 -8
- package/plugins/map3d/Draw3D.js +353 -6
- package/plugins/map3d/ExportObjects3D.js +393 -18
- package/plugins/map3d/HideObjects3D.js +313 -12
- package/plugins/map3d/Identify3D.js +283 -12
- package/plugins/map3d/LayerTree3D.js +323 -3
- package/plugins/map3d/MapCopyright3D.js +128 -5
- package/plugins/map3d/MapExport3D.js +590 -10
- package/plugins/map3d/MapLight3D.js +553 -6
- package/plugins/map3d/Measure3D.js +571 -20
- package/plugins/map3d/OverviewMap3D.js +169 -3
- package/plugins/map3d/Settings3D.js +73 -3
- package/plugins/map3d/TopBar3D.js +207 -9
- package/plugins/redlining/RedliningBufferSupport.js +206 -3
- package/reducers/display.js +34 -2
- package/reducers/editing.js +68 -3
- package/reducers/index.js +9 -1
- package/reducers/layerinfo.js +26 -2
- package/reducers/layers.js +456 -9
- package/reducers/localConfig.js +122 -2
- package/reducers/locale.js +38 -2
- package/reducers/locate.js +40 -2
- package/reducers/map.js +176 -5
- package/reducers/measurement.js +42 -2
- package/reducers/processNotifications.js +49 -2
- package/reducers/redlining.js +50 -2
- package/reducers/redliningPick.js +27 -2
- package/reducers/search.js +20 -1
- package/reducers/serviceinfo.js +25 -2
- package/reducers/task.js +45 -2
- package/reducers/theme.js +51 -2
- package/reducers/windows.js +203 -2
- package/scripts/dist.sh +1 -1
- package/scripts/gen-plugin-docs.js +152 -2
- package/scripts/makeIconkit.js +85 -6
- package/scripts/themesConfig.js +742 -40
- package/scripts/updateTranslations.js +251 -10
- package/selectors/searchproviders.js +44 -2
- package/stores/StandardStore.js +42 -2
- package/utils/ConfigUtils.js +84 -3
- package/utils/CoordinatesUtils.js +234 -23
- package/utils/DxfUtils.js +237 -11
- package/utils/EditingInterface.js +421 -87
- package/utils/EditingUtils.js +357 -13
- package/utils/ElevationInterface.js +83 -22
- package/utils/FeatureStyles.js +429 -5
- package/utils/IdentifyUtils.js +443 -7
- package/utils/ImageEditor.js +79 -9
- package/utils/LayerUtils.js +1516 -50
- package/utils/LocaleUtils.js +117 -7
- package/utils/MapUtils.js +241 -59
- package/utils/MeasureUtils.js +323 -2
- package/utils/MiscUtils.js +189 -11
- package/utils/PermaLinkUtils.js +429 -6
- package/utils/PluginStore.js +27 -1
- package/utils/ResourceRegistry.js +15 -1
- package/utils/RoutingInterface.js +307 -7
- package/utils/SearchProviders.js +722 -19
- package/utils/ServiceLayerUtils.js +669 -14
- package/utils/Signal.js +32 -2
- package/utils/ThemeUtils.js +341 -7
- package/utils/VectorLayerUtils.js +589 -15
- package/utils/expr_grammar/grammar.js +2239 -2
- package/utils/expr_grammar/test.js +65 -3
|
@@ -1,23 +1,362 @@
|
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){
|
|
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); }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
5
|
+
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."); }
|
|
6
|
+
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; } }
|
|
7
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
8
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
9
|
+
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; }
|
|
10
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
11
|
+
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); } }
|
|
12
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
13
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
14
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
15
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
16
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
17
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
18
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
19
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
20
|
+
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; }
|
|
21
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
22
|
+
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); }
|
|
23
|
+
/**
|
|
2
24
|
* Copyright 2017-2024 Sourcepole AG
|
|
3
25
|
* All rights reserved.
|
|
4
26
|
*
|
|
5
27
|
* This source code is licensed under the BSD-style license found in the
|
|
6
28
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import React from 'react';
|
|
32
|
+
import { connect } from 'react-redux';
|
|
33
|
+
import isEmpty from 'lodash.isempty';
|
|
34
|
+
import ol from 'openlayers';
|
|
35
|
+
import PropTypes from 'prop-types';
|
|
36
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
37
|
+
import { LayerRole } from '../../actions/layers';
|
|
38
|
+
import { setSnappingConfig } from '../../actions/map';
|
|
39
|
+
import Icon from '../../components/Icon';
|
|
40
|
+
import Spinner from '../../components/widgets/Spinner';
|
|
41
|
+
import IdentifyUtils from '../../utils/IdentifyUtils';
|
|
42
|
+
import LocaleUtils from '../../utils/LocaleUtils';
|
|
43
|
+
import MapUtils from '../../utils/MapUtils';
|
|
44
|
+
import VectorLayerUtils from '../../utils/VectorLayerUtils';
|
|
45
|
+
import SnapInteraction from './SnapInteraction';
|
|
46
|
+
import './style/SnappingSupport.css';
|
|
47
|
+
|
|
48
|
+
/**
|
|
8
49
|
* Snapping support for the map component.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
50
|
+
*/
|
|
51
|
+
var SnappingSupport = /*#__PURE__*/function (_React$Component) {
|
|
52
|
+
function SnappingSupport(props) {
|
|
53
|
+
var _this;
|
|
54
|
+
_classCallCheck(this, SnappingSupport);
|
|
55
|
+
_this = _callSuper(this, SnappingSupport, [props]);
|
|
56
|
+
_defineProperty(_this, "state", {
|
|
57
|
+
reqId: null,
|
|
58
|
+
// FeatureInfo request ID
|
|
59
|
+
invalid: true,
|
|
60
|
+
// Whether the feature cache needs to be rebuilt
|
|
61
|
+
havesnaplayers: false,
|
|
62
|
+
// Whether there are any snaplayers
|
|
63
|
+
drawing: false // Whether a drawing interaction is active,
|
|
64
|
+
});
|
|
65
|
+
_defineProperty(_this, "snapToEdge", function (snappingConfig) {
|
|
66
|
+
return snappingConfig.active === true || snappingConfig.active === 'edge';
|
|
67
|
+
});
|
|
68
|
+
_defineProperty(_this, "snapToVertex", function (snappingConfig) {
|
|
69
|
+
return snappingConfig.active === true || snappingConfig.active === 'vertex';
|
|
70
|
+
});
|
|
71
|
+
_defineProperty(_this, "toggleSnap", function (mode) {
|
|
72
|
+
var active = _this.props.mapObj.snapping.active;
|
|
73
|
+
if (mode === 'edge') {
|
|
74
|
+
if (active === true) {
|
|
75
|
+
active = 'vertex';
|
|
76
|
+
} else if (active === 'edge') {
|
|
77
|
+
active = false;
|
|
78
|
+
} else if (active === 'vertex') {
|
|
79
|
+
active = true;
|
|
80
|
+
} else {
|
|
81
|
+
active = 'edge';
|
|
82
|
+
}
|
|
83
|
+
} else if (mode === 'vertex') {
|
|
84
|
+
if (active === true) {
|
|
85
|
+
active = 'edge';
|
|
86
|
+
} else if (active === 'vertex') {
|
|
87
|
+
active = false;
|
|
88
|
+
} else if (active === 'edge') {
|
|
89
|
+
active = true;
|
|
90
|
+
} else {
|
|
91
|
+
active = 'vertex';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
_this.props.setSnappingConfig(true, active);
|
|
95
|
+
});
|
|
96
|
+
_defineProperty(_this, "handleInteractionAdded", function (ev) {
|
|
97
|
+
if (_this.inEventHandler) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
_this.inEventHandler = true;
|
|
101
|
+
_this.addSnapInteractionIfNeeded(ev.target);
|
|
102
|
+
_this.inEventHandler = false;
|
|
103
|
+
});
|
|
104
|
+
_defineProperty(_this, "handleInteractionRemoved", function (ev) {
|
|
105
|
+
if (_this.inEventHandler) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
_this.inEventHandler = true;
|
|
109
|
+
// If the removed interaction is the snap interaction, which should always be
|
|
110
|
+
// the last interaction, remove the interaction preceding the snap interaction
|
|
111
|
+
if (ev.element === _this.snapInteraction) {
|
|
112
|
+
ev.target.pop();
|
|
113
|
+
}
|
|
114
|
+
_this.addSnapInteractionIfNeeded(ev.target);
|
|
115
|
+
_this.inEventHandler = false;
|
|
116
|
+
});
|
|
117
|
+
_defineProperty(_this, "addSnapInteractionIfNeeded", function (interactions) {
|
|
118
|
+
// Just to be sure
|
|
119
|
+
interactions.remove(_this.snapInteraction);
|
|
120
|
+
// If there is any draw or modify interaction, add snapping interaction
|
|
121
|
+
var added = false;
|
|
122
|
+
if (_this.props.mapObj.snapping.enabled) {
|
|
123
|
+
for (var i = 0; i < interactions.getLength(); ++i) {
|
|
124
|
+
var interaction = interactions.item(i);
|
|
125
|
+
if (interaction instanceof ol.interaction.Draw || interaction instanceof ol.interaction.Modify || interaction instanceof ol.interaction.Select) {
|
|
126
|
+
interactions.push(_this.snapInteraction);
|
|
127
|
+
added = true;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
_this.setState({
|
|
133
|
+
drawing: added
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
_defineProperty(_this, "refreshFeatureCache", function (force) {
|
|
137
|
+
if (!_this.state.invalid && !force || !_this.state.drawing) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
_this.source.clear();
|
|
141
|
+
var themeLayer = _this.props.layers.find(function (layer) {
|
|
142
|
+
return layer.role === LayerRole.THEME;
|
|
143
|
+
});
|
|
144
|
+
if (!_this.props.theme || !themeLayer || !_this.state.drawing) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
var snappingConfig = _this.props.theme.snapping || {};
|
|
148
|
+
// Gather snapping layers based on visibility scale ranges
|
|
149
|
+
var scale = MapUtils.computeForZoom(_this.props.mapObj.scales, _this.props.mapObj.zoom);
|
|
150
|
+
var snapLayers = (snappingConfig.snaplayers || []).reduce(function (res, cur) {
|
|
151
|
+
if (cur.min !== undefined && cur.min !== null && scale < cur.min) {
|
|
152
|
+
// Below scale range
|
|
153
|
+
return res;
|
|
154
|
+
}
|
|
155
|
+
if (cur.max !== undefined && cur.max !== null && scale >= cur.max) {
|
|
156
|
+
// Above scale range
|
|
157
|
+
return res;
|
|
158
|
+
}
|
|
159
|
+
return [].concat(_toConsumableArray(res), [cur.name]);
|
|
160
|
+
}, []);
|
|
161
|
+
// Gather local snap layers
|
|
162
|
+
var snapToWfs = scale < snappingConfig.wfsMaxScale;
|
|
163
|
+
var localLayers = [];
|
|
164
|
+
_this.props.layers.forEach(function (layer) {
|
|
165
|
+
if (layer.role === LayerRole.USERLAYER && (layer.type === 'vector' || layer.type === "wfs" && snapToWfs)) {
|
|
166
|
+
var olLayer = _this.props.map.getLayers().getArray().find(function (l) {
|
|
167
|
+
return l.get('id') === layer.id;
|
|
168
|
+
});
|
|
169
|
+
if (olLayer && olLayer.getSource() && olLayer.getSource().getFeaturesInExtent) {
|
|
170
|
+
localLayers.push(olLayer);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
_this.setState({
|
|
175
|
+
reqId: null,
|
|
176
|
+
havesnaplayers: !isEmpty(snapLayers) || !isEmpty(localLayers)
|
|
177
|
+
});
|
|
178
|
+
if (!_this.snapInteraction.getMap() || !_this.snapInteraction.getActive()) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (snapLayers.length === 0) {
|
|
182
|
+
_this.addLocalSnapFeatures(localLayers);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
var xmin = _this.props.mapObj.bbox.bounds[0];
|
|
186
|
+
var ymin = _this.props.mapObj.bbox.bounds[1];
|
|
187
|
+
var xmax = _this.props.mapObj.bbox.bounds[2];
|
|
188
|
+
var ymax = _this.props.mapObj.bbox.bounds[3];
|
|
189
|
+
var filterGeom = VectorLayerUtils.geoJSONGeomToWkt({
|
|
190
|
+
type: 'Polygon',
|
|
191
|
+
coordinates: [[[xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax], [xmin, ymin]]]
|
|
192
|
+
});
|
|
193
|
+
var options = {
|
|
194
|
+
LAYERATTRIBS: JSON.stringify(snapLayers.reduce(function (res, key) {
|
|
195
|
+
return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, []));
|
|
196
|
+
}, {})),
|
|
197
|
+
with_htmlcontent: false,
|
|
198
|
+
with_bbox: false,
|
|
199
|
+
feature_count: snappingConfig.featureCount || 500
|
|
200
|
+
};
|
|
201
|
+
var request = IdentifyUtils.buildFilterRequest(themeLayer, snapLayers.join(","), filterGeom, _this.props.mapObj, options);
|
|
202
|
+
var reqId = uuidv4();
|
|
203
|
+
_this.setState({
|
|
204
|
+
reqId: reqId
|
|
205
|
+
});
|
|
206
|
+
IdentifyUtils.sendRequest(request, function (response) {
|
|
207
|
+
if (_this.state.reqId !== reqId) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (response) {
|
|
211
|
+
var result = IdentifyUtils.parseXmlResponse(response, _this.props.mapObj.projection, themeLayer);
|
|
212
|
+
var features = Object.values(result).reduce(function (res, cur) {
|
|
213
|
+
return [].concat(_toConsumableArray(res), _toConsumableArray(cur));
|
|
214
|
+
}, []);
|
|
215
|
+
var format = new ol.format.GeoJSON();
|
|
216
|
+
var olFeatures = format.readFeatures({
|
|
217
|
+
type: "FeatureCollection",
|
|
218
|
+
features: features.map(function (feature) {
|
|
219
|
+
return _objectSpread(_objectSpread({}, feature), {}, {
|
|
220
|
+
id: uuidv4()
|
|
221
|
+
});
|
|
222
|
+
})
|
|
223
|
+
});
|
|
224
|
+
_this.source.addFeatures(olFeatures);
|
|
225
|
+
// Add features from local layers
|
|
226
|
+
_this.addLocalSnapFeatures(localLayers);
|
|
227
|
+
_this.setState({
|
|
228
|
+
invalid: false,
|
|
229
|
+
reqId: null,
|
|
230
|
+
havesnaplayers: true
|
|
231
|
+
});
|
|
232
|
+
} else {
|
|
233
|
+
_this.setState({
|
|
234
|
+
reqId: null
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
_defineProperty(_this, "addLocalSnapFeatures", function (localLayers) {
|
|
240
|
+
var extent = _this.props.mapObj.bbox.bounds;
|
|
241
|
+
var projection = ol.proj.get(_this.props.mapObj.projection);
|
|
242
|
+
localLayers.forEach(function (olLayer) {
|
|
243
|
+
var olFeatures = olLayer.getSource().getFeaturesInExtent(extent, projection);
|
|
244
|
+
_this.source.addFeatures(olFeatures);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
_this.source = new ol.source.Vector();
|
|
248
|
+
_this.snapInteraction = new SnapInteraction({
|
|
249
|
+
source: _this.source,
|
|
250
|
+
edge: _this.snapToEdge(props.mapObj.snapping),
|
|
251
|
+
vertex: _this.snapToVertex(props.mapObj.snapping)
|
|
252
|
+
});
|
|
253
|
+
_this.snapInteraction.setActive(_this.props.mapObj.snapping.active);
|
|
254
|
+
_this.inEventHandler = false;
|
|
255
|
+
props.map.getInteractions().on('add', _this.handleInteractionAdded);
|
|
256
|
+
props.map.getInteractions().on('remove', _this.handleInteractionRemoved);
|
|
257
|
+
MapUtils.registerHook(MapUtils.GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK, function (pixel) {
|
|
258
|
+
var coo = props.map.getCoordinateFromPixel(pixel);
|
|
259
|
+
var snapResult = _this.snapInteraction.snapTo(pixel, coo, props.map);
|
|
260
|
+
return snapResult ? props.map.getCoordinateFromPixel(snapResult.vertexPixel) : coo;
|
|
261
|
+
});
|
|
262
|
+
return _this;
|
|
263
|
+
}
|
|
264
|
+
_inherits(SnappingSupport, _React$Component);
|
|
265
|
+
return _createClass(SnappingSupport, [{
|
|
266
|
+
key: "componentDidUpdate",
|
|
267
|
+
value: function componentDidUpdate(prevProps, prevState) {
|
|
268
|
+
var _this2 = this;
|
|
269
|
+
if (this.state.drawing && (this.props.mapObj.bbox !== prevProps.mapObj.bbox || this.props.theme !== prevProps.theme)) {
|
|
270
|
+
this.setState({
|
|
271
|
+
invalid: true
|
|
272
|
+
});
|
|
273
|
+
this.refreshFeatureCache(true);
|
|
274
|
+
} else if (this.state.drawing && this.props.layers !== prevProps.layers) {
|
|
275
|
+
var layersChanged = this.props.layers.find(function (layer) {
|
|
276
|
+
if (layer.role === LayerRole.THEME) {
|
|
277
|
+
var prev = prevProps.layers.find(function (prevLayer) {
|
|
278
|
+
return layer.id === prevLayer.id;
|
|
279
|
+
});
|
|
280
|
+
return !prev || layer.rev !== prev.rev;
|
|
281
|
+
} else if (layer.role === LayerRole.USERLAYER && layer.type === 'vector') {
|
|
282
|
+
var _prev = prevProps.layers.find(function (prevLayer) {
|
|
283
|
+
return layer.id === prevLayer.id;
|
|
284
|
+
});
|
|
285
|
+
return !_prev || _prev.features !== layer.features;
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
});
|
|
289
|
+
if (layersChanged) {
|
|
290
|
+
this.setState({
|
|
291
|
+
invalid: true
|
|
292
|
+
});
|
|
293
|
+
// Delay to avoid refreshing the cache before QGIS Server can pick up the new feature
|
|
294
|
+
setTimeout(function () {
|
|
295
|
+
_this2.refreshFeatureCache(true);
|
|
296
|
+
}, 1500);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (this.props.mapObj.snapping.active !== prevProps.mapObj.snapping.active || this.state.drawing !== prevState.drawing) {
|
|
300
|
+
this.snapInteraction.setActive(this.props.mapObj.snapping.active !== false);
|
|
301
|
+
this.snapInteraction.setSnapEdge(this.snapToEdge(this.props.mapObj.snapping));
|
|
302
|
+
this.snapInteraction.setSnapVertex(this.snapToVertex(this.props.mapObj.snapping));
|
|
303
|
+
if (this.props.mapObj.snapping.active) {
|
|
304
|
+
this.refreshFeatureCache();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}, {
|
|
309
|
+
key: "render",
|
|
310
|
+
value: function render() {
|
|
311
|
+
var _this3 = this;
|
|
312
|
+
if (!this.state.drawing || !this.props.mapObj.snapping.enabled) {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
var disabled = !this.state.havesnaplayers || this.props.mapObj.snapping.active === false;
|
|
316
|
+
var toolbarClass = disabled ? "snapping-toolbar-inactive" : "";
|
|
317
|
+
var snapEdge = this.snapToEdge(this.props.mapObj.snapping);
|
|
318
|
+
var snapVertex = this.snapToVertex(this.props.mapObj.snapping);
|
|
319
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
320
|
+
className: "snapping-toolbar-container"
|
|
321
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
322
|
+
className: toolbarClass
|
|
323
|
+
}, this.state.reqId !== null ? /*#__PURE__*/React.createElement(Spinner, null) : /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("button", {
|
|
324
|
+
className: "button" + (snapVertex ? " pressed" : ""),
|
|
325
|
+
onClick: function onClick() {
|
|
326
|
+
return _this3.toggleSnap('vertex');
|
|
327
|
+
},
|
|
328
|
+
title: LocaleUtils.tr("snapping.vertex")
|
|
329
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
330
|
+
icon: "snap_vertex",
|
|
331
|
+
size: "large"
|
|
332
|
+
})), /*#__PURE__*/React.createElement("button", {
|
|
333
|
+
className: "button" + (snapEdge ? " pressed" : ""),
|
|
334
|
+
onClick: function onClick() {
|
|
335
|
+
return _this3.toggleSnap('edge');
|
|
336
|
+
},
|
|
337
|
+
title: LocaleUtils.tr("snapping.edge")
|
|
338
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
339
|
+
icon: "snap_edge",
|
|
340
|
+
size: "large"
|
|
341
|
+
}))), "\xA0", this.state.reqId ? LocaleUtils.tr("snapping.loading") : LocaleUtils.tr("snapping.snappingenabled")));
|
|
342
|
+
}
|
|
343
|
+
}]);
|
|
344
|
+
}(React.Component);
|
|
345
|
+
_defineProperty(SnappingSupport, "propTypes", {
|
|
346
|
+
layers: PropTypes.array,
|
|
347
|
+
map: PropTypes.object,
|
|
348
|
+
mapObj: PropTypes.object,
|
|
349
|
+
setSnappingConfig: PropTypes.func,
|
|
350
|
+
task: PropTypes.string,
|
|
351
|
+
theme: PropTypes.object
|
|
352
|
+
});
|
|
353
|
+
export default connect(function (state) {
|
|
354
|
+
return {
|
|
355
|
+
layers: state.layers.flat,
|
|
356
|
+
mapObj: state.map,
|
|
357
|
+
task: state.task.id,
|
|
358
|
+
theme: state.theme.current
|
|
359
|
+
};
|
|
360
|
+
}, {
|
|
361
|
+
setSnappingConfig: setSnappingConfig
|
|
362
|
+
})(SnappingSupport);
|
|
@@ -1,9 +1,50 @@
|
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){
|
|
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); }
|
|
2
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
3
|
+
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); } }
|
|
4
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
5
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
6
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
7
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
8
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
9
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
10
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
11
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
14
|
+
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); }
|
|
15
|
+
/**
|
|
2
16
|
* Copyright 2025 Sourcepole AG
|
|
3
17
|
* All rights reserved.
|
|
4
18
|
*
|
|
5
19
|
* This source code is licensed under the BSD-style license found in the
|
|
6
20
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import React from 'react';
|
|
24
|
+
import PropTypes from 'prop-types';
|
|
25
|
+
import { BackgroundSwitcher } from '../BackgroundSwitcher';
|
|
26
|
+
|
|
27
|
+
/**
|
|
8
28
|
* Map button for switching the background layer of the 3D map.
|
|
9
|
-
*/
|
|
29
|
+
*/
|
|
30
|
+
var BackgroundSwitcher3D = /*#__PURE__*/function (_React$Component) {
|
|
31
|
+
function BackgroundSwitcher3D() {
|
|
32
|
+
_classCallCheck(this, BackgroundSwitcher3D);
|
|
33
|
+
return _callSuper(this, BackgroundSwitcher3D, arguments);
|
|
34
|
+
}
|
|
35
|
+
_inherits(BackgroundSwitcher3D, _React$Component);
|
|
36
|
+
return _createClass(BackgroundSwitcher3D, [{
|
|
37
|
+
key: "render",
|
|
38
|
+
value: function render() {
|
|
39
|
+
return /*#__PURE__*/React.createElement(BackgroundSwitcher, {
|
|
40
|
+
changeLayerVisibility: this.props.sceneContext.setBaseLayer,
|
|
41
|
+
layers: this.props.sceneContext.baseLayers
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}]);
|
|
45
|
+
}(React.Component);
|
|
46
|
+
_defineProperty(BackgroundSwitcher3D, "availableIn3D", true);
|
|
47
|
+
_defineProperty(BackgroundSwitcher3D, "propTypes", {
|
|
48
|
+
sceneContext: PropTypes.object
|
|
49
|
+
});
|
|
50
|
+
export { BackgroundSwitcher3D as default };
|
|
@@ -1,9 +1,124 @@
|
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){
|
|
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); }
|
|
2
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
3
|
+
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); } }
|
|
4
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
5
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
6
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
7
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
8
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
9
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
10
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
11
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
14
|
+
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); }
|
|
15
|
+
/**
|
|
2
16
|
* Copyright 2024 Sourcepole AG
|
|
3
17
|
* All rights reserved.
|
|
4
18
|
*
|
|
5
19
|
* This source code is licensed under the BSD-style license found in the
|
|
6
20
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import React from 'react';
|
|
24
|
+
import { connect } from 'react-redux';
|
|
25
|
+
import PropTypes from 'prop-types';
|
|
26
|
+
import { setBottombarHeight } from '../../actions/windows';
|
|
27
|
+
import CoordinatesUtils from '../../utils/CoordinatesUtils';
|
|
28
|
+
import './style/BottomBar3D.css';
|
|
29
|
+
|
|
30
|
+
/**
|
|
8
31
|
* Bottom bar of the 3D map, displaying coordinates, projection, etc.
|
|
9
|
-
*/
|
|
32
|
+
*/
|
|
33
|
+
var BottomBar3D = /*#__PURE__*/function (_React$Component) {
|
|
34
|
+
function BottomBar3D() {
|
|
35
|
+
var _this;
|
|
36
|
+
_classCallCheck(this, BottomBar3D);
|
|
37
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
38
|
+
args[_key] = arguments[_key];
|
|
39
|
+
}
|
|
40
|
+
_this = _callSuper(this, BottomBar3D, [].concat(args));
|
|
41
|
+
_defineProperty(_this, "state", {
|
|
42
|
+
cursorPosition: null,
|
|
43
|
+
progress: 0
|
|
44
|
+
});
|
|
45
|
+
_defineProperty(_this, "scheduleGetCursorPosition", function (ev) {
|
|
46
|
+
var rect = ev.currentTarget.getBoundingClientRect();
|
|
47
|
+
var x = (ev.clientX - rect.left) / rect.width * 2 - 1;
|
|
48
|
+
var y = -(ev.clientY - rect.top) / rect.height * 2 + 1;
|
|
49
|
+
clearTimeout(_this.cursorPositionTimeout);
|
|
50
|
+
_this.cursorPositionTimeout = setTimeout(function () {
|
|
51
|
+
return _this.getCursorPosition(x, y);
|
|
52
|
+
}, 150);
|
|
53
|
+
});
|
|
54
|
+
_defineProperty(_this, "getCursorPosition", function (x, y) {
|
|
55
|
+
var intersection = _this.props.sceneContext.getSceneIntersection(x, y);
|
|
56
|
+
if (intersection) {
|
|
57
|
+
var p = intersection.point;
|
|
58
|
+
_this.setState({
|
|
59
|
+
cursorPosition: [p.x, p.y, p.z]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
_defineProperty(_this, "storeHeight", function (el) {
|
|
64
|
+
if (el) {
|
|
65
|
+
_this.props.setBottombarHeight(el.clientHeight);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return _this;
|
|
69
|
+
}
|
|
70
|
+
_inherits(BottomBar3D, _React$Component);
|
|
71
|
+
return _createClass(BottomBar3D, [{
|
|
72
|
+
key: "componentDidMount",
|
|
73
|
+
value: function componentDidMount() {
|
|
74
|
+
var _this2 = this;
|
|
75
|
+
this.props.sceneContext.scene.viewport.addEventListener('mousemove', this.scheduleGetCursorPosition);
|
|
76
|
+
this.props.sceneContext.scene.addEventListener("update-end", function () {
|
|
77
|
+
_this2.setState({
|
|
78
|
+
progress: Math.round(_this2.props.sceneContext.scene.progress * 100) + "%"
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
key: "componentWillUnmount",
|
|
84
|
+
value: function componentWillUnmount() {
|
|
85
|
+
clearTimeout(this.cursorPositionTimeout);
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
key: "render",
|
|
89
|
+
value: function render() {
|
|
90
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
91
|
+
className: "map3d-bottombar",
|
|
92
|
+
ref: this.storeHeight
|
|
93
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
94
|
+
className: "map3d-bottombar-progress"
|
|
95
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
96
|
+
className: "map3d-bottombar-progressbar",
|
|
97
|
+
style: {
|
|
98
|
+
width: this.state.progress
|
|
99
|
+
}
|
|
100
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
101
|
+
className: "map3d-bottombar-progress-label"
|
|
102
|
+
}, this.state.progress)), /*#__PURE__*/React.createElement("div", {
|
|
103
|
+
className: "map3d-bottombar-spacer"
|
|
104
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
105
|
+
className: "map3d-bottombar-position"
|
|
106
|
+
}, (this.state.cursorPosition || []).map(function (x) {
|
|
107
|
+
return x.toFixed(0);
|
|
108
|
+
}).join(" ")), /*#__PURE__*/React.createElement("div", {
|
|
109
|
+
className: "map3d-bottombar-projection"
|
|
110
|
+
}, this.props.sceneContext.mapCrs ? CoordinatesUtils.getAvailableCRS()[this.props.sceneContext.mapCrs].label : ""), /*#__PURE__*/React.createElement("div", {
|
|
111
|
+
className: "map3d-bottombar-spacer"
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
}]);
|
|
115
|
+
}(React.Component);
|
|
116
|
+
_defineProperty(BottomBar3D, "propTypes", {
|
|
117
|
+
sceneContext: PropTypes.object,
|
|
118
|
+
setBottombarHeight: PropTypes.func
|
|
119
|
+
});
|
|
120
|
+
export default connect(function () {
|
|
121
|
+
return {};
|
|
122
|
+
}, {
|
|
123
|
+
setBottombarHeight: setBottombarHeight
|
|
124
|
+
})(BottomBar3D);
|