@deck.gl-community/editable-layers 9.2.0-beta.4 → 9.2.0-beta.6

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.
@@ -1,13 +1,17 @@
1
1
  import { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection, TentativeFeature, DoubleClickEvent } from "./types.js";
2
- import { FeatureCollection } from "../utils/geojson-types.js";
2
+ import { Position, FeatureCollection } from "../utils/geojson-types.js";
3
3
  import { GeoJsonEditMode } from "./geojson-edit-mode.js";
4
4
  export declare class DrawPolygonMode extends GeoJsonEditMode {
5
+ holeSequence: Position[];
6
+ isDrawingHole: boolean;
5
7
  createTentativeFeature(props: ModeProps<FeatureCollection>): TentativeFeature;
6
8
  getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection;
7
- finishDrawing(props: ModeProps<FeatureCollection>): void;
8
9
  handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>): void;
9
- handleDoubleClick(event: DoubleClickEvent, props: ModeProps<FeatureCollection>): void;
10
+ handleDoubleClick(_event: DoubleClickEvent, props: ModeProps<FeatureCollection>): void;
10
11
  handleKeyUp(event: KeyboardEvent, props: ModeProps<FeatureCollection>): void;
11
12
  handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void;
13
+ finishDrawing(props: ModeProps<FeatureCollection>): void;
14
+ private tryAddHoleToExistingPolygon;
15
+ private validateAndCreateHole;
12
16
  }
13
17
  //# sourceMappingURL=draw-polygon-mode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"draw-polygon-mode.d.ts","sourceRoot":"","sources":["../../src/edit-modes/draw-polygon-mode.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,sBAAsB,EACtB,gBAAgB,EAEhB,gBAAgB,EACjB,mBAAgB;AACjB,OAAO,EAAU,iBAAiB,EAAC,kCAA+B;AAElE,OAAO,EAAC,eAAe,EAAC,+BAA4B;AAEpD,qBAAa,eAAgB,SAAQ,eAAe;IAClD,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,gBAAgB;IAkC7E,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,sBAAsB;IAgCtE,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAiBjD,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IA+ClE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAI9E,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAcrE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;CAI/E"}
1
+ {"version":3,"file":"draw-polygon-mode.d.ts","sourceRoot":"","sources":["../../src/edit-modes/draw-polygon-mode.ts"],"names":[],"mappings":"AASA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,sBAAsB,EACtB,gBAAgB,EAEhB,gBAAgB,EACjB,mBAAgB;AACjB,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAW,kCAA+B;AAE7E,OAAO,EAAC,eAAe,EAAC,+BAA4B;AAIpD,qBAAa,eAAgB,SAAQ,eAAe;IAElD,YAAY,EAAE,QAAQ,EAAE,CAAM;IAC9B,aAAa,UAAS;IAEtB,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,gBAAgB;IAuC7E,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,sBAAsB;IAgCtE,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IA2ElE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAK/E,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAiBrE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAM9E,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC;IAyDjD,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,qBAAqB;CAuE9B"}
@@ -2,113 +2,130 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  import lineIntersect from '@turf/line-intersect';
5
- import { lineString as turfLineString } from '@turf/helpers';
5
+ import { polygon as turfPolygon } from '@turf/helpers';
6
+ import booleanWithin from "@turf/boolean-within";
6
7
  import { getPickedEditHandle } from "./utils.js";
7
8
  import { GeoJsonEditMode } from "./geojson-edit-mode.js";
