@deck.gl-community/editable-layers 9.0.0-alpha.1 → 9.0.2
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 +19 -0
- package/README.md +2 -81
- package/dist/constants.js +4 -1
- package/dist/edit-modes/composite-mode.d.ts +1 -1
- package/dist/edit-modes/composite-mode.js +4 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.js +29 -24
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-by-diameter-mode.js +7 -4
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-from-center-mode.js +7 -4
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +3 -0
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +3 -0
- package/dist/edit-modes/draw-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/draw-line-string-mode.js +19 -16
- package/dist/edit-modes/draw-point-mode.d.ts +1 -1
- package/dist/edit-modes/draw-point-mode.js +7 -4
- package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-by-dragging-mode.js +10 -5
- package/dist/edit-modes/draw-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-mode.js +20 -16
- package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +8 -5
- package/dist/edit-modes/draw-square-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-square-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-mode.js +3 -0
- package/dist/edit-modes/duplicate-mode.d.ts +1 -1
- package/dist/edit-modes/duplicate-mode.js +3 -0
- package/dist/edit-modes/edit-mode.js +3 -1
- package/dist/edit-modes/elevation-mode.d.ts +2 -2
- package/dist/edit-modes/elevation-mode.js +8 -5
- package/dist/edit-modes/extend-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/extend-line-string-mode.js +9 -6
- package/dist/edit-modes/extrude-mode.d.ts +1 -1
- package/dist/edit-modes/extrude-mode.js +10 -7
- package/dist/edit-modes/geojson-edit-mode.d.ts +1 -1
- package/dist/edit-modes/geojson-edit-mode.js +18 -15
- package/dist/edit-modes/immutable-feature-collection.d.ts +2 -1
- package/dist/edit-modes/immutable-feature-collection.js +25 -20
- package/dist/edit-modes/measure-angle-mode.d.ts +1 -1
- package/dist/edit-modes/measure-angle-mode.js +8 -8
- package/dist/edit-modes/measure-area-mode.d.ts +1 -1
- package/dist/edit-modes/measure-area-mode.js +7 -5
- package/dist/edit-modes/measure-distance-mode.d.ts +1 -1
- package/dist/edit-modes/measure-distance-mode.js +17 -14
- package/dist/edit-modes/modify-mode.d.ts +1 -1
- package/dist/edit-modes/modify-mode.js +17 -14
- package/dist/edit-modes/resize-circle-mode.d.ts +2 -2
- package/dist/edit-modes/resize-circle-mode.js +3 -1
- package/dist/edit-modes/rotate-mode.d.ts +1 -1
- package/dist/edit-modes/rotate-mode.js +8 -5
- package/dist/edit-modes/scale-mode.d.ts +1 -1
- package/dist/edit-modes/scale-mode.js +8 -5
- package/dist/edit-modes/snappable-mode.d.ts +1 -1
- package/dist/edit-modes/snappable-mode.js +8 -5
- package/dist/edit-modes/split-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/split-polygon-mode.js +12 -9
- package/dist/edit-modes/three-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/three-click-polygon-mode.js +9 -6
- package/dist/edit-modes/transform-mode.d.ts +1 -1
- package/dist/edit-modes/transform-mode.js +4 -1
- package/dist/edit-modes/translate-mode.d.ts +1 -1
- package/dist/edit-modes/translate-mode.js +7 -4
- package/dist/edit-modes/two-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/two-click-polygon-mode.js +9 -6
- package/dist/edit-modes/types.d.ts +1 -1
- package/dist/edit-modes/types.js +3 -0
- package/dist/edit-modes/utils.d.ts +1 -1
- package/dist/edit-modes/utils.js +21 -19
- package/dist/edit-modes/view-mode.js +3 -0
- package/dist/editable-layers/editable-geojson-layer.d.ts +4 -4
- package/dist/editable-layers/editable-geojson-layer.js +27 -26
- package/dist/editable-layers/editable-h3-cluster-layer.d.ts +2 -2
- package/dist/editable-layers/editable-h3-cluster-layer.js +6 -3
- package/dist/editable-layers/editable-layer.d.ts +5 -5
- package/dist/editable-layers/editable-layer.js +18 -15
- package/dist/editable-layers/editable-path-layer.d.ts +1 -1
- package/dist/editable-layers/editable-path-layer.js +10 -7
- package/dist/editable-layers/elevated-edit-handle-layer.d.ts +1 -1
- package/dist/editable-layers/elevated-edit-handle-layer.js +6 -3
- package/dist/editable-layers/junction-scatterplot-layer.d.ts +2 -2
- package/dist/editable-layers/junction-scatterplot-layer.js +10 -7
- package/dist/editable-layers/selection-layer.d.ts +1 -1
- package/dist/editable-layers/selection-layer.js +5 -2
- package/dist/index.cjs +65 -537
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +19 -20
- package/dist/index.js +20 -18
- package/dist/lib/constants.js +3 -0
- package/dist/lib/deck-renderer/deck-cache.d.ts +1 -1
- package/dist/lib/deck-renderer/deck-cache.js +1 -1
- package/dist/lib/deck-renderer/deck-drawer.d.ts +2 -3
- package/dist/lib/deck-renderer/deck-drawer.js +12 -12
- package/dist/lib/feature.d.ts +4 -4
- package/dist/lib/feature.js +4 -1
- package/dist/lib/layer-mouse-event.d.ts +2 -2
- package/dist/lib/layer-mouse-event.js +4 -1
- package/dist/lib/layers/junctions-layer.d.ts +4 -4
- package/dist/lib/layers/junctions-layer.js +10 -7
- package/dist/lib/layers/segments-layer.d.ts +4 -4
- package/dist/lib/layers/segments-layer.js +11 -8
- package/dist/lib/layers/texts-layer.d.ts +3 -3
- package/dist/lib/layers/texts-layer.js +8 -5
- package/dist/lib/math.d.ts +1 -1
- package/dist/lib/math.js +3 -0
- package/dist/lib/{nebula.d.ts → nebula-core.d.ts} +2 -2
- package/dist/lib/{nebula.js → nebula-core.js} +7 -4
- package/dist/lib/nebula-layer.d.ts +2 -2
- package/dist/lib/nebula-layer.js +4 -1
- package/dist/lib/style.js +5 -2
- package/dist/mode-handlers/composite-mode-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.js +13 -10
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-circle-from-center-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +5 -2
- package/dist/mode-handlers/draw-line-string-handler.js +7 -4
- package/dist/mode-handlers/draw-point-handler.js +4 -1
- package/dist/mode-handlers/draw-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-polygon-handler.js +10 -7
- package/dist/mode-handlers/draw-rectangle-handler.js +3 -0
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +11 -8
- package/dist/mode-handlers/duplicate-handler.js +3 -0
- package/dist/mode-handlers/elevation-handler.d.ts +2 -2
- package/dist/mode-handlers/elevation-handler.js +8 -5
- package/dist/mode-handlers/extrude-handler.js +10 -7
- package/dist/mode-handlers/mode-handler.d.ts +1 -1
- package/dist/mode-handlers/mode-handler.js +17 -14
- package/dist/mode-handlers/modify-handler.d.ts +2 -2
- package/dist/mode-handlers/modify-handler.js +18 -15
- package/dist/mode-handlers/rotate-handler.d.ts +1 -1
- package/dist/mode-handlers/rotate-handler.js +4 -1
- package/dist/mode-handlers/scale-handler.d.ts +1 -1
- package/dist/mode-handlers/scale-handler.js +5 -2
- package/dist/mode-handlers/snappable-handler.d.ts +1 -1
- package/dist/mode-handlers/snappable-handler.js +6 -3
- package/dist/mode-handlers/split-polygon-handler.js +11 -8
- package/dist/mode-handlers/three-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/translate-handler.d.ts +1 -1
- package/dist/mode-handlers/translate-handler.js +4 -1
- package/dist/mode-handlers/two-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/view-handler.d.ts +1 -1
- package/dist/mode-handlers/view-handler.js +3 -0
- package/dist/shaderlib/color/color.d.ts +7 -6
- package/dist/shaderlib/color/color.js +7 -4
- package/dist/shaderlib/utils/utils.d.ts +2 -2
- package/dist/shaderlib/utils/utils.js +5 -2
- package/dist/{curve-utils.js → utils/curve-utils.js} +7 -4
- package/dist/{geojson-types.d.ts → utils/geojson-types.d.ts} +2 -25
- package/dist/utils/geojson-types.js +4 -0
- package/dist/{memoize.d.ts → utils/memoize.d.ts} +1 -1
- package/dist/{memoize.js → utils/memoize.js} +4 -1
- package/dist/{translateFromCenter.js → utils/translate-from-center.js} +4 -1
- package/dist/utils/types.js +4 -0
- package/dist/{utils.js → utils/utils.js} +8 -6
- package/package.json +10 -10
- package/src/constants.ts +5 -1
- package/src/edit-modes/composite-mode.ts +9 -5
- package/src/edit-modes/draw-90degree-polygon-mode.ts +38 -34
- package/src/edit-modes/draw-circle-by-diameter-mode.ts +16 -12
- package/src/edit-modes/draw-circle-from-center-mode.ts +15 -11
- package/src/edit-modes/draw-ellipse-by-bounding-box-mode.ts +8 -4
- package/src/edit-modes/draw-ellipse-using-three-points-mode.ts +9 -5
- package/src/edit-modes/draw-line-string-mode.ts +29 -25
- package/src/edit-modes/draw-point-mode.ts +13 -9
- package/src/edit-modes/draw-polygon-by-dragging-mode.ts +16 -16
- package/src/edit-modes/draw-polygon-mode.ts +28 -23
- package/src/edit-modes/draw-rectangle-from-center-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-using-three-points-mode.ts +12 -8
- package/src/edit-modes/draw-square-from-center-mode.ts +7 -3
- package/src/edit-modes/draw-square-mode.ts +7 -3
- package/src/edit-modes/duplicate-mode.ts +7 -3
- package/src/edit-modes/edit-mode.ts +5 -1
- package/src/edit-modes/elevation-mode.ts +13 -9
- package/src/edit-modes/extend-line-string-mode.ts +16 -12
- package/src/edit-modes/extrude-mode.ts +22 -18
- package/src/edit-modes/geojson-edit-mode.ts +37 -33
- package/src/edit-modes/immutable-feature-collection.ts +28 -22
- package/src/edit-modes/measure-angle-mode.ts +66 -59
- package/src/edit-modes/measure-area-mode.ts +13 -10
- package/src/edit-modes/measure-distance-mode.ts +37 -33
- package/src/edit-modes/modify-mode.ts +36 -32
- package/src/edit-modes/resize-circle-mode.ts +8 -5
- package/src/edit-modes/rotate-mode.ts +22 -18
- package/src/edit-modes/scale-mode.ts +29 -23
- package/src/edit-modes/snappable-mode.ts +19 -15
- package/src/edit-modes/split-polygon-mode.ts +25 -21
- package/src/edit-modes/three-click-polygon-mode.ts +15 -11
- package/src/edit-modes/transform-mode.ts +15 -11
- package/src/edit-modes/translate-mode.ts +15 -11
- package/src/edit-modes/two-click-polygon-mode.ts +15 -11
- package/src/edit-modes/types.ts +5 -1
- package/src/edit-modes/utils.ts +33 -30
- package/src/edit-modes/view-mode.ts +5 -1
- package/src/editable-layers/editable-geojson-layer.ts +44 -41
- package/src/editable-layers/editable-h3-cluster-layer.ts +17 -14
- package/src/editable-layers/editable-layer.ts +42 -32
- package/src/editable-layers/editable-path-layer.ts +12 -8
- package/src/editable-layers/elevated-edit-handle-layer.ts +11 -7
- package/src/editable-layers/junction-scatterplot-layer.ts +15 -11
- package/src/editable-layers/selection-layer.ts +11 -7
- package/src/index.ts +68 -65
- package/src/lib/constants.ts +4 -0
- package/src/lib/deck-renderer/deck-cache.ts +1 -1
- package/src/lib/deck-renderer/deck-drawer.ts +28 -28
- package/src/lib/feature.ts +7 -3
- package/src/lib/layer-mouse-event.ts +7 -6
- package/src/lib/layers/junctions-layer.ts +14 -10
- package/src/lib/layers/segments-layer.ts +24 -20
- package/src/lib/layers/texts-layer.ts +18 -14
- package/src/lib/math.ts +5 -1
- package/src/lib/{nebula.ts → nebula-core.ts} +8 -4
- package/src/lib/nebula-layer.ts +9 -5
- package/src/lib/style.ts +6 -2
- package/src/mode-handlers/composite-mode-handler.ts +6 -6
- package/src/mode-handlers/draw-90degree-polygon-handler.ts +22 -18
- package/src/mode-handlers/draw-circle-by-bounding-box-handler.ts +10 -6
- package/src/mode-handlers/draw-circle-from-center-handler.ts +10 -6
- package/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts +9 -5
- package/src/mode-handlers/draw-ellipse-using-three-points-handler.ts +12 -8
- package/src/mode-handlers/draw-line-string-handler.ts +12 -8
- package/src/mode-handlers/draw-point-handler.ts +9 -5
- package/src/mode-handlers/draw-polygon-handler.ts +16 -12
- package/src/mode-handlers/draw-rectangle-handler.ts +8 -4
- package/src/mode-handlers/draw-rectangle-using-three-points-handler.ts +17 -13
- package/src/mode-handlers/duplicate-handler.ts +8 -4
- package/src/mode-handlers/elevation-handler.ts +14 -10
- package/src/mode-handlers/extrude-handler.ts +15 -11
- package/src/mode-handlers/mode-handler.ts +26 -28
- package/src/mode-handlers/modify-handler.ts +29 -25
- package/src/mode-handlers/rotate-handler.ts +13 -17
- package/src/mode-handlers/scale-handler.ts +13 -13
- package/src/mode-handlers/snappable-handler.ts +28 -24
- package/src/mode-handlers/split-polygon-handler.ts +22 -18
- package/src/mode-handlers/three-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/translate-handler.ts +12 -8
- package/src/mode-handlers/two-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/view-handler.ts +7 -3
- package/src/shaderlib/color/color.ts +10 -5
- package/src/shaderlib/utils/utils.ts +6 -2
- package/src/{curve-utils.ts → utils/curve-utils.ts} +11 -7
- package/src/{geojson-types.ts → utils/geojson-types.ts} +16 -31
- package/src/{memoize.ts → utils/memoize.ts} +5 -1
- package/src/{translateFromCenter.ts → utils/translate-from-center.ts} +8 -4
- package/src/{types.ts → utils/types.ts} +4 -0
- package/src/{utils.ts → utils/utils.ts} +14 -11
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.d.ts +0 -4
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.js +0 -55
- package/dist/editable-layers/path-marker-layer/create-path-markers.d.ts +0 -16
- package/dist/editable-layers/path-marker-layer/create-path-markers.js +0 -75
- package/dist/editable-layers/path-marker-layer/path-marker-layer.d.ts +0 -40
- package/dist/editable-layers/path-marker-layer/path-marker-layer.js +0 -121
- package/dist/editable-layers/path-marker-layer/polyline.d.ts +0 -18
- package/dist/editable-layers/path-marker-layer/polyline.js +0 -37
- package/dist/editable-layers/path-outline-layer/path-outline-layer.d.ts +0 -26
- package/dist/editable-layers/path-outline-layer/path-outline-layer.js +0 -106
- package/dist/geojson-types.js +0 -2
- package/dist/shaderlib/outline/outline.d.ts +0 -8
- package/dist/shaderlib/outline/outline.js +0 -97
- package/dist/types.js +0 -1
- package/src/editable-layers/path-marker-layer/arrow-2d-geometry.ts +0 -61
- package/src/editable-layers/path-marker-layer/create-path-markers.ts +0 -107
- package/src/editable-layers/path-marker-layer/path-marker-layer.ts +0 -179
- package/src/editable-layers/path-marker-layer/polyline.ts +0 -40
- package/src/editable-layers/path-outline-layer/path-outline-layer.ts +0 -147
- package/src/shaderlib/outline/outline.ts +0 -101
- /package/dist/{curve-utils.d.ts → utils/curve-utils.d.ts} +0 -0
- /package/dist/{translateFromCenter.d.ts → utils/translate-from-center.d.ts} +0 -0
- /package/dist/{types.d.ts → utils/types.d.ts} +0 -0
- /package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import bbox from '@turf/bbox';
|
|
2
6
|
import turfCentroid from '@turf/centroid';
|
|
3
7
|
import turfBearing from '@turf/bearing';
|
|
4
8
|
import bboxPolygon from '@turf/bbox-polygon';
|
|
5
9
|
import turfDistance from '@turf/distance';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
10
|
+
import {coordEach} from '@turf/meta';
|
|
11
|
+
import {getGeom} from '@turf/invariant';
|
|
12
|
+
import {point, featureCollection, lineString} from '@turf/helpers';
|
|
9
13
|
import turfTransformRotate from '@turf/transform-rotate';
|
|
10
14
|
import polygonToLine from '@turf/polygon-to-line';
|
|
11
15
|
import {
|
|
@@ -15,12 +19,12 @@ import {
|
|
|
15
19
|
DraggingEvent,
|
|
16
20
|
ModeProps,
|
|
17
21
|
EditHandleFeature,
|
|
18
|
-
GuideFeatureCollection
|
|
22
|
+
GuideFeatureCollection
|
|
19
23
|
} from './types';
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
+
import {getPickedEditHandle} from './utils';
|
|
25
|
+
import {FeatureCollection, Position} from '../utils/geojson-types';
|
|
26
|
+
import {GeoJsonEditMode, GeoJsonEditAction, getIntermediatePosition} from './geojson-edit-mode';
|
|
27
|
+
import {ImmutableFeatureCollection} from './immutable-feature-collection';
|
|
24
28
|
|
|
25
29
|
export class RotateMode extends GeoJsonEditMode {
|
|
26
30
|
_selectedEditHandle: EditHandleFeature | null | undefined;
|
|
@@ -28,10 +32,10 @@ export class RotateMode extends GeoJsonEditMode {
|
|
|
28
32
|
_isRotating = false;
|
|
29
33
|
|
|
30
34
|
_isSinglePointGeometrySelected = (geometry: FeatureCollection | null | undefined): boolean => {
|
|
31
|
-
const {
|
|
35
|
+
const {features} = geometry || {};
|
|
32
36
|
if (Array.isArray(features) && features.length === 1) {
|
|
33
37
|
// @ts-expect-error turf type diff
|
|
34
|
-
const {
|
|
38
|
+
const {type}: {type: string} = getGeom(features[0]);
|
|
35
39
|
return type === 'Point';
|
|
36
40
|
}
|
|
37
41
|
return false;
|
|
@@ -44,7 +48,7 @@ export class RotateMode extends GeoJsonEditMode {
|
|
|
44
48
|
this._geometryBeingRotated || this.getSelectedFeaturesAsFeatureCollection(props);
|
|
45
49
|
|
|
46
50
|
if (this._isSinglePointGeometrySelected(selectedGeometry)) {
|
|
47
|
-
return {
|
|
51
|
+
return {type: 'FeatureCollection', features: []};
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
if (this._isRotating) {
|
|
@@ -77,13 +81,13 @@ export class RotateMode extends GeoJsonEditMode {
|
|
|
77
81
|
// relative to the length of the longest edge of the enveloping box
|
|
78
82
|
const rotateHandleCoords = topEdgeMidpointCoords && [
|
|
79
83
|
topEdgeMidpointCoords[0],
|
|
80
|
-
topEdgeMidpointCoords[1] + longestEdgeLength / 1000
|
|
84
|
+
topEdgeMidpointCoords[1] + longestEdgeLength / 1000
|
|
81
85
|
];
|
|
82
86
|
|
|
83
|
-
const lineFromEnvelopeToRotateHandle = lineString([topEdgeMidpointCoords
|
|
84
|
-
const rotateHandle = point(rotateHandleCoords
|
|
87
|
+
const lineFromEnvelopeToRotateHandle = lineString([topEdgeMidpointCoords, rotateHandleCoords]);
|
|
88
|
+
const rotateHandle = point(rotateHandleCoords, {
|
|
85
89
|
guideType: 'editHandle',
|
|
86
|
-
editHandleType: 'rotate'
|
|
90
|
+
editHandleType: 'rotate'
|
|
87
91
|
});
|
|
88
92
|
|
|
89
93
|
const outFeatures = [polygonToLine(boundingBox), rotateHandle, lineFromEnvelopeToRotateHandle];
|
|
@@ -178,7 +182,7 @@ export class RotateMode extends GeoJsonEditMode {
|
|
|
178
182
|
this._geometryBeingRotated,
|
|
179
183
|
angle,
|
|
180
184
|
{
|
|
181
|
-
pivot: centroid
|
|
185
|
+
pivot: centroid
|
|
182
186
|
}
|
|
183
187
|
);
|
|
184
188
|
|
|
@@ -195,8 +199,8 @@ export class RotateMode extends GeoJsonEditMode {
|
|
|
195
199
|
updatedData: updatedData.getObject(),
|
|
196
200
|
editType,
|
|
197
201
|
editContext: {
|
|
198
|
-
featureIndexes: selectedIndexes
|
|
199
|
-
}
|
|
202
|
+
featureIndexes: selectedIndexes
|
|
203
|
+
}
|
|
200
204
|
};
|
|
201
205
|
}
|
|
202
206
|
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import bbox from '@turf/bbox';
|
|
2
6
|
import turfCentroid from '@turf/centroid';
|
|
3
7
|
import turfBearing from '@turf/bearing';
|
|
4
8
|
import bboxPolygon from '@turf/bbox-polygon';
|
|
5
|
-
import {
|
|
9
|
+
import {point, featureCollection} from '@turf/helpers';
|
|
6
10
|
import polygonToLine from '@turf/polygon-to-line';
|
|
7
|
-
import {
|
|
11
|
+
import {coordEach} from '@turf/meta';
|
|
8
12
|
import turfDistance from '@turf/distance';
|
|
9
13
|
import turfTransformScale from '@turf/transform-scale';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
14
|
+
import {getCoord, getGeom} from '@turf/invariant';
|
|
15
|
+
import {FeatureCollection, Position} from '../utils/geojson-types';
|
|
12
16
|
import {
|
|
13
17
|
ModeProps,
|
|
14
18
|
PointerMoveEvent,
|
|
@@ -16,11 +20,11 @@ import {
|
|
|
16
20
|
StopDraggingEvent,
|
|
17
21
|
DraggingEvent,
|
|
18
22
|
EditHandleFeature,
|
|
19
|
-
GuideFeatureCollection
|
|
23
|
+
GuideFeatureCollection
|
|
20
24
|
} from './types';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
25
|
+
import {getPickedEditHandle} from './utils';
|
|
26
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
27
|
+
import {ImmutableFeatureCollection} from './immutable-feature-collection';
|
|
24
28
|
|
|
25
29
|
export class ScaleMode extends GeoJsonEditMode {
|
|
26
30
|
_geometryBeingScaled: FeatureCollection | null | undefined;
|
|
@@ -30,10 +34,10 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
30
34
|
_isScaling = false;
|
|
31
35
|
|
|
32
36
|
_isSinglePointGeometrySelected = (geometry: FeatureCollection | null | undefined): boolean => {
|
|
33
|
-
const {
|
|
37
|
+
const {features} = geometry || {};
|
|
34
38
|
if (Array.isArray(features) && features.length === 1) {
|
|
35
39
|
// @ts-expect-error turf types diff
|
|
36
|
-
const {
|
|
40
|
+
const {type}: {type: string} = getGeom(features[0]);
|
|
37
41
|
return type === 'Point';
|
|
38
42
|
}
|
|
39
43
|
return false;
|
|
@@ -51,12 +55,14 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
51
55
|
}
|
|
52
56
|
const guidePointCount = this._cornerGuidePoints.length;
|
|
53
57
|
const oppositeIndex = (selectedHandleIndex + guidePointCount / 2) % guidePointCount;
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
return (
|
|
59
|
+
this._cornerGuidePoints.find((p) => {
|
|
60
|
+
if (!Array.isArray(p.properties.positionIndexes)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return p.properties.positionIndexes[0] === oppositeIndex;
|
|
64
|
+
}) || null
|
|
65
|
+
);
|
|
60
66
|
};
|
|
61
67
|
|
|
62
68
|
_getUpdatedData = (props: ModeProps<FeatureCollection>, editedData: FeatureCollection) => {
|
|
@@ -83,7 +89,7 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
83
89
|
}
|
|
84
90
|
|
|
85
91
|
const oppositeHandle = this._getOppositeScaleHandle(this._selectedEditHandle);
|
|
86
|
-
const origin = getCoord(oppositeHandle
|
|
92
|
+
const origin = getCoord(oppositeHandle) as Position;
|
|
87
93
|
|
|
88
94
|
const scaleFactor = getScaleFactor(origin, startDragPoint, currentPoint);
|
|
89
95
|
|
|
@@ -92,15 +98,15 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
92
98
|
// @ts-expect-error turf types diff
|
|
93
99
|
this._geometryBeingScaled,
|
|
94
100
|
scaleFactor,
|
|
95
|
-
{
|
|
101
|
+
{origin}
|
|
96
102
|
);
|
|
97
103
|
|
|
98
104
|
return {
|
|
99
105
|
updatedData: this._getUpdatedData(props, scaledFeatures),
|
|
100
106
|
editType,
|
|
101
107
|
editContext: {
|
|
102
|
-
featureIndexes: props.selectedIndexes
|
|
103
|
-
}
|
|
108
|
+
featureIndexes: props.selectedIndexes
|
|
109
|
+
}
|
|
104
110
|
};
|
|
105
111
|
};
|
|
106
112
|
|
|
@@ -199,11 +205,11 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
199
205
|
|
|
200
206
|
// Add buffer to the enveloping box if a single Point feature is selected
|
|
201
207
|
if (this._isSinglePointGeometrySelected(selectedGeometry)) {
|
|
202
|
-
return {
|
|
208
|
+
return {type: 'FeatureCollection', features: []};
|
|
203
209
|
}
|
|
204
210
|
|
|
205
211
|
const boundingBox = bboxPolygon(bbox(selectedGeometry));
|
|
206
|
-
boundingBox.properties
|
|
212
|
+
boundingBox.properties.mode = 'scale';
|
|
207
213
|
const cornerGuidePoints: EditHandleFeature[] = [];
|
|
208
214
|
|
|
209
215
|
coordEach(boundingBox, (coord, coordIndex) => {
|
|
@@ -212,7 +218,7 @@ export class ScaleMode extends GeoJsonEditMode {
|
|
|
212
218
|
const cornerPoint = point(coord, {
|
|
213
219
|
guideType: 'editHandle',
|
|
214
220
|
editHandleType: 'scale',
|
|
215
|
-
positionIndexes: [coordIndex]
|
|
221
|
+
positionIndexes: [coordIndex]
|
|
216
222
|
});
|
|
217
223
|
cornerGuidePoints.push(cornerPoint as EditHandleFeature);
|
|
218
224
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Position, Feature, FeatureCollection} from '../utils/geojson-types';
|
|
2
6
|
import {
|
|
3
7
|
PointerMoveEvent,
|
|
4
8
|
StartDraggingEvent,
|
|
@@ -7,14 +11,14 @@ import {
|
|
|
7
11
|
ModeProps,
|
|
8
12
|
Pick,
|
|
9
13
|
GuideFeatureCollection,
|
|
10
|
-
EditHandleFeature
|
|
14
|
+
EditHandleFeature
|
|
11
15
|
} from './types';
|
|
12
16
|
import {
|
|
13
17
|
getPickedSnapSourceEditHandle,
|
|
14
18
|
getPickedEditHandles,
|
|
15
|
-
getEditHandlesForGeometry
|
|
19
|
+
getEditHandlesForGeometry
|
|
16
20
|
} from './utils';
|
|
17
|
-
import {
|
|
21
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
18
22
|
|
|
19
23
|
type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent | DraggingEvent;
|
|
20
24
|
|
|
@@ -33,7 +37,7 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
33
37
|
): T {
|
|
34
38
|
return Object.assign(event, {
|
|
35
39
|
mapCoords: snapTarget.geometry.coordinates,
|
|
36
|
-
pointerDownMapCoords: snapSource && snapSource.geometry.coordinates
|
|
40
|
+
pointerDownMapCoords: snapSource && snapSource.geometry.coordinates
|
|
37
41
|
});
|
|
38
42
|
}
|
|
39
43
|
|
|
@@ -53,7 +57,7 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
53
57
|
snapSourceHandle: EditHandleFeature,
|
|
54
58
|
data: FeatureCollection
|
|
55
59
|
): EditHandleFeature {
|
|
56
|
-
const {
|
|
60
|
+
const {featureIndex, positionIndexes} = snapSourceHandle.properties;
|
|
57
61
|
if (!Array.isArray(positionIndexes)) {
|
|
58
62
|
return snapSourceHandle;
|
|
59
63
|
}
|
|
@@ -69,8 +73,8 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
69
73
|
...snapSourceHandle,
|
|
70
74
|
geometry: {
|
|
71
75
|
type: 'Point',
|
|
72
|
-
coordinates: snapSourceCoordinates
|
|
73
|
-
}
|
|
76
|
+
coordinates: snapSourceCoordinates
|
|
77
|
+
}
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
80
|
|
|
@@ -79,7 +83,7 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
79
83
|
// that live in the current layer. Otherwise, this method will simply return the
|
|
80
84
|
// features from the current layer
|
|
81
85
|
_getSnapTargets(props: ModeProps<FeatureCollection>): Feature[] {
|
|
82
|
-
let {
|
|
86
|
+
let {additionalSnapTargets} = props.modeConfig || {};
|
|
83
87
|
additionalSnapTargets = additionalSnapTargets || [];
|
|
84
88
|
|
|
85
89
|
const features = [...props.data.features, ...additionalSnapTargets];
|
|
@@ -95,7 +99,7 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
95
99
|
const isCurrentIndexFeatureNotSelected = !props.selectedIndexes.includes(i);
|
|
96
100
|
|
|
97
101
|
if (isCurrentIndexFeatureNotSelected) {
|
|
98
|
-
const {
|
|
102
|
+
const {geometry} = features[i];
|
|
99
103
|
handles.push(...getEditHandlesForGeometry(geometry, i, 'snap-target'));
|
|
100
104
|
}
|
|
101
105
|
}
|
|
@@ -106,12 +110,12 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
106
110
|
// selected feature. If a snap handle has been picked, display said snap handle
|
|
107
111
|
// along with all snappable points on all non-selected features.
|
|
108
112
|
getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
|
|
109
|
-
const {
|
|
110
|
-
const {
|
|
113
|
+
const {modeConfig, lastPointerMoveEvent} = props;
|
|
114
|
+
const {enableSnapping} = modeConfig || {};
|
|
111
115
|
|
|
112
116
|
const guides: GuideFeatureCollection = {
|
|
113
117
|
type: 'FeatureCollection',
|
|
114
|
-
features: [...this._handler.getGuides(props).features]
|
|
118
|
+
features: [...this._handler.getGuides(props).features]
|
|
115
119
|
};
|
|
116
120
|
|
|
117
121
|
if (!enableSnapping) {
|
|
@@ -133,10 +137,10 @@ export class SnappableMode extends GeoJsonEditMode {
|
|
|
133
137
|
}
|
|
134
138
|
|
|
135
139
|
// Render the possible snap source handles
|
|
136
|
-
const {
|
|
140
|
+
const {features} = props.data;
|
|
137
141
|
for (const index of props.selectedIndexes) {
|
|
138
142
|
if (index < features.length) {
|
|
139
|
-
const {
|
|
143
|
+
const {geometry} = features[index];
|
|
140
144
|
guides.features.push(...getEditHandlesForGeometry(geometry, index, 'snap-source'));
|
|
141
145
|
}
|
|
142
146
|
}
|
|
@@ -1,24 +1,28 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import booleanPointInPolygon from '@turf/boolean-point-in-polygon';
|
|
2
6
|
import turfDifference from '@turf/difference';
|
|
3
7
|
import turfBuffer from '@turf/buffer';
|
|
4
8
|
import lineIntersect from '@turf/line-intersect';
|
|
5
|
-
import {
|
|
9
|
+
import {lineString, Point} from '@turf/helpers';
|
|
6
10
|
import turfBearing from '@turf/bearing';
|
|
7
11
|
import turfDistance from '@turf/distance';
|
|
8
12
|
import turfDestination from '@turf/destination';
|
|
9
13
|
import turfPolygonToLine from '@turf/polygon-to-line';
|
|
10
|
-
import nearestPointOnLine, {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
14
|
+
import nearestPointOnLine, {NearestPointOnLine} from '@turf/nearest-point-on-line';
|
|
15
|
+
import {generatePointsParallelToLinePoints} from './utils';
|
|
16
|
+
import {FeatureCollection} from '../utils/geojson-types';
|
|
13
17
|
import {
|
|
14
18
|
ClickEvent,
|
|
15
19
|
PointerMoveEvent,
|
|
16
20
|
ModeProps,
|
|
17
21
|
GuideFeatureCollection,
|
|
18
|
-
TentativeFeature
|
|
22
|
+
TentativeFeature
|
|
19
23
|
} from './types';
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
24
|
+
import {GeoJsonEditMode, GeoJsonEditAction} from './geojson-edit-mode';
|
|
25
|
+
import {ImmutableFeatureCollection} from './immutable-feature-collection';
|
|
22
26
|
|
|
23
27
|
export class SplitPolygonMode extends GeoJsonEditMode {
|
|
24
28
|
calculateMapCoords(clickSequence: any, mapCoords: any, props: ModeProps<FeatureCollection>) {
|
|
@@ -49,9 +53,9 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
49
53
|
if (closestPoint) {
|
|
50
54
|
// closest point is used as 90degree entry to the polygon
|
|
51
55
|
const lastBearing = turfBearing(firstPoint, closestPoint);
|
|
52
|
-
const currentDistance = turfDistance(firstPoint, mapCoords, {
|
|
56
|
+
const currentDistance = turfDistance(firstPoint, mapCoords, {units: 'meters'});
|
|
53
57
|
return turfDestination(firstPoint, currentDistance, lastBearing, {
|
|
54
|
-
units: 'meters'
|
|
58
|
+
units: 'meters'
|
|
55
59
|
}).geometry.coordinates;
|
|
56
60
|
}
|
|
57
61
|
return mapCoords;
|
|
@@ -74,7 +78,7 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
74
78
|
|
|
75
79
|
const guides: GuideFeatureCollection = {
|
|
76
80
|
type: 'FeatureCollection',
|
|
77
|
-
features: []
|
|
81
|
+
features: []
|
|
78
82
|
};
|
|
79
83
|
|
|
80
84
|
if (clickSequence.length === 0 || !props.lastPointerMoveEvent) {
|
|
@@ -82,17 +86,17 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
82
86
|
return guides;
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
const {
|
|
89
|
+
const {mapCoords} = props.lastPointerMoveEvent;
|
|
86
90
|
|
|
87
91
|
guides.features.push({
|
|
88
92
|
type: 'Feature',
|
|
89
93
|
properties: {
|
|
90
|
-
guideType: 'tentative'
|
|
94
|
+
guideType: 'tentative'
|
|
91
95
|
},
|
|
92
96
|
geometry: {
|
|
93
97
|
type: 'LineString',
|
|
94
|
-
coordinates: [...clickSequence, this.calculateMapCoords(clickSequence, mapCoords, props)]
|
|
95
|
-
}
|
|
98
|
+
coordinates: [...clickSequence, this.calculateMapCoords(clickSequence, mapCoords, props)]
|
|
99
|
+
}
|
|
96
100
|
});
|
|
97
101
|
|
|
98
102
|
return guides;
|
|
@@ -120,7 +124,7 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
120
124
|
|
|
121
125
|
const pt: Point = {
|
|
122
126
|
type: 'Point',
|
|
123
|
-
coordinates: clickSequence[clickSequence.length - 1]
|
|
127
|
+
coordinates: clickSequence[clickSequence.length - 1]
|
|
124
128
|
};
|
|
125
129
|
|
|
126
130
|
// @ts-expect-error turf types diff
|
|
@@ -151,13 +155,13 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
151
155
|
const modeConfig = props.modeConfig || {};
|
|
152
156
|
|
|
153
157
|
// Default gap in between the polygon
|
|
154
|
-
let {
|
|
158
|
+
let {gap = 0.1, units = 'centimeters'} = modeConfig;
|
|
155
159
|
if (gap === 0) {
|
|
156
160
|
gap = 0.1;
|
|
157
161
|
units = 'centimeters';
|
|
158
162
|
}
|
|
159
163
|
|
|
160
|
-
const buffer = turfBuffer(tentativeFeature, gap, {
|
|
164
|
+
const buffer = turfBuffer(tentativeFeature, gap, {units});
|
|
161
165
|
// @ts-expect-error turf types diff
|
|
162
166
|
const updatedGeometry = turfDifference(selectedGeometry, buffer);
|
|
163
167
|
if (!updatedGeometry) {
|
|
@@ -166,7 +170,7 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
166
170
|
return null;
|
|
167
171
|
}
|
|
168
172
|
|
|
169
|
-
const {
|
|
173
|
+
const {type, coordinates} = updatedGeometry.geometry;
|
|
170
174
|
let updatedCoordinates: any[] = []; // TODO
|
|
171
175
|
if (type === 'Polygon') {
|
|
172
176
|
// Update the coordinates as per Multipolygon
|
|
@@ -185,15 +189,15 @@ export class SplitPolygonMode extends GeoJsonEditMode {
|
|
|
185
189
|
// Update the type to Mulitpolygon
|
|
186
190
|
const updatedData = new ImmutableFeatureCollection(props.data).replaceGeometry(featureIndex, {
|
|
187
191
|
type: 'MultiPolygon',
|
|
188
|
-
coordinates: updatedCoordinates
|
|
192
|
+
coordinates: updatedCoordinates
|
|
189
193
|
});
|
|
190
194
|
|
|
191
195
|
const editAction: GeoJsonEditAction = {
|
|
192
196
|
updatedData: updatedData.getObject(),
|
|
193
197
|
editType: 'split',
|
|
194
198
|
editContext: {
|
|
195
|
-
featureIndexes: [featureIndex]
|
|
196
|
-
}
|
|
199
|
+
featureIndexes: [featureIndex]
|
|
200
|
+
}
|
|
197
201
|
};
|
|
198
202
|
|
|
199
203
|
return editAction;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
ClickEvent,
|
|
3
7
|
PointerMoveEvent,
|
|
4
8
|
ModeProps,
|
|
5
9
|
GuideFeatureCollection,
|
|
6
|
-
TentativeFeature
|
|
10
|
+
TentativeFeature
|
|
7
11
|
} from './types';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
12
|
+
import {Position, Polygon, FeatureOf, FeatureCollection} from '../utils/geojson-types';
|
|
13
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
10
14
|
|
|
11
15
|
export class ThreeClickPolygonMode extends GeoJsonEditMode {
|
|
12
16
|
handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
|
|
@@ -29,12 +33,12 @@ export class ThreeClickPolygonMode extends GeoJsonEditMode {
|
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
|
|
32
|
-
const {
|
|
36
|
+
const {lastPointerMoveEvent, modeConfig} = props;
|
|
33
37
|
const clickSequence = this.getClickSequence();
|
|
34
38
|
|
|
35
39
|
const guides: GuideFeatureCollection = {
|
|
36
40
|
type: 'FeatureCollection',
|
|
37
|
-
features: []
|
|
41
|
+
features: []
|
|
38
42
|
};
|
|
39
43
|
|
|
40
44
|
if (clickSequence.length === 0) {
|
|
@@ -48,12 +52,12 @@ export class ThreeClickPolygonMode extends GeoJsonEditMode {
|
|
|
48
52
|
guides.features.push({
|
|
49
53
|
type: 'Feature',
|
|
50
54
|
properties: {
|
|
51
|
-
guideType: 'tentative'
|
|
55
|
+
guideType: 'tentative'
|
|
52
56
|
},
|
|
53
57
|
geometry: {
|
|
54
58
|
type: 'LineString',
|
|
55
|
-
coordinates: [clickSequence[0], hoveredCoord]
|
|
56
|
-
}
|
|
59
|
+
coordinates: [clickSequence[0], hoveredCoord]
|
|
60
|
+
}
|
|
57
61
|
});
|
|
58
62
|
} else {
|
|
59
63
|
const polygon = this.getThreeClickPolygon(
|
|
@@ -66,9 +70,9 @@ export class ThreeClickPolygonMode extends GeoJsonEditMode {
|
|
|
66
70
|
guides.features.push({
|
|
67
71
|
type: 'Feature',
|
|
68
72
|
properties: {
|
|
69
|
-
guideType: 'tentative'
|
|
73
|
+
guideType: 'tentative'
|
|
70
74
|
},
|
|
71
|
-
geometry: polygon.geometry
|
|
75
|
+
geometry: polygon.geometry
|
|
72
76
|
});
|
|
73
77
|
}
|
|
74
78
|
}
|
|
@@ -91,7 +95,7 @@ export class ThreeClickPolygonMode extends GeoJsonEditMode {
|
|
|
91
95
|
}
|
|
92
96
|
|
|
93
97
|
createTentativeFeature(props: ModeProps<FeatureCollection>): TentativeFeature {
|
|
94
|
-
const {
|
|
98
|
+
const {lastPointerMoveEvent} = props;
|
|
95
99
|
const clickSequence = this.getClickSequence();
|
|
96
100
|
|
|
97
101
|
const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { TranslateMode } from './translate-mode';
|
|
5
|
-
import { ScaleMode } from './scale-mode';
|
|
6
|
-
import { RotateMode } from './rotate-mode';
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
7
4
|
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
5
|
+
import {featureCollection} from '@turf/helpers';
|
|
6
|
+
import {PointerMoveEvent, ModeProps, StartDraggingEvent} from './types';
|
|
7
|
+
import {FeatureCollection} from '../utils/geojson-types';
|
|
8
|
+
import {TranslateMode} from './translate-mode';
|
|
9
|
+
import {ScaleMode} from './scale-mode';
|
|
10
|
+
import {RotateMode} from './rotate-mode';
|
|
11
|
+
|
|
12
|
+
import {CompositeMode} from './composite-mode';
|
|
13
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
10
14
|
|
|
11
15
|
export class TransformMode extends CompositeMode {
|
|
12
16
|
constructor() {
|
|
@@ -19,7 +23,7 @@ export class TransformMode extends CompositeMode {
|
|
|
19
23
|
...props,
|
|
20
24
|
onUpdateCursor: (cursor) => {
|
|
21
25
|
updatedCursor = cursor || updatedCursor;
|
|
22
|
-
}
|
|
26
|
+
}
|
|
23
27
|
});
|
|
24
28
|
props.onUpdateCursor(updatedCursor);
|
|
25
29
|
}
|
|
@@ -45,7 +49,7 @@ export class TransformMode extends CompositeMode {
|
|
|
45
49
|
});
|
|
46
50
|
|
|
47
51
|
if (scaleMode instanceof ScaleMode && !scaleMode.isEditHandleSelected()) {
|
|
48
|
-
filteredModes.push(translateMode
|
|
52
|
+
filteredModes.push(translateMode);
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
filteredModes.filter(Boolean).forEach((mode) => mode.handleStartDragging(event, props));
|
|
@@ -57,7 +61,7 @@ export class TransformMode extends CompositeMode {
|
|
|
57
61
|
|
|
58
62
|
if (rotateMode instanceof RotateMode) {
|
|
59
63
|
const nonEnvelopeGuides = compositeGuides.features.filter((guide) => {
|
|
60
|
-
const {
|
|
64
|
+
const {editHandleType, mode} = (guide.properties as any) || {};
|
|
61
65
|
// Both scale and rotate modes have the same enveloping box as a guide - only need one
|
|
62
66
|
const guidesToFilterOut = [mode];
|
|
63
67
|
// Do not render scaling edit handles if rotating
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import turfBearing from '@turf/bearing';
|
|
2
6
|
import turfDistance from '@turf/distance';
|
|
3
7
|
import clone from '@turf/clone';
|
|
4
|
-
import {
|
|
8
|
+
import {point, Feature as TurfFeature, Geometry as TurfGeometry} from '@turf/helpers';
|
|
5
9
|
import WebMercatorViewport from 'viewport-mercator-project';
|
|
6
|
-
import {
|
|
10
|
+
import {FeatureCollection, Position, Geometry} from '../utils/geojson-types';
|
|
7
11
|
import {
|
|
8
12
|
PointerMoveEvent,
|
|
9
13
|
StartDraggingEvent,
|
|
10
14
|
StopDraggingEvent,
|
|
11
15
|
DraggingEvent,
|
|
12
|
-
ModeProps
|
|
16
|
+
ModeProps
|
|
13
17
|
} from './types';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
+
import {mapCoords} from './utils';
|
|
19
|
+
import {translateFromCenter} from '../utils/translate-from-center';
|
|
20
|
+
import {GeoJsonEditMode, GeoJsonEditAction} from './geojson-edit-mode';
|
|
21
|
+
import {ImmutableFeatureCollection} from './immutable-feature-collection';
|
|
18
22
|
|
|
19
23
|
export class TranslateMode extends GeoJsonEditMode {
|
|
20
24
|
_geometryBeforeTranslate: FeatureCollection | null | undefined;
|
|
@@ -98,7 +102,7 @@ export class TranslateMode extends GeoJsonEditMode {
|
|
|
98
102
|
let updatedData = new ImmutableFeatureCollection(props.data);
|
|
99
103
|
const selectedIndexes = props.selectedIndexes;
|
|
100
104
|
|
|
101
|
-
const {
|
|
105
|
+
const {viewport: viewportDesc, screenSpace} = props.modeConfig || {};
|
|
102
106
|
|
|
103
107
|
// move features without adapting to mercator projection
|
|
104
108
|
if (viewportDesc && screenSpace) {
|
|
@@ -128,7 +132,7 @@ export class TranslateMode extends GeoJsonEditMode {
|
|
|
128
132
|
// @ts-expect-error turf types
|
|
129
133
|
updatedData = updatedData.replaceGeometry(selectedIndex, {
|
|
130
134
|
type: feature.geometry.type,
|
|
131
|
-
coordinates
|
|
135
|
+
coordinates
|
|
132
136
|
});
|
|
133
137
|
}
|
|
134
138
|
}
|
|
@@ -154,8 +158,8 @@ export class TranslateMode extends GeoJsonEditMode {
|
|
|
154
158
|
updatedData: updatedData.getObject(),
|
|
155
159
|
editType,
|
|
156
160
|
editContext: {
|
|
157
|
-
featureIndexes: selectedIndexes
|
|
158
|
-
}
|
|
161
|
+
featureIndexes: selectedIndexes
|
|
162
|
+
}
|
|
159
163
|
};
|
|
160
164
|
}
|
|
161
165
|
}
|