@deck.gl-community/editable-layers 9.0.0-alpha.1 → 9.0.3
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.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -1
- package/dist/edit-modes/composite-mode.d.ts +4 -3
- package/dist/edit-modes/composite-mode.d.ts.map +1 -0
- package/dist/edit-modes/composite-mode.js +5 -2
- package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +4 -3
- package/dist/edit-modes/draw-90degree-polygon-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-90degree-polygon-mode.js +30 -25
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +4 -3
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-circle-by-diameter-mode.js +9 -6
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts +4 -3
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-circle-from-center-mode.js +8 -5
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +3 -2
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +5 -2
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +3 -2
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +5 -2
- package/dist/edit-modes/draw-line-string-mode.d.ts +4 -3
- package/dist/edit-modes/draw-line-string-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-line-string-mode.js +21 -18
- package/dist/edit-modes/draw-point-mode.d.ts +4 -3
- package/dist/edit-modes/draw-point-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-point-mode.js +8 -5
- package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +4 -3
- package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-polygon-by-dragging-mode.js +12 -7
- package/dist/edit-modes/draw-polygon-mode.d.ts +4 -3
- package/dist/edit-modes/draw-polygon-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-polygon-mode.js +22 -18
- package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +3 -2
- package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-rectangle-from-center-mode.js +4 -1
- package/dist/edit-modes/draw-rectangle-mode.d.ts +3 -2
- package/dist/edit-modes/draw-rectangle-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-rectangle-mode.js +4 -1
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +3 -2
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +10 -7
- package/dist/edit-modes/draw-square-from-center-mode.d.ts +3 -2
- package/dist/edit-modes/draw-square-from-center-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-square-from-center-mode.js +4 -1
- package/dist/edit-modes/draw-square-mode.d.ts +3 -2
- package/dist/edit-modes/draw-square-mode.d.ts.map +1 -0
- package/dist/edit-modes/draw-square-mode.js +4 -1
- package/dist/edit-modes/duplicate-mode.d.ts +4 -3
- package/dist/edit-modes/duplicate-mode.d.ts.map +1 -0
- package/dist/edit-modes/duplicate-mode.js +4 -1
- package/dist/edit-modes/edit-mode.d.ts +2 -1
- package/dist/edit-modes/edit-mode.d.ts.map +1 -0
- package/dist/edit-modes/edit-mode.js +3 -1
- package/dist/edit-modes/elevation-mode.d.ts +5 -4
- package/dist/edit-modes/elevation-mode.d.ts.map +1 -0
- package/dist/edit-modes/elevation-mode.js +10 -7
- package/dist/edit-modes/extend-line-string-mode.d.ts +4 -3
- package/dist/edit-modes/extend-line-string-mode.d.ts.map +1 -0
- package/dist/edit-modes/extend-line-string-mode.js +11 -8
- package/dist/edit-modes/extrude-mode.d.ts +4 -3
- package/dist/edit-modes/extrude-mode.d.ts.map +1 -0
- package/dist/edit-modes/extrude-mode.js +12 -9
- package/dist/edit-modes/geojson-edit-mode.d.ts +4 -3
- package/dist/edit-modes/geojson-edit-mode.d.ts.map +1 -0
- package/dist/edit-modes/geojson-edit-mode.js +20 -17
- package/dist/edit-modes/immutable-feature-collection.d.ts +3 -1
- package/dist/edit-modes/immutable-feature-collection.d.ts.map +1 -0
- package/dist/edit-modes/immutable-feature-collection.js +25 -20
- package/dist/edit-modes/measure-angle-mode.d.ts +4 -3
- package/dist/edit-modes/measure-angle-mode.d.ts.map +1 -0
- package/dist/edit-modes/measure-angle-mode.js +9 -9
- package/dist/edit-modes/measure-area-mode.d.ts +4 -3
- package/dist/edit-modes/measure-area-mode.d.ts.map +1 -0
- package/dist/edit-modes/measure-area-mode.js +8 -6
- package/dist/edit-modes/measure-distance-mode.d.ts +4 -3
- package/dist/edit-modes/measure-distance-mode.d.ts.map +1 -0
- package/dist/edit-modes/measure-distance-mode.js +19 -16
- package/dist/edit-modes/modify-mode.d.ts +5 -4
- package/dist/edit-modes/modify-mode.d.ts.map +1 -0
- package/dist/edit-modes/modify-mode.js +19 -16
- package/dist/edit-modes/resize-circle-mode.d.ts +6 -5
- package/dist/edit-modes/resize-circle-mode.d.ts.map +1 -0
- package/dist/edit-modes/resize-circle-mode.js +6 -4
- package/dist/edit-modes/rotate-mode.d.ts +4 -3
- package/dist/edit-modes/rotate-mode.d.ts.map +1 -0
- package/dist/edit-modes/rotate-mode.js +11 -8
- package/dist/edit-modes/scale-mode.d.ts +4 -3
- package/dist/edit-modes/scale-mode.d.ts.map +1 -0
- package/dist/edit-modes/scale-mode.js +11 -8
- package/dist/edit-modes/snappable-mode.d.ts +4 -3
- package/dist/edit-modes/snappable-mode.d.ts.map +1 -0
- package/dist/edit-modes/snappable-mode.js +9 -6
- package/dist/edit-modes/split-polygon-mode.d.ts +4 -3
- package/dist/edit-modes/split-polygon-mode.d.ts.map +1 -0
- package/dist/edit-modes/split-polygon-mode.js +15 -12
- package/dist/edit-modes/three-click-polygon-mode.d.ts +4 -3
- package/dist/edit-modes/three-click-polygon-mode.d.ts.map +1 -0
- package/dist/edit-modes/three-click-polygon-mode.js +10 -7
- package/dist/edit-modes/transform-mode.d.ts +4 -3
- package/dist/edit-modes/transform-mode.d.ts.map +1 -0
- package/dist/edit-modes/transform-mode.js +8 -5
- package/dist/edit-modes/translate-mode.d.ts +4 -3
- package/dist/edit-modes/translate-mode.d.ts.map +1 -0
- package/dist/edit-modes/translate-mode.js +10 -7
- package/dist/edit-modes/two-click-polygon-mode.d.ts +4 -3
- package/dist/edit-modes/two-click-polygon-mode.d.ts.map +1 -0
- package/dist/edit-modes/two-click-polygon-mode.js +10 -7
- package/dist/edit-modes/types.d.ts +2 -1
- package/dist/edit-modes/types.d.ts.map +1 -0
- package/dist/edit-modes/types.js +3 -0
- package/dist/edit-modes/utils.d.ts +3 -2
- package/dist/edit-modes/utils.d.ts.map +1 -0
- package/dist/edit-modes/utils.js +22 -19
- package/dist/edit-modes/view-mode.d.ts +2 -1
- package/dist/edit-modes/view-mode.d.ts.map +1 -0
- package/dist/edit-modes/view-mode.js +4 -1
- package/dist/editable-layers/editable-geojson-layer.d.ts +7 -6
- package/dist/editable-layers/editable-geojson-layer.d.ts.map +1 -0
- package/dist/editable-layers/editable-geojson-layer.js +53 -52
- package/dist/editable-layers/editable-h3-cluster-layer.d.ts +3 -2
- package/dist/editable-layers/editable-h3-cluster-layer.d.ts.map +1 -0
- package/dist/editable-layers/editable-h3-cluster-layer.js +8 -5
- package/dist/editable-layers/editable-layer.d.ts +7 -6
- package/dist/editable-layers/editable-layer.d.ts.map +1 -0
- package/dist/editable-layers/editable-layer.js +18 -15
- package/dist/editable-layers/editable-path-layer.d.ts +2 -1
- package/dist/editable-layers/editable-path-layer.d.ts.map +1 -0
- package/dist/editable-layers/editable-path-layer.js +10 -7
- package/dist/editable-layers/elevated-edit-handle-layer.d.ts +2 -1
- package/dist/editable-layers/elevated-edit-handle-layer.d.ts.map +1 -0
- package/dist/editable-layers/elevated-edit-handle-layer.js +6 -3
- package/dist/editable-layers/junction-scatterplot-layer.d.ts +3 -2
- package/dist/editable-layers/junction-scatterplot-layer.d.ts.map +1 -0
- package/dist/editable-layers/junction-scatterplot-layer.js +10 -7
- package/dist/editable-layers/selection-layer.d.ts +2 -1
- package/dist/editable-layers/selection-layer.d.ts.map +1 -0
- package/dist/editable-layers/selection-layer.js +8 -5
- package/dist/index.cjs +70 -542
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +59 -59
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -54
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +3 -0
- package/dist/lib/deck-renderer/deck-cache.d.ts +2 -1
- package/dist/lib/deck-renderer/deck-cache.d.ts.map +1 -0
- package/dist/lib/deck-renderer/deck-cache.js +1 -1
- package/dist/lib/deck-renderer/deck-drawer.d.ts +3 -3
- package/dist/lib/deck-renderer/deck-drawer.d.ts.map +1 -0
- package/dist/lib/deck-renderer/deck-drawer.js +12 -12
- package/dist/lib/feature.d.ts +5 -4
- package/dist/lib/feature.d.ts.map +1 -0
- package/dist/lib/feature.js +4 -1
- package/dist/lib/layer-mouse-event.d.ts +3 -2
- package/dist/lib/layer-mouse-event.d.ts.map +1 -0
- package/dist/lib/layer-mouse-event.js +4 -1
- package/dist/lib/layers/junctions-layer.d.ts +5 -4
- package/dist/lib/layers/junctions-layer.d.ts.map +1 -0
- package/dist/lib/layers/junctions-layer.js +10 -7
- package/dist/lib/layers/segments-layer.d.ts +5 -4
- package/dist/lib/layers/segments-layer.d.ts.map +1 -0
- package/dist/lib/layers/segments-layer.js +12 -9
- package/dist/lib/layers/texts-layer.d.ts +4 -3
- package/dist/lib/layers/texts-layer.d.ts.map +1 -0
- package/dist/lib/layers/texts-layer.js +9 -6
- package/dist/lib/math.d.ts +2 -1
- package/dist/lib/math.d.ts.map +1 -0
- package/dist/lib/math.js +3 -0
- package/dist/lib/{nebula.d.ts → nebula-core.d.ts} +3 -2
- package/dist/lib/nebula-core.d.ts.map +1 -0
- package/dist/lib/{nebula.js → nebula-core.js} +7 -4
- package/dist/lib/nebula-layer.d.ts +3 -2
- package/dist/lib/nebula-layer.d.ts.map +1 -0
- package/dist/lib/nebula-layer.js +4 -1
- package/dist/lib/style.d.ts +1 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +5 -2
- package/dist/mode-handlers/composite-mode-handler.d.ts +4 -3
- package/dist/mode-handlers/composite-mode-handler.d.ts.map +1 -0
- package/dist/mode-handlers/composite-mode-handler.js +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-90degree-polygon-handler.js +13 -10
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +5 -2
- package/dist/mode-handlers/draw-circle-from-center-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-circle-from-center-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-circle-from-center-handler.js +4 -1
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +5 -2
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +7 -4
- package/dist/mode-handlers/draw-line-string-handler.d.ts +3 -2
- package/dist/mode-handlers/draw-line-string-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-line-string-handler.js +8 -5
- package/dist/mode-handlers/draw-point-handler.d.ts +3 -2
- package/dist/mode-handlers/draw-point-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-point-handler.js +5 -2
- package/dist/mode-handlers/draw-polygon-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-polygon-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-polygon-handler.js +10 -7
- package/dist/mode-handlers/draw-rectangle-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-rectangle-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-rectangle-handler.js +4 -1
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.d.ts +4 -3
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.d.ts.map +1 -0
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +12 -9
- package/dist/mode-handlers/duplicate-handler.d.ts +4 -3
- package/dist/mode-handlers/duplicate-handler.d.ts.map +1 -0
- package/dist/mode-handlers/duplicate-handler.js +4 -1
- package/dist/mode-handlers/elevation-handler.d.ts +6 -5
- package/dist/mode-handlers/elevation-handler.d.ts.map +1 -0
- package/dist/mode-handlers/elevation-handler.js +10 -7
- package/dist/mode-handlers/extrude-handler.d.ts +4 -3
- package/dist/mode-handlers/extrude-handler.d.ts.map +1 -0
- package/dist/mode-handlers/extrude-handler.js +12 -9
- package/dist/mode-handlers/mode-handler.d.ts +4 -3
- package/dist/mode-handlers/mode-handler.d.ts.map +1 -0
- package/dist/mode-handlers/mode-handler.js +18 -15
- package/dist/mode-handlers/modify-handler.d.ts +5 -4
- package/dist/mode-handlers/modify-handler.d.ts.map +1 -0
- package/dist/mode-handlers/modify-handler.js +18 -15
- package/dist/mode-handlers/rotate-handler.d.ts +4 -3
- package/dist/mode-handlers/rotate-handler.d.ts.map +1 -0
- package/dist/mode-handlers/rotate-handler.js +5 -2
- package/dist/mode-handlers/scale-handler.d.ts +4 -3
- package/dist/mode-handlers/scale-handler.d.ts.map +1 -0
- package/dist/mode-handlers/scale-handler.js +6 -3
- package/dist/mode-handlers/snappable-handler.d.ts +4 -3
- package/dist/mode-handlers/snappable-handler.d.ts.map +1 -0
- package/dist/mode-handlers/snappable-handler.js +6 -3
- package/dist/mode-handlers/split-polygon-handler.d.ts +3 -2
- package/dist/mode-handlers/split-polygon-handler.d.ts.map +1 -0
- package/dist/mode-handlers/split-polygon-handler.js +12 -9
- package/dist/mode-handlers/three-click-polygon-handler.d.ts +3 -2
- package/dist/mode-handlers/three-click-polygon-handler.d.ts.map +1 -0
- package/dist/mode-handlers/three-click-polygon-handler.js +4 -1
- package/dist/mode-handlers/translate-handler.d.ts +4 -3
- package/dist/mode-handlers/translate-handler.d.ts.map +1 -0
- package/dist/mode-handlers/translate-handler.js +5 -2
- package/dist/mode-handlers/two-click-polygon-handler.d.ts +3 -2
- package/dist/mode-handlers/two-click-polygon-handler.d.ts.map +1 -0
- package/dist/mode-handlers/two-click-polygon-handler.js +4 -1
- package/dist/mode-handlers/view-handler.d.ts +3 -2
- package/dist/mode-handlers/view-handler.d.ts.map +1 -0
- package/dist/mode-handlers/view-handler.js +4 -1
- package/dist/shaderlib/color/color.d.ts +8 -6
- package/dist/shaderlib/color/color.d.ts.map +1 -0
- package/dist/shaderlib/color/color.js +7 -4
- package/dist/shaderlib/utils/utils.d.ts +3 -2
- package/dist/shaderlib/utils/utils.d.ts.map +1 -0
- package/dist/shaderlib/utils/utils.js +5 -2
- package/dist/{curve-utils.d.ts → utils/curve-utils.d.ts} +1 -0
- package/dist/utils/curve-utils.d.ts.map +1 -0
- package/dist/{curve-utils.js → utils/curve-utils.js} +7 -4
- package/dist/{geojson-types.d.ts → utils/geojson-types.d.ts} +3 -25
- package/dist/utils/geojson-types.d.ts.map +1 -0
- package/dist/utils/geojson-types.js +4 -0
- package/dist/{memoize.d.ts → utils/memoize.d.ts} +2 -1
- package/dist/utils/memoize.d.ts.map +1 -0
- package/dist/{memoize.js → utils/memoize.js} +4 -1
- package/dist/{translateFromCenter.d.ts → utils/translate-from-center.d.ts} +1 -0
- package/dist/utils/translate-from-center.d.ts.map +1 -0
- package/dist/{translateFromCenter.js → utils/translate-from-center.js} +7 -4
- package/dist/{types.d.ts → utils/types.d.ts} +1 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +4 -0
- package/dist/{utils.d.ts → utils/utils.d.ts} +5 -4
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/{utils.js → utils/utils.js} +11 -9
- package/package.json +11 -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 +35 -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} +12 -8
- package/src/{types.ts → utils/types.ts} +4 -0
- package/src/{utils.ts → utils/utils.ts} +17 -14
- 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
|
@@ -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
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
ClickEvent,
|
|
3
7
|
StartDraggingEvent,
|
|
@@ -5,10 +9,10 @@ import {
|
|
|
5
9
|
PointerMoveEvent,
|
|
6
10
|
ModeProps,
|
|
7
11
|
GuideFeatureCollection,
|
|
8
|
-
TentativeFeature
|
|
12
|
+
TentativeFeature
|
|
9
13
|
} from './types';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
14
|
+
import {Polygon, FeatureCollection, FeatureOf, Position} from '../utils/geojson-types';
|
|
15
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
12
16
|
|
|
13
17
|
export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
14
18
|
handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
|
|
@@ -54,12 +58,12 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
54
58
|
const feature: FeatureOf<Polygon> = {
|
|
55
59
|
type: 'Feature',
|
|
56
60
|
properties: {
|
|
57
|
-
shape: tentativeFeature.properties.shape
|
|
61
|
+
shape: tentativeFeature.properties.shape
|
|
58
62
|
},
|
|
59
63
|
geometry: {
|
|
60
64
|
type: 'Polygon',
|
|
61
|
-
coordinates: tentativeFeature.geometry.coordinates
|
|
62
|
-
}
|
|
65
|
+
coordinates: tentativeFeature.geometry.coordinates
|
|
66
|
+
}
|
|
63
67
|
};
|
|
64
68
|
const editAction = this.getAddFeatureOrBooleanPolygonAction(feature, props);
|
|
65
69
|
|
|
@@ -72,12 +76,12 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
|
|
75
|
-
const {
|
|
79
|
+
const {lastPointerMoveEvent, modeConfig} = props;
|
|
76
80
|
const clickSequence = this.getClickSequence();
|
|
77
81
|
|
|
78
82
|
const guides: GuideFeatureCollection = {
|
|
79
83
|
type: 'FeatureCollection',
|
|
80
|
-
features: []
|
|
84
|
+
features: []
|
|
81
85
|
};
|
|
82
86
|
|
|
83
87
|
if (clickSequence.length === 0 || !lastPointerMoveEvent) {
|
|
@@ -94,9 +98,9 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
94
98
|
type: 'Feature',
|
|
95
99
|
properties: {
|
|
96
100
|
shape: polygon.properties && polygon.properties.shape,
|
|
97
|
-
guideType: 'tentative'
|
|
101
|
+
guideType: 'tentative'
|
|
98
102
|
},
|
|
99
|
-
geometry: polygon.geometry
|
|
103
|
+
geometry: polygon.geometry
|
|
100
104
|
});
|
|
101
105
|
}
|
|
102
106
|
|
|
@@ -117,7 +121,7 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
117
121
|
}
|
|
118
122
|
|
|
119
123
|
createTentativeFeature(props: ModeProps<FeatureCollection>): TentativeFeature {
|
|
120
|
-
const {
|
|
124
|
+
const {lastPointerMoveEvent} = props;
|
|
121
125
|
const clickSequence = this.getClickSequence();
|
|
122
126
|
|
|
123
127
|
const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
|
package/src/edit-modes/types.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Position, Point, Geometry, FeatureWithProps} from '../utils/geojson-types';
|
|
2
6
|
|
|
3
7
|
export type ScreenCoordinates = [number, number];
|
|
4
8
|
|
package/src/edit-modes/utils.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
/* eslint-disable no-shadow */
|
|
6
|
+
|
|
1
7
|
import destination from '@turf/destination';
|
|
2
8
|
import bearing from '@turf/bearing';
|
|
3
9
|
import pointToLineDistance from '@turf/point-to-line-distance';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
10
|
+
import {flattenEach} from '@turf/meta';
|
|
11
|
+
import {point, MultiLineString} from '@turf/helpers';
|
|
12
|
+
import {getCoords} from '@turf/invariant';
|
|
7
13
|
import WebMercatorViewport from 'viewport-mercator-project';
|
|
8
|
-
import {
|
|
14
|
+
import {Viewport, Pick, EditHandleFeature, EditHandleType} from './types';
|
|
9
15
|
import {
|
|
10
16
|
Geometry,
|
|
11
17
|
Position,
|
|
@@ -14,10 +20,10 @@ import {
|
|
|
14
20
|
Polygon,
|
|
15
21
|
FeatureOf,
|
|
16
22
|
FeatureWithProps,
|
|
17
|
-
AnyCoordinates
|
|
18
|
-
} from '../geojson-types';
|
|
23
|
+
AnyCoordinates
|
|
24
|
+
} from '../utils/geojson-types';
|
|
19
25
|
|
|
20
|
-
export type NearestPointType = FeatureWithProps<Point, {
|
|
26
|
+
export type NearestPointType = FeatureWithProps<Point, {dist: number; index: number}>;
|
|
21
27
|
|
|
22
28
|
export function toDeckColor(
|
|
23
29
|
color?: [number, number, number, number] | number,
|
|
@@ -78,7 +84,7 @@ export function generatePointsParallelToLinePoints(
|
|
|
78
84
|
): Position[] {
|
|
79
85
|
const lineString: LineString = {
|
|
80
86
|
type: 'LineString',
|
|
81
|
-
coordinates: [p1, p2]
|
|
87
|
+
coordinates: [p1, p2]
|
|
82
88
|
};
|
|
83
89
|
const pt = point(mapCoords);
|
|
84
90
|
const ddistance = pointToLineDistance(pt, lineString);
|
|
@@ -150,12 +156,12 @@ export function nearestPointOnProjectedLine(
|
|
|
150
156
|
minPointInfo = {
|
|
151
157
|
index,
|
|
152
158
|
x0: (B * (B * x - A * y) - A * C) / div,
|
|
153
|
-
y0: (A * (-B * x + A * y) - B * C) / div
|
|
159
|
+
y0: (A * (-B * x + A * y) - B * C) / div
|
|
154
160
|
};
|
|
155
161
|
}
|
|
156
162
|
});
|
|
157
|
-
// @ts-
|
|
158
|
-
const {
|
|
163
|
+
// @ts-expect-error TODO
|
|
164
|
+
const {index, x0, y0} = minPointInfo;
|
|
159
165
|
const [x1, y1, z1 = 0] = projectedCoords[index - 1];
|
|
160
166
|
const [x2, y2, z2 = 0] = projectedCoords[index];
|
|
161
167
|
|
|
@@ -169,14 +175,13 @@ export function nearestPointOnProjectedLine(
|
|
|
169
175
|
type: 'Feature',
|
|
170
176
|
geometry: {
|
|
171
177
|
type: 'Point',
|
|
172
|
-
|
|
173
|
-
coordinates: wmViewport.unproject([x0, y0, z0]),
|
|
178
|
+
coordinates: wmViewport.unproject([x0, y0, z0])
|
|
174
179
|
},
|
|
175
180
|
properties: {
|
|
176
181
|
// TODO: calculate the distance in proper units
|
|
177
182
|
dist: minDistance,
|
|
178
|
-
index: index - 1
|
|
179
|
-
}
|
|
183
|
+
index: index - 1
|
|
184
|
+
}
|
|
180
185
|
};
|
|
181
186
|
}
|
|
182
187
|
|
|
@@ -191,18 +196,18 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
191
196
|
mercator = new WebMercatorViewport(viewport);
|
|
192
197
|
}
|
|
193
198
|
let closestPoint: any = point([Infinity, Infinity], {
|
|
194
|
-
dist: Infinity
|
|
199
|
+
dist: Infinity
|
|
195
200
|
});
|
|
196
201
|
|
|
197
202
|
if (!lines.geometry?.coordinates.length || lines.geometry?.coordinates.length < 2) {
|
|
198
203
|
return closestPoint;
|
|
199
204
|
}
|
|
200
205
|
|
|
201
|
-
// @ts-
|
|
206
|
+
// @ts-expect-error TODO
|
|
202
207
|
// eslint-disable-next-line max-statements, complexity
|
|
203
208
|
flattenEach(lines, (line: any) => {
|
|
204
209
|
const coords: any = getCoords(line);
|
|
205
|
-
// @ts-
|
|
210
|
+
// @ts-expect-error TODO
|
|
206
211
|
const pointCoords: any = getCoords(inPoint);
|
|
207
212
|
|
|
208
213
|
let minDist;
|
|
@@ -293,7 +298,7 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
293
298
|
}
|
|
294
299
|
|
|
295
300
|
// index needs to be -1 because we have to account for the shift from initial backscan
|
|
296
|
-
let snapPoint = {
|
|
301
|
+
let snapPoint = {x, y, idx: segmentIdx - 1, to, from};
|
|
297
302
|
|
|
298
303
|
if (mercator) {
|
|
299
304
|
const pixelToLatLong = mercator.unproject([snapPoint.x, snapPoint.y]);
|
|
@@ -302,13 +307,13 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
302
307
|
y: pixelToLatLong[1],
|
|
303
308
|
idx: segmentIdx - 1,
|
|
304
309
|
to,
|
|
305
|
-
from
|
|
310
|
+
from
|
|
306
311
|
};
|
|
307
312
|
}
|
|
308
313
|
|
|
309
314
|
closestPoint = point([snapPoint.x, snapPoint.y], {
|
|
310
315
|
dist: Math.abs(snapPoint.from - snapPoint.to),
|
|
311
|
-
index: snapPoint.idx
|
|
316
|
+
index: snapPoint.idx
|
|
312
317
|
});
|
|
313
318
|
});
|
|
314
319
|
|
|
@@ -338,7 +343,7 @@ export function getPickedExistingEditHandle(
|
|
|
338
343
|
): EditHandleFeature | null | undefined {
|
|
339
344
|
const handles = getPickedEditHandles(picks);
|
|
340
345
|
return handles.find(
|
|
341
|
-
({
|
|
346
|
+
({properties}) => properties.featureIndex >= 0 && properties.editHandleType === 'existing'
|
|
342
347
|
);
|
|
343
348
|
}
|
|
344
349
|
|
|
@@ -347,7 +352,7 @@ export function getPickedIntermediateEditHandle(
|
|
|
347
352
|
): EditHandleFeature | null | undefined {
|
|
348
353
|
const handles = getPickedEditHandles(picks);
|
|
349
354
|
return handles.find(
|
|
350
|
-
({
|
|
355
|
+
({properties}) => properties.featureIndex >= 0 && properties.editHandleType === 'intermediate'
|
|
351
356
|
);
|
|
352
357
|
}
|
|
353
358
|
|
|
@@ -379,13 +384,13 @@ export function getEditHandlesForGeometry(
|
|
|
379
384
|
guideType: 'editHandle',
|
|
380
385
|
editHandleType,
|
|
381
386
|
positionIndexes: [],
|
|
382
|
-
featureIndex
|
|
387
|
+
featureIndex
|
|
383
388
|
},
|
|
384
389
|
geometry: {
|
|
385
390
|
type: 'Point',
|
|
386
|
-
coordinates: geometry.coordinates
|
|
387
|
-
}
|
|
388
|
-
}
|
|
391
|
+
coordinates: geometry.coordinates
|
|
392
|
+
}
|
|
393
|
+
}
|
|
389
394
|
];
|
|
390
395
|
break;
|
|
391
396
|
case 'MultiPoint':
|
|
@@ -449,12 +454,12 @@ function getEditHandlesForCoordinates(
|
|
|
449
454
|
guideType: 'editHandle',
|
|
450
455
|
positionIndexes: [...positionIndexPrefix, i],
|
|
451
456
|
featureIndex,
|
|
452
|
-
editHandleType
|
|
457
|
+
editHandleType
|
|
453
458
|
},
|
|
454
459
|
geometry: {
|
|
455
460
|
type: 'Point',
|
|
456
|
-
coordinates: position
|
|
457
|
-
}
|
|
461
|
+
coordinates: position
|
|
462
|
+
}
|
|
458
463
|
});
|
|
459
464
|
}
|
|
460
465
|
return editHandles;
|