9
+ import { ImmutableFeatureCollection } from "./immutable-feature-collection.js";
8
10
  export class DrawPolygonMode extends GeoJsonEditMode {
11
+ holeSequence = [];
12
+ isDrawingHole = false;
9
13
  createTentativeFeature(props) {
10
14
  const { lastPointerMoveEvent } = props;
11
15
  const clickSequence = this.getClickSequence();
12
- const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
13
- let tentativeFeature;
14
- if (clickSequence.length === 1 || clickSequence.length === 2) {
15
- tentativeFeature = {
16
- type: 'Feature',
17
- properties: {
18
- guideType: 'tentative'
19
- },
20
- geometry: {
21
- type: 'LineString',
22
- coordinates: [...clickSequence, ...lastCoords]
23
- }
16
+ const holeSequence = this.holeSequence;
17
+ const lastCoords = lastPointerMoveEvent
18
+ ? [lastPointerMoveEvent.mapCoords]
19
+ : [];
20
+ let geometry;
21
+ if (this.isDrawingHole && holeSequence.length > 1) {
22
+ geometry = {
23
+ type: "Polygon",
24
+ coordinates: [
25
+ [...clickSequence, clickSequence[0]],
26
+ [...holeSequence, ...lastCoords, holeSequence[0]],
27
+ ],
24
28
  };
25
29
  }
26
30
  else if (clickSequence.length > 2) {
27
- tentativeFeature = {
28
- type: 'Feature',
29
- properties: {
30
- guideType: 'tentative'
31
- },
32
- geometry: {
33
- type: 'Polygon',
34
- coordinates: [[...clickSequence, ...lastCoords, clickSequence[0]]]
35
- }
31
+ geometry = {
32
+ type: "Polygon",
33
+ coordinates: [[...clickSequence, ...lastCoords, clickSequence[0]]],
34
+ };
35
+ }
36
+ else {
37
+ geometry = {
38
+ type: "LineString",
39
+ coordinates: [...clickSequence, ...lastCoords],
36
40
  };
37
41
  }
38
- return tentativeFeature;
42
+ return {
43
+ type: "Feature",
44
+ properties: {
45
+ guideType: "tentative",
46
+ },
47
+ geometry,
48
+ };
39
49
  }
40
50
  getGuides(props) {
41
- const clickSequence = this.getClickSequence();
42
51
  const guides = {
43
- type: 'FeatureCollection',
44
- features: []
52
+ type: "FeatureCollection",
53
+ features: [],
45
54
  };
46
- const tentativeFeature = this.createTentativeFeature(props);
47
- if (tentativeFeature) {
48
- guides.features.push(tentativeFeature);
49
- }
50
- const editHandles = clickSequence.map((clickedCoord, index) => ({
51
- type: 'Feature',
55
+ const tentative = this.createTentativeFeature(props);
56
+ if (tentative)
57
+ guides.features.push(tentative);
58
+ const sequence = this.isDrawingHole
59
+ ? this.holeSequence
60
+ : this.getClickSequence();
61
+ const handles = sequence.map((coord, index) => ({
62
+ type: "Feature",
52
63
  properties: {
53
- guideType: 'editHandle',
54
- editHandleType: 'existing',
64
+ guideType: "editHandle",
65
+ editHandleType: "existing",
55
66
  featureIndex: -1,
56
- positionIndexes: [index]
67
+ positionIndexes: [index],
57
68
  },
58
69
  geometry: {
59
- type: 'Point',
60
- coordinates: clickedCoord
61
- }
70
+ type: "Point",
71
+ coordinates: coord,
72
+ },
62
73
  }));
63
- guides.features.push(...editHandles);
74
+ guides.features.push(...handles);
64
75
  return guides;
65
76
  }
66
- finishDrawing(props) {
67
- const clickSequence = this.getClickSequence();
68
- if (clickSequence.length > 2) {
69
- const polygonToAdd = {
70
- type: 'Polygon',
71
- coordinates: [[...clickSequence, clickSequence[0]]]
72
- };
73
- this.resetClickSequence();
74
- const editAction = this.getAddFeatureOrBooleanPolygonAction(polygonToAdd, props);
75
- if (editAction) {
76
- props.onEdit(editAction);
77
- }
78
- }
79
- }
80
- // eslint-disable-next-line complexity
77
+ // eslint-disable-next-line complexity, max-statements
81
78
  handleClick(event, props) {
82
79
  const { picks } = event;
83
80
  const clickedEditHandle = getPickedEditHandle(picks);
84
81
  const clickSequence = this.getClickSequence();
85
- let overlappingLines = false;
86
- if (clickSequence.length > 2 && props.modeConfig && props.modeConfig.preventOverlappingLines) {
87
- const currentLine = turfLineString([
88
- clickSequence[clickSequence.length - 1],
89
- event.mapCoords
90
- ]);
91
- const otherLines = turfLineString([...clickSequence.slice(0, clickSequence.length - 1)]);
92
- const intersectingPoints = lineIntersect(currentLine, otherLines);
93
- if (intersectingPoints.features.length > 0) {
94
- overlappingLines = true;
95
- }
96
- }
97
- let positionAdded = false;
98
- if (!clickedEditHandle && !overlappingLines) {
99
- // Don't add another point right next to an existing one
100
- this.addClickSequence(event);
101
- positionAdded = true;
102
- }
103
- if (clickSequence.length > 2 &&
82
+ const coords = event.mapCoords;
83
+ // Check if they clicked on an edit handle to complete the polygon
84
+ if (!this.isDrawingHole &&
85
+ clickSequence.length > 2 &&
104
86
  clickedEditHandle &&
105
87
  Array.isArray(clickedEditHandle.properties.positionIndexes) &&
106
88
  (clickedEditHandle.properties.positionIndexes[0] === 0 ||
107
89
  clickedEditHandle.properties.positionIndexes[0] === clickSequence.length - 1)) {
108
- // They clicked the first or last point (or double-clicked), so complete the polygon
90
+ // They clicked the first or last point, so complete the polygon
109
91
  this.finishDrawing(props);
92
+ return;
93
+ }
94
+ // Check if they clicked near the first point to complete the polygon
95
+ if (!this.isDrawingHole && clickSequence.length > 2) {
96
+ if (isNearFirstPoint(coords, clickSequence[0])) {
97
+ this.finishDrawing(props);
98
+ this.resetClickSequence();
99
+ return;
100
+ }
101
+ }
102
+ if (this.isDrawingHole) {
103
+ const current = this.holeSequence;
104
+ current.push(coords);
105
+ if (current.length > 2) {
106
+ const poly = {
107
+ type: "Polygon",
108
+ coordinates: [
109
+ [...clickSequence, clickSequence[0]],
110
+ [...current, current[0]],
111
+ ],
112
+ };
113
+ this.resetClickSequence();
114
+ this.holeSequence = [];
115
+ this.isDrawingHole = false;
116
+ const editAction = this.getAddFeatureOrBooleanPolygonAction(poly, props);
117
+ if (editAction)
118
+ props.onEdit(editAction);
119
+ }
120
+ return;
121
+ }
122
+ // Add the click if we didn't click on a handle
123
+ let positionAdded = false;
124
+ if (!clickedEditHandle) {
125
+ this.addClickSequence(event);
126
+ positionAdded = true;
110
127
  }
111
- else if (positionAdded) {
128
+ if (positionAdded) {
112
129
  // new tentative point
113
130
  props.onEdit({
114
131
  // data is the same
@@ -120,20 +137,23 @@ export class DrawPolygonMode extends GeoJsonEditMode {
120
137
  });
121
138
  }
122
139
  }
123
- handleDoubleClick(event, props) {
140
+ handleDoubleClick(_event, props) {
124
141
  this.finishDrawing(props);
142
+ this.resetClickSequence();
125
143
  }
126
144
  handleKeyUp(event, props) {
127
- if (event.key === 'Enter') {
145
+ if (event.key === "Enter") {
128
146
  this.finishDrawing(props);
147
+ this.resetClickSequence();
129
148
  }
130
- else if (event.key === 'Escape') {
149
+ else if (event.key === "Escape") {
131
150
  this.resetClickSequence();
151
+ this.holeSequence = [];
152
+ this.isDrawingHole = false;
132
153
  props.onEdit({
133
- // Because the new drawing feature is dropped, so the data will keep as the same.
134
154
  updatedData: props.data,
135
- editType: 'cancelFeature',
136
- editContext: {}
155
+ editType: "cancelFeature",
156
+ editContext: {},
137
157
  });
138
158
  }
139
159
  }
@@ -141,5 +161,130 @@ export class DrawPolygonMode extends GeoJsonEditMode {
141
161
  props.onUpdateCursor('cell');
142
162
  super.handlePointerMove(event, props);
143
163
  }
164
+ // eslint-disable-next-line max-statements, complexity
165
+ finishDrawing(props) {
166
+ const clickSequence = this.getClickSequence();
167
+ const polygon = [...clickSequence, clickSequence[0]];
168
+ const newPolygon = turfPolygon([polygon]);
169
+ const canAddHole = canAddHoleToPolygon(props);
170
+ const canOverlap = canPolygonOverlap(props);
171
+ // Check if the polygon intersects itself (excluding shared start/end point)
172
+ if (!canOverlap) {
173
+ const overlapping = lineIntersect(newPolygon, newPolygon).features.filter((intersection) => !newPolygon.geometry.coordinates[0].some((coord) => coord[0] === intersection.geometry.coordinates[0] &&
174
+ coord[1] === intersection.geometry.coordinates[1]));
175
+ if (overlapping.length > 0) {
176
+ // ❌ Invalid polygon: overlaps
177
+ props.onEdit({
178
+ updatedData: props.data,
179
+ editType: "invalidPolygon",
180
+ editContext: { reason: "overlaps" },
181
+ });
182
+ this.resetClickSequence();
183
+ return;
184
+ }
185
+ }
186
+ if (canAddHole) {
187
+ const holeResult = this.tryAddHoleToExistingPolygon(newPolygon, polygon, props);
188
+ if (holeResult.handled) {
189
+ this.resetClickSequence();
190
+ return;
191
+ }
192
+ }
193
+ // If no valid hole was found, add the polygon as a new feature
194
+ const editAction = this.getAddFeatureOrBooleanPolygonAction({
195
+ type: "Polygon",
196
+ coordinates: [[...this.getClickSequence(), this.getClickSequence()[0]]],
197
+ }, props);
198
+ if (editAction)
199
+ props.onEdit(editAction);
200
+ this.resetClickSequence();
201
+ return;
202
+ }
203
+ tryAddHoleToExistingPolygon(newPolygon, polygon, props) {
204
+ for (const [featureIndex, feature] of props.data.features.entries()) {
205
+ if (feature.geometry.type === "Polygon") {
206
+ const result = this.validateAndCreateHole(feature, featureIndex, newPolygon, polygon, props);
207
+ if (result.handled) {
208
+ return result;
209
+ }
210
+ }
211
+ }
212
+ return { handled: false };
213
+ }
214
+ validateAndCreateHole(feature, featureIndex, newPolygon, polygon, props) {
215
+ const outer = turfPolygon(feature.geometry.coordinates);
216
+ // Check existing holes for conflicts
217
+ for (let i = 1; i < feature.geometry.coordinates.length; i++) {
218
+ const hole = turfPolygon([feature.geometry.coordinates[i]]);
219
+ const intersection = lineIntersect(hole, newPolygon);
220
+ if (intersection.features.length > 0) {
221
+ props.onEdit({
222
+ updatedData: props.data,
223
+ editType: "invalidHole",
224
+ editContext: { reason: "intersects-existing-hole" },
225
+ });
226
+ return { handled: true };
227
+ }
228
+ if (booleanWithin(hole, newPolygon) || booleanWithin(newPolygon, hole)) {
229
+ props.onEdit({
230
+ updatedData: props.data,
231
+ editType: "invalidHole",
232
+ editContext: { reason: "contains-or-contained-by-existing-hole" },
233
+ });
234
+ return { handled: true };
235
+ }
236
+ }
237
+ // Check outer polygon conflicts
238
+ const intersectionWithOuter = lineIntersect(outer, newPolygon);
239
+ if (intersectionWithOuter.features.length > 0) {
240
+ props.onEdit({
241
+ updatedData: props.data,
242
+ editType: "invalidPolygon",
243
+ editContext: { reason: "intersects-existing-polygon" },
244
+ });
245
+ return { handled: true };
246
+ }
247
+ if (booleanWithin(outer, newPolygon)) {
248
+ props.onEdit({
249
+ updatedData: props.data,
250
+ editType: "invalidPolygon",
251
+ editContext: { reason: "contains-existing-polygon" },
252
+ });
253
+ return { handled: true };
254
+ }
255
+ // Check if new polygon is within outer polygon (valid hole)
256
+ if (booleanWithin(newPolygon, outer)) {
257
+ const updatedData = new ImmutableFeatureCollection(props.data)
258
+ .replaceGeometry(featureIndex, {
259
+ ...feature.geometry,
260
+ coordinates: [...feature.geometry.coordinates, polygon],
261
+ })
262
+ .getObject();
263
+ props.onEdit({
264
+ updatedData,
265
+ editType: "addHole",
266
+ editContext: { hole: newPolygon.geometry },
267
+ });
268
+ return { handled: true };
269
+ }
270
+ return { handled: false };
271
+ }
272
+ }
273
+ // Helper function to check if a point is near the first point in the sequence
274
+ function isNearFirstPoint(click, first, threshold = 1e-4) {
275
+ const dx = click[0] - first[0];
276
+ const dy = click[1] - first[1];
277
+ return dx * dx + dy * dy < threshold * threshold;
278
+ }
279
+ // Helper function to determine if a hole can be added to a polygon
280
+ function canAddHoleToPolygon(props) {
281
+ // For simplicity, always return true in this example.
282
+ // Implement your own logic based on application requirements.
283
+ return props.modeConfig?.allowHoles ?? false;
284
+ }
285
+ // Helper function to determine if a polygon can intersect itself
286
+ function canPolygonOverlap(props) {
287
+ // Return the value of allowSelfIntersection (defaults to false for safety)
288
+ return props.modeConfig?.allowSelfIntersection ?? false;
144
289
  }
145
290
  //# sourceMappingURL=draw-polygon-mode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"draw-polygon-mode.js","sourceRoot":"","sources":["../../src/edit-modes/draw-polygon-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"draw-polygon-mode.js","sourceRoot":"","sources":["../../src/edit-modes/draw-polygon-mode.ts"],"names":[],"mappings":"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"}