@deck.gl-community/editable-layers 9.3.0-beta.2 → 9.3.1
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/dist/edit-modes/coordinate-system.d.ts +94 -0
- package/dist/edit-modes/coordinate-system.d.ts.map +1 -0
- package/dist/edit-modes/coordinate-system.js +105 -0
- package/dist/edit-modes/coordinate-system.js.map +1 -0
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts.map +1 -1
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts.map +1 -1
- package/dist/edit-modes/draw-line-string-mode.d.ts +5 -4
- package/dist/edit-modes/draw-line-string-mode.d.ts.map +1 -1
- package/dist/edit-modes/draw-line-string-mode.js +15 -9
- package/dist/edit-modes/draw-line-string-mode.js.map +1 -1
- package/dist/edit-modes/geojson-edit-mode.d.ts +9 -9
- package/dist/edit-modes/geojson-edit-mode.d.ts.map +1 -1
- package/dist/edit-modes/geojson-edit-mode.js +9 -9
- package/dist/edit-modes/geojson-edit-mode.js.map +1 -1
- package/dist/edit-modes/measure-angle-mode.d.ts +6 -1
- package/dist/edit-modes/measure-angle-mode.d.ts.map +1 -1
- package/dist/edit-modes/measure-angle-mode.js.map +1 -1
- package/dist/edit-modes/measure-distance-mode.d.ts +2 -1
- package/dist/edit-modes/measure-distance-mode.d.ts.map +1 -1
- package/dist/edit-modes/measure-distance-mode.js +12 -10
- package/dist/edit-modes/measure-distance-mode.js.map +1 -1
- package/dist/edit-modes/modify-mode.d.ts +2 -1
- package/dist/edit-modes/modify-mode.d.ts.map +1 -1
- package/dist/edit-modes/modify-mode.js +4 -4
- package/dist/edit-modes/modify-mode.js.map +1 -1
- package/dist/edit-modes/translate-mode.d.ts.map +1 -1
- package/dist/edit-modes/translate-mode.js +5 -8
- package/dist/edit-modes/translate-mode.js.map +1 -1
- package/dist/edit-modes/types.d.ts +7 -0
- package/dist/edit-modes/types.d.ts.map +1 -1
- package/dist/edit-modes/utils.d.ts +5 -3
- package/dist/edit-modes/utils.d.ts.map +1 -1
- package/dist/edit-modes/utils.js +41 -43
- package/dist/edit-modes/utils.js.map +1 -1
- package/dist/editable-layers/editable-geojson-layer.d.ts.map +1 -1
- package/dist/editable-layers/editable-geojson-layer.js +5 -0
- package/dist/editable-layers/editable-geojson-layer.js.map +1 -1
- package/dist/index.cjs +224 -152
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/memoize.d.ts +1 -1
- package/dist/utils/memoize.d.ts.map +1 -1
- package/dist/utils/memoize.js +8 -2
- package/dist/utils/memoize.js.map +1 -1
- package/dist/utils/translate-from-center.d.ts +2 -1
- package/dist/utils/translate-from-center.d.ts.map +1 -1
- package/dist/utils/translate-from-center.js +7 -10
- package/dist/utils/translate-from-center.js.map +1 -1
- package/package.json +2 -2
- package/src/edit-modes/coordinate-system.ts +164 -0
- package/src/edit-modes/draw-line-string-mode.ts +25 -12
- package/src/edit-modes/geojson-edit-mode.ts +12 -11
- package/src/edit-modes/measure-angle-mode.ts +1 -1
- package/src/edit-modes/measure-distance-mode.ts +13 -11
- package/src/edit-modes/modify-mode.ts +7 -4
- package/src/edit-modes/translate-mode.ts +5 -8
- package/src/edit-modes/types.ts +10 -0
- package/src/edit-modes/utils.ts +85 -51
- package/src/editable-layers/editable-geojson-layer.ts +5 -0
- package/src/index.ts +9 -0
- package/src/utils/memoize.ts +10 -4
- package/src/utils/translate-from-center.ts +13 -15
package/dist/index.cjs
CHANGED
|
@@ -34,6 +34,7 @@ var __publicField = (obj, key, value) => {
|
|
|
34
34
|
// dist/index.js
|
|
35
35
|
var dist_exports = {};
|
|
36
36
|
__export(dist_exports, {
|
|
37
|
+
CartesianCoordinateSystem: () => CartesianCoordinateSystem,
|
|
37
38
|
CompositeMode: () => CompositeMode,
|
|
38
39
|
DeleteMode: () => DeleteMode,
|
|
39
40
|
Draw90DegreePolygonMode: () => Draw90DegreePolygonMode,
|
|
@@ -59,6 +60,7 @@ __export(dist_exports, {
|
|
|
59
60
|
ElevationMode: () => ElevationMode,
|
|
60
61
|
ExtendLineStringMode: () => ExtendLineStringMode,
|
|
61
62
|
ExtrudeMode: () => ExtrudeMode,
|
|
63
|
+
GeoCoordinateSystem: () => GeoCoordinateSystem,
|
|
62
64
|
GeoJsonEditMode: () => GeoJsonEditMode,
|
|
63
65
|
ImmutableFeatureCollection: () => ImmutableFeatureCollection,
|
|
64
66
|
JunctionScatterplotLayer: () => JunctionScatterplotLayer,
|
|
@@ -76,7 +78,11 @@ __export(dist_exports, {
|
|
|
76
78
|
TranslateMode: () => TranslateMode,
|
|
77
79
|
ViewMode: () => ViewMode,
|
|
78
80
|
_memoize: () => memoize,
|
|
81
|
+
cartesianCoordinateSystem: () => cartesianCoordinateSystem,
|
|
82
|
+
fromDeckCoordinateSystem: () => fromDeckCoordinateSystem,
|
|
83
|
+
geoCoordinateSystem: () => geoCoordinateSystem,
|
|
79
84
|
getEditHandlesForGeometry: () => getEditHandlesForGeometry,
|
|
85
|
+
getEditModeCoordinateSystem: () => getEditModeCoordinateSystem,
|
|
80
86
|
getPickedEditHandle: () => getPickedEditHandle,
|
|
81
87
|
toDeckColor: () => toDeckColor,
|
|
82
88
|
utils: () => utils_exports
|
|
@@ -155,9 +161,9 @@ function nearestPointOnProjectedLine(line, inPoint, viewport) {
|
|
|
155
161
|
const B = x22 - x12;
|
|
156
162
|
const C = x12 * y22 - x22 * y12;
|
|
157
163
|
const div = A * A + B * B;
|
|
158
|
-
const
|
|
159
|
-
if (
|
|
160
|
-
minDistance =
|
|
164
|
+
const distance6 = Math.abs(A * x + B * y + C) / Math.sqrt(div);
|
|
165
|
+
if (distance6 < minDistance) {
|
|
166
|
+
minDistance = distance6;
|
|
161
167
|
minPointInfo = {
|
|
162
168
|
index: index2,
|
|
163
169
|
x0: (B * (B * x - A * y) - A * C) / div,
|
|
@@ -196,19 +202,81 @@ function insertBefore(base, insertBeforeText, toInsert) {
|
|
|
196
202
|
// dist/editable-layers/editable-geojson-layer.js
|
|
197
203
|
var import_layers2 = require("@deck.gl/layers");
|
|
198
204
|
|
|
205
|
+
// dist/edit-modes/coordinate-system.js
|
|
206
|
+
var import_bearing2 = __toESM(require("@turf/bearing"), 1);
|
|
207
|
+
var import_distance = __toESM(require("@turf/distance"), 1);
|
|
208
|
+
var import_destination2 = __toESM(require("@turf/destination"), 1);
|
|
209
|
+
var import_midpoint = __toESM(require("@turf/midpoint"), 1);
|
|
210
|
+
var import_helpers2 = require("@turf/helpers");
|
|
211
|
+
var import_core = require("@deck.gl/core");
|
|
212
|
+
var GeoCoordinateSystem = class {
|
|
213
|
+
distance(a, b) {
|
|
214
|
+
return (0, import_distance.default)((0, import_helpers2.point)(a), (0, import_helpers2.point)(b));
|
|
215
|
+
}
|
|
216
|
+
bearing(a, b) {
|
|
217
|
+
return (0, import_bearing2.default)((0, import_helpers2.point)(a), (0, import_helpers2.point)(b));
|
|
218
|
+
}
|
|
219
|
+
destination(origin, distance6, bearing6) {
|
|
220
|
+
return (0, import_destination2.default)((0, import_helpers2.point)(origin), distance6, bearing6).geometry.coordinates;
|
|
221
|
+
}
|
|
222
|
+
midpoint(a, b) {
|
|
223
|
+
return (0, import_midpoint.default)((0, import_helpers2.point)(a), (0, import_helpers2.point)(b)).geometry.coordinates;
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
var CartesianCoordinateSystem = class {
|
|
227
|
+
distance(a, b) {
|
|
228
|
+
const dx = b[0] - a[0];
|
|
229
|
+
const dy = b[1] - a[1];
|
|
230
|
+
return Math.sqrt(dx * dx + dy * dy);
|
|
231
|
+
}
|
|
232
|
+
bearing(a, b) {
|
|
233
|
+
const dx = b[0] - a[0];
|
|
234
|
+
const dy = b[1] - a[1];
|
|
235
|
+
const angle = Math.atan2(dx, dy) * (180 / Math.PI);
|
|
236
|
+
return angle > 180 ? angle - 360 : angle <= -180 ? angle + 360 : angle;
|
|
237
|
+
}
|
|
238
|
+
destination(origin, distance6, bearing6) {
|
|
239
|
+
const bearingRad = bearing6 * (Math.PI / 180);
|
|
240
|
+
return [
|
|
241
|
+
origin[0] + distance6 * Math.sin(bearingRad),
|
|
242
|
+
origin[1] + distance6 * Math.cos(bearingRad)
|
|
243
|
+
];
|
|
244
|
+
}
|
|
245
|
+
midpoint(a, b) {
|
|
246
|
+
return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
var geoCoordinateSystem = new GeoCoordinateSystem();
|
|
250
|
+
var cartesianCoordinateSystem = new CartesianCoordinateSystem();
|
|
251
|
+
function getEditModeCoordinateSystem(coordinateSystem) {
|
|
252
|
+
return coordinateSystem ?? geoCoordinateSystem;
|
|
253
|
+
}
|
|
254
|
+
function fromDeckCoordinateSystem(deckCoordSystem) {
|
|
255
|
+
switch (deckCoordSystem) {
|
|
256
|
+
case import_core.COORDINATE_SYSTEM.CARTESIAN:
|
|
257
|
+
case import_core.COORDINATE_SYSTEM.METER_OFFSETS:
|
|
258
|
+
return cartesianCoordinateSystem;
|
|
259
|
+
case import_core.COORDINATE_SYSTEM.LNGLAT:
|
|
260
|
+
case import_core.COORDINATE_SYSTEM.LNGLAT_OFFSETS:
|
|
261
|
+
case import_core.COORDINATE_SYSTEM.DEFAULT:
|
|
262
|
+
default:
|
|
263
|
+
return geoCoordinateSystem;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
199
267
|
// dist/edit-modes/geojson-edit-mode.js
|
|
200
|
-
var
|
|
268
|
+
var import_helpers4 = require("@turf/helpers");
|
|
201
269
|
var import_union = __toESM(require("@turf/union"), 1);
|
|
202
270
|
var import_difference = __toESM(require("@turf/difference"), 1);
|
|
203
271
|
var import_intersect = __toESM(require("@turf/intersect"), 1);
|
|
204
272
|
var import_rewind = __toESM(require("@turf/rewind"), 1);
|
|
205
273
|
|
|
206
274
|
// dist/edit-modes/utils.js
|
|
207
|
-
var
|
|
208
|
-
var
|
|
209
|
-
var import_point_to_line_distance2 =
|
|
275
|
+
var import_destination3 = require("@turf/destination");
|
|
276
|
+
var import_bearing3 = require("@turf/bearing");
|
|
277
|
+
var import_point_to_line_distance2 = require("@turf/point-to-line-distance");
|
|
210
278
|
var import_meta = require("@turf/meta");
|
|
211
|
-
var
|
|
279
|
+
var import_helpers3 = require("@turf/helpers");
|
|
212
280
|
var import_invariant = require("@turf/invariant");
|
|
213
281
|
var import_web_mercator2 = require("@math.gl/web-mercator");
|
|
214
282
|
function recursivelyTraverseNestedArrays2(array, prefix, fn) {
|
|
@@ -228,13 +296,13 @@ function generatePointsParallelToLinePoints2(p1, p2, coords) {
|
|
|
228
296
|
type: "LineString",
|
|
229
297
|
coordinates: [p1, p2]
|
|
230
298
|
};
|
|
231
|
-
const pt = (0,
|
|
232
|
-
const ddistance = (0, import_point_to_line_distance2.
|
|
233
|
-
const lineBearing = (0,
|
|
299
|
+
const pt = (0, import_helpers3.point)(coords);
|
|
300
|
+
const ddistance = (0, import_point_to_line_distance2.pointToLineDistance)(pt, lineString3);
|
|
301
|
+
const lineBearing = (0, import_bearing3.bearing)(p1, p2);
|
|
234
302
|
const isPointToLeftOfLine = (coords[0] - p1[0]) * (p2[1] - p1[1]) - (coords[1] - p1[1]) * (p2[0] - p1[0]);
|
|
235
303
|
const orthogonalBearing = isPointToLeftOfLine < 0 ? lineBearing - 90 : lineBearing - 270;
|
|
236
|
-
const p3 = (0,
|
|
237
|
-
const p4 = (0,
|
|
304
|
+
const p3 = (0, import_destination3.destination)(p2, ddistance, orthogonalBearing);
|
|
305
|
+
const p4 = (0, import_destination3.destination)(p1, ddistance, orthogonalBearing);
|
|
238
306
|
return [p3.geometry.coordinates, p4.geometry.coordinates];
|
|
239
307
|
}
|
|
240
308
|
function distance2d2(x1, y1, x2, y2) {
|
|
@@ -245,13 +313,27 @@ function distance2d2(x1, y1, x2, y2) {
|
|
|
245
313
|
function mix2(a, b, ratio) {
|
|
246
314
|
return b * ratio + a * (1 - ratio);
|
|
247
315
|
}
|
|
248
|
-
function
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
316
|
+
function projectOrUnprojectPoints(inputPoints, coordinateSystem, project, wmViewport) {
|
|
317
|
+
if (coordinateSystem === void 0 || wmViewport === void 0)
|
|
318
|
+
return [...inputPoints];
|
|
319
|
+
else if (coordinateSystem instanceof CartesianCoordinateSystem)
|
|
320
|
+
return [...inputPoints];
|
|
321
|
+
return project === "PROJECT" ? wmViewport.project([...inputPoints]) : wmViewport.unproject([...inputPoints]);
|
|
322
|
+
}
|
|
323
|
+
function nearestPointOnProjectedLine2(line, inPoint, viewport, coordinateSystem) {
|
|
324
|
+
var _a;
|
|
253
325
|
let minDistance = Infinity;
|
|
254
|
-
|
|
326
|
+
const coordinates = (_a = line == null ? void 0 : line.geometry) == null ? void 0 : _a.coordinates;
|
|
327
|
+
if (!coordinates)
|
|
328
|
+
return {
|
|
329
|
+
type: "Feature",
|
|
330
|
+
geometry: { type: "Point", coordinates: [0, 0, 0] },
|
|
331
|
+
properties: { dist: minDistance, index: -1 }
|
|
332
|
+
};
|
|
333
|
+
const wmViewport = new import_web_mercator2.WebMercatorViewport(viewport);
|
|
334
|
+
const [x, y] = projectOrUnprojectPoints(inPoint.geometry.coordinates, coordinateSystem, "PROJECT", wmViewport);
|
|
335
|
+
const projectedCoords = coordinates.map(([px, py, pz = 0]) => projectOrUnprojectPoints([px, py, pz], coordinateSystem, "PROJECT", wmViewport));
|
|
336
|
+
let minPointInfo = { index: 0, x0: 0, y0: 0 };
|
|
255
337
|
projectedCoords.forEach(([x22, y22], index2) => {
|
|
256
338
|
if (index2 === 0) {
|
|
257
339
|
return;
|
|
@@ -261,9 +343,9 @@ function nearestPointOnProjectedLine2(line, inPoint, viewport) {
|
|
|
261
343
|
const B = x22 - x12;
|
|
262
344
|
const C = x12 * y22 - x22 * y12;
|
|
263
345
|
const div = A * A + B * B;
|
|
264
|
-
const
|
|
265
|
-
if (
|
|
266
|
-
minDistance =
|
|
346
|
+
const distance6 = Math.abs(A * x + B * y + C) / Math.sqrt(div);
|
|
347
|
+
if (distance6 < minDistance) {
|
|
348
|
+
minDistance = distance6;
|
|
267
349
|
minPointInfo = {
|
|
268
350
|
index: index2,
|
|
269
351
|
x0: (B * (B * x - A * y) - A * C) / div,
|
|
@@ -282,7 +364,7 @@ function nearestPointOnProjectedLine2(line, inPoint, viewport) {
|
|
|
282
364
|
type: "Feature",
|
|
283
365
|
geometry: {
|
|
284
366
|
type: "Point",
|
|
285
|
-
coordinates:
|
|
367
|
+
coordinates: projectOrUnprojectPoints([x0, y0, z0], coordinateSystem, "UNPROJECT", wmViewport)
|
|
286
368
|
},
|
|
287
369
|
properties: {
|
|
288
370
|
// TODO: calculate the distance in proper units
|
|
@@ -291,15 +373,10 @@ function nearestPointOnProjectedLine2(line, inPoint, viewport) {
|
|
|
291
373
|
}
|
|
292
374
|
};
|
|
293
375
|
}
|
|
294
|
-
function nearestPointOnLine(lines, inPoint, viewport) {
|
|
376
|
+
function nearestPointOnLine(lines, inPoint, viewport, coordinateSystem) {
|
|
295
377
|
var _a, _b;
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
mercator = new import_web_mercator2.WebMercatorViewport(viewport);
|
|
299
|
-
}
|
|
300
|
-
let closestPoint = (0, import_helpers2.point)([Infinity, Infinity], {
|
|
301
|
-
dist: Infinity
|
|
302
|
-
});
|
|
378
|
+
const wmViewport = viewport ? new import_web_mercator2.WebMercatorViewport(viewport) : void 0;
|
|
379
|
+
let closestPoint = (0, import_helpers3.point)([Infinity, Infinity], { dist: Infinity });
|
|
303
380
|
if (!((_a = lines.geometry) == null ? void 0 : _a.coordinates.length) || ((_b = lines.geometry) == null ? void 0 : _b.coordinates.length) < 2) {
|
|
304
381
|
return closestPoint;
|
|
305
382
|
}
|
|
@@ -314,15 +391,8 @@ function nearestPointOnLine(lines, inPoint, viewport) {
|
|
|
314
391
|
let segmentIdx;
|
|
315
392
|
let dist;
|
|
316
393
|
if (coords.length > 1 && pointCoords.length) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
if (mercator) {
|
|
320
|
-
lineCoordinates = coords.map((lineCoordinate) => mercator.project(lineCoordinate));
|
|
321
|
-
pointCoordinate = mercator.project(pointCoords);
|
|
322
|
-
} else {
|
|
323
|
-
lineCoordinates = coords;
|
|
324
|
-
pointCoordinate = pointCoords;
|
|
325
|
-
}
|
|
394
|
+
const pointCoordinate = projectOrUnprojectPoints(pointCoords, coordinateSystem, "PROJECT", wmViewport);
|
|
395
|
+
const lineCoordinates = coords.map(([px, py, pz = 0]) => projectOrUnprojectPoints([px, py, pz], coordinateSystem, "PROJECT", wmViewport));
|
|
326
396
|
for (let n = 1; n < lineCoordinates.length; n++) {
|
|
327
397
|
if (lineCoordinates[n][0] !== lineCoordinates[n - 1][0]) {
|
|
328
398
|
const slope = (lineCoordinates[n][1] - lineCoordinates[n - 1][1]) / (lineCoordinates[n][0] - lineCoordinates[n - 1][0]);
|
|
@@ -361,17 +431,15 @@ function nearestPointOnLine(lines, inPoint, viewport) {
|
|
|
361
431
|
y = lineCoordinates[segmentIdx - 1][1] - dy * to;
|
|
362
432
|
}
|
|
363
433
|
let snapPoint = { x, y, idx: segmentIdx - 1, to, from };
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
}
|
|
374
|
-
closestPoint = (0, import_helpers2.point)([snapPoint.x, snapPoint.y], {
|
|
434
|
+
const pixelToLatLong = projectOrUnprojectPoints([snapPoint.x, snapPoint.y], coordinateSystem, "UNPROJECT", wmViewport);
|
|
435
|
+
snapPoint = {
|
|
436
|
+
x: pixelToLatLong[0],
|
|
437
|
+
y: pixelToLatLong[1],
|
|
438
|
+
idx: segmentIdx - 1,
|
|
439
|
+
to,
|
|
440
|
+
from
|
|
441
|
+
};
|
|
442
|
+
closestPoint = (0, import_helpers3.point)([snapPoint.x, snapPoint.y], {
|
|
375
443
|
dist: Math.abs(snapPoint.from - snapPoint.to),
|
|
376
444
|
index: snapPoint.idx
|
|
377
445
|
});
|
|
@@ -782,10 +850,10 @@ var DEFAULT_GUIDES = {
|
|
|
782
850
|
var DEFAULT_TOOLTIPS = [];
|
|
783
851
|
var GeoJsonEditMode = class {
|
|
784
852
|
_clickSequence = [];
|
|
785
|
-
getGuides(
|
|
853
|
+
getGuides(_props) {
|
|
786
854
|
return DEFAULT_GUIDES;
|
|
787
855
|
}
|
|
788
|
-
getTooltips(
|
|
856
|
+
getTooltips(_props) {
|
|
789
857
|
return DEFAULT_TOOLTIPS;
|
|
790
858
|
}
|
|
791
859
|
getSelectedFeature(props) {
|
|
@@ -895,11 +963,11 @@ var GeoJsonEditMode = class {
|
|
|
895
963
|
};
|
|
896
964
|
let updatedGeometry;
|
|
897
965
|
if (modeConfig.booleanOperation === "union") {
|
|
898
|
-
updatedGeometry = (0, import_union.default)((0,
|
|
966
|
+
updatedGeometry = (0, import_union.default)((0, import_helpers4.featureCollection)([selectedFeature, feature]));
|
|
899
967
|
} else if (modeConfig.booleanOperation === "difference") {
|
|
900
|
-
updatedGeometry = (0, import_difference.default)((0,
|
|
968
|
+
updatedGeometry = (0, import_difference.default)((0, import_helpers4.featureCollection)([selectedFeature, feature]));
|
|
901
969
|
} else if (modeConfig.booleanOperation === "intersection") {
|
|
902
|
-
updatedGeometry = (0, import_intersect.default)((0,
|
|
970
|
+
updatedGeometry = (0, import_intersect.default)((0, import_helpers4.featureCollection)([selectedFeature, feature]));
|
|
903
971
|
} else {
|
|
904
972
|
console.warn(`Invalid booleanOperation ${modeConfig.booleanOperation}`);
|
|
905
973
|
return null;
|
|
@@ -921,14 +989,14 @@ var GeoJsonEditMode = class {
|
|
|
921
989
|
}
|
|
922
990
|
return this.getAddFeatureAction(featureOrGeometry, props.data, featureProperties);
|
|
923
991
|
}
|
|
924
|
-
createTentativeFeature(
|
|
992
|
+
createTentativeFeature(_props) {
|
|
925
993
|
return null;
|
|
926
994
|
}
|
|
927
|
-
handleClick(
|
|
995
|
+
handleClick(_event, _props) {
|
|
928
996
|
}
|
|
929
|
-
handleDoubleClick(
|
|
997
|
+
handleDoubleClick(_event, _props) {
|
|
930
998
|
}
|
|
931
|
-
handlePointerMove(
|
|
999
|
+
handlePointerMove(_event, props) {
|
|
932
1000
|
const tentativeFeature = this.createTentativeFeature(props);
|
|
933
1001
|
if (tentativeFeature) {
|
|
934
1002
|
props.onEdit({
|
|
@@ -940,11 +1008,11 @@ var GeoJsonEditMode = class {
|
|
|
940
1008
|
});
|
|
941
1009
|
}
|
|
942
1010
|
}
|
|
943
|
-
handleStartDragging(
|
|
1011
|
+
handleStartDragging(_event, _props) {
|
|
944
1012
|
}
|
|
945
|
-
handleStopDragging(
|
|
1013
|
+
handleStopDragging(_event, _props) {
|
|
946
1014
|
}
|
|
947
|
-
handleDragging(
|
|
1015
|
+
handleDragging(_event, _props) {
|
|
948
1016
|
}
|
|
949
1017
|
handleKeyUp(event, props) {
|
|
950
1018
|
if (event.key === "Escape") {
|
|
@@ -971,25 +1039,18 @@ var ViewMode = class extends GeoJsonEditMode {
|
|
|
971
1039
|
};
|
|
972
1040
|
|
|
973
1041
|
// dist/edit-modes/translate-mode.js
|
|
974
|
-
var import_bearing3 = __toESM(require("@turf/bearing"), 1);
|
|
975
|
-
var import_distance = __toESM(require("@turf/distance"), 1);
|
|
976
1042
|
var import_clone = __toESM(require("@turf/clone"), 1);
|
|
977
|
-
var import_helpers4 = require("@turf/helpers");
|
|
978
1043
|
var import_web_mercator3 = require("@math.gl/web-mercator");
|
|
979
1044
|
|
|
980
1045
|
// dist/utils/translate-from-center.js
|
|
981
1046
|
var import_center = __toESM(require("@turf/center"), 1);
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
function translateFromCenter(feature, distance7, direction) {
|
|
986
|
-
const initialCenterPoint = (0, import_center.default)(feature);
|
|
987
|
-
const movedCenterPoint = (0, import_rhumb_destination.default)(initialCenterPoint, distance7, direction);
|
|
1047
|
+
function translateFromCenter(feature, distance6, direction, coordinateSystem = geoCoordinateSystem) {
|
|
1048
|
+
const initialCenter = (0, import_center.default)(feature).geometry.coordinates;
|
|
1049
|
+
const movedCenter = coordinateSystem.destination(initialCenter, distance6, direction);
|
|
988
1050
|
const movedCoordinates = mapCoords(feature.geometry.coordinates, (coordinate) => {
|
|
989
|
-
const
|
|
990
|
-
const
|
|
991
|
-
|
|
992
|
-
return movedPosition;
|
|
1051
|
+
const dist = coordinateSystem.distance(initialCenter, coordinate);
|
|
1052
|
+
const dir = coordinateSystem.bearing(initialCenter, coordinate);
|
|
1053
|
+
return coordinateSystem.destination(movedCenter, dist, dir);
|
|
993
1054
|
});
|
|
994
1055
|
feature.geometry.coordinates = movedCoordinates;
|
|
995
1056
|
return feature;
|
|
@@ -1073,11 +1134,10 @@ var TranslateMode = class extends GeoJsonEditMode {
|
|
|
1073
1134
|
}
|
|
1074
1135
|
}
|
|
1075
1136
|
} else {
|
|
1076
|
-
const
|
|
1077
|
-
const
|
|
1078
|
-
const
|
|
1079
|
-
const
|
|
1080
|
-
const movedFeatures = this._geometryBeforeTranslate.features.map((feature) => translateFromCenter((0, import_clone.default)(feature), distanceMoved, direction));
|
|
1137
|
+
const coordinateSystem = getEditModeCoordinateSystem(props.coordinateSystem);
|
|
1138
|
+
const distanceMoved = coordinateSystem.distance(startDragPoint, currentPoint);
|
|
1139
|
+
const direction = coordinateSystem.bearing(startDragPoint, currentPoint);
|
|
1140
|
+
const movedFeatures = this._geometryBeforeTranslate.features.map((feature) => translateFromCenter((0, import_clone.default)(feature), distanceMoved, direction, coordinateSystem));
|
|
1081
1141
|
for (let i = 0; i < selectedIndexes.length; i++) {
|
|
1082
1142
|
const selectedIndex = selectedIndexes[i];
|
|
1083
1143
|
const movedFeature = movedFeatures[i];
|
|
@@ -1122,7 +1182,7 @@ var ModifyMode = class extends GeoJsonEditMode {
|
|
|
1122
1182
|
const referencePoint = (0, import_helpers5.point)(mapCoords2);
|
|
1123
1183
|
recursivelyTraverseNestedArrays2(featureAsPick.object.geometry.coordinates, [], (lineString3, prefix) => {
|
|
1124
1184
|
const lineStringFeature = (0, import_helpers5.lineString)(lineString3);
|
|
1125
|
-
const candidateIntermediatePoint = this.getNearestPoint(lineStringFeature, referencePoint, props.modeConfig && props.modeConfig.viewport);
|
|
1185
|
+
const candidateIntermediatePoint = this.getNearestPoint(lineStringFeature, referencePoint, props.modeConfig && props.modeConfig.viewport, props.coordinateSystem);
|
|
1126
1186
|
if (!intermediatePoint || candidateIntermediatePoint.properties.dist < intermediatePoint.properties.dist) {
|
|
1127
1187
|
intermediatePoint = candidateIntermediatePoint;
|
|
1128
1188
|
positionIndexPrefix = prefix;
|
|
@@ -1152,15 +1212,15 @@ var ModifyMode = class extends GeoJsonEditMode {
|
|
|
1152
1212
|
};
|
|
1153
1213
|
}
|
|
1154
1214
|
// turf.js does not support elevation for nearestPointOnLine
|
|
1155
|
-
getNearestPoint(line, inPoint, viewport) {
|
|
1215
|
+
getNearestPoint(line, inPoint, viewport, coordinateSystem) {
|
|
1156
1216
|
const { coordinates } = line.geometry;
|
|
1157
1217
|
if (coordinates.some((coord) => coord.length > 2)) {
|
|
1158
1218
|
if (viewport) {
|
|
1159
|
-
return nearestPointOnProjectedLine2(line, inPoint, viewport);
|
|
1219
|
+
return nearestPointOnProjectedLine2(line, inPoint, viewport, coordinateSystem);
|
|
1160
1220
|
}
|
|
1161
1221
|
console.log("Editing 3D point but modeConfig.viewport not provided. Falling back to 2D logic.");
|
|
1162
1222
|
}
|
|
1163
|
-
return nearestPointOnLine(line, inPoint, viewport);
|
|
1223
|
+
return nearestPointOnLine(line, inPoint, viewport, coordinateSystem);
|
|
1164
1224
|
}
|
|
1165
1225
|
handleClick(event, props) {
|
|
1166
1226
|
var _a, _b;
|
|
@@ -1588,7 +1648,7 @@ var import_line_intersect = __toESM(require("@turf/line-intersect"), 1);
|
|
|
1588
1648
|
var import_helpers8 = require("@turf/helpers");
|
|
1589
1649
|
var import_bearing6 = __toESM(require("@turf/bearing"), 1);
|
|
1590
1650
|
var import_distance4 = __toESM(require("@turf/distance"), 1);
|
|
1591
|
-
var
|
|
1651
|
+
var import_destination4 = __toESM(require("@turf/destination"), 1);
|
|
1592
1652
|
var import_polygon_to_line3 = __toESM(require("@turf/polygon-to-line"), 1);
|
|
1593
1653
|
var import_nearest_point_on_line = __toESM(require("@turf/nearest-point-on-line"), 1);
|
|
1594
1654
|
var SplitPolygonMode = class extends GeoJsonEditMode {
|
|
@@ -1615,7 +1675,7 @@ var SplitPolygonMode = class extends GeoJsonEditMode {
|
|
|
1615
1675
|
if (closestPoint) {
|
|
1616
1676
|
const lastBearing = (0, import_bearing6.default)(firstPoint, closestPoint);
|
|
1617
1677
|
const currentDistance = (0, import_distance4.default)(firstPoint, mapCoords2, { units: "meters" });
|
|
1618
|
-
return (0,
|
|
1678
|
+
return (0, import_destination4.default)(firstPoint, currentDistance, lastBearing, {
|
|
1619
1679
|
units: "meters"
|
|
1620
1680
|
}).geometry.coordinates;
|
|
1621
1681
|
}
|
|
@@ -1965,9 +2025,6 @@ var DrawPointMode = class extends GeoJsonEditMode {
|
|
|
1965
2025
|
}
|
|
1966
2026
|
};
|
|
1967
2027
|
|
|
1968
|
-
// dist/edit-modes/draw-line-string-mode.js
|
|
1969
|
-
var import_distance5 = __toESM(require("@turf/distance"), 1);
|
|
1970
|
-
|
|
1971
2028
|
// dist/utils/memoize.js
|
|
1972
2029
|
function isEqual(a, b) {
|
|
1973
2030
|
if (a === b) {
|
|
@@ -1988,9 +2045,14 @@ function isEqual(a, b) {
|
|
|
1988
2045
|
return false;
|
|
1989
2046
|
}
|
|
1990
2047
|
function memoize(compute) {
|
|
1991
|
-
let cachedArgs =
|
|
1992
|
-
let cachedResult;
|
|
2048
|
+
let cachedArgs = null;
|
|
2049
|
+
let cachedResult = null;
|
|
1993
2050
|
return (args) => {
|
|
2051
|
+
if (!cachedArgs) {
|
|
2052
|
+
cachedResult = compute(args);
|
|
2053
|
+
cachedArgs = args;
|
|
2054
|
+
return cachedResult;
|
|
2055
|
+
}
|
|
1994
2056
|
for (const key in args) {
|
|
1995
2057
|
if (!isEqual(args[key], cachedArgs[key])) {
|
|
1996
2058
|
cachedResult = compute(args);
|
|
@@ -2018,7 +2080,7 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2018
2080
|
}
|
|
2019
2081
|
const clickSequence = this.getClickSequence();
|
|
2020
2082
|
if (!clickedEditHandle) {
|
|
2021
|
-
this.calculateInfoDraw(clickSequence);
|
|
2083
|
+
this.calculateInfoDraw(clickSequence, props == null ? void 0 : props.coordinateSystem);
|
|
2022
2084
|
}
|
|
2023
2085
|
if (clickSequence.length > 1 && clickedEditHandle && Array.isArray(clickedEditHandle.properties.positionIndexes) && clickedEditHandle.properties.positionIndexes[0] === clickSequence.length - 1) {
|
|
2024
2086
|
this.dist = 0;
|
|
@@ -2034,7 +2096,7 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2034
2096
|
});
|
|
2035
2097
|
}
|
|
2036
2098
|
}
|
|
2037
|
-
handleDoubleClick(
|
|
2099
|
+
handleDoubleClick(_event, props) {
|
|
2038
2100
|
this.finishDrawing(props);
|
|
2039
2101
|
}
|
|
2040
2102
|
finishDrawing(props) {
|
|
@@ -2105,7 +2167,7 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2105
2167
|
guides.features.push(...editHandles);
|
|
2106
2168
|
return guides;
|
|
2107
2169
|
}
|
|
2108
|
-
handlePointerMove(
|
|
2170
|
+
handlePointerMove(_event, props) {
|
|
2109
2171
|
props.onUpdateCursor("cell");
|
|
2110
2172
|
}
|
|
2111
2173
|
/**
|
|
@@ -2116,14 +2178,16 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2116
2178
|
getTooltips(props) {
|
|
2117
2179
|
return this._getTooltips({
|
|
2118
2180
|
modeConfig: props.modeConfig,
|
|
2119
|
-
dist: this.dist
|
|
2181
|
+
dist: this.dist,
|
|
2182
|
+
coordinateSystem: props == null ? void 0 : props.coordinateSystem
|
|
2120
2183
|
});
|
|
2121
2184
|
}
|
|
2122
2185
|
// utility function
|
|
2123
|
-
calculateInfoDraw(clickSequence) {
|
|
2186
|
+
calculateInfoDraw(clickSequence, coordinateSystem = new GeoCoordinateSystem()) {
|
|
2124
2187
|
if (clickSequence.length > 1) {
|
|
2125
2188
|
this.position = clickSequence[clickSequence.length - 1];
|
|
2126
|
-
|
|
2189
|
+
const coordSys = getEditModeCoordinateSystem(coordinateSystem);
|
|
2190
|
+
this.dist += coordSys.distance(clickSequence[clickSequence.length - 2], clickSequence[clickSequence.length - 1]);
|
|
2127
2191
|
}
|
|
2128
2192
|
}
|
|
2129
2193
|
/**
|
|
@@ -2131,7 +2195,7 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2131
2195
|
* @param modeConfig
|
|
2132
2196
|
* @param dist
|
|
2133
2197
|
*/
|
|
2134
|
-
_getTooltips = memoize(({ modeConfig, dist }) => {
|
|
2198
|
+
_getTooltips = memoize(({ modeConfig, dist, coordinateSystem }) => {
|
|
2135
2199
|
let tooltips = [];
|
|
2136
2200
|
const { formatTooltip } = modeConfig || {};
|
|
2137
2201
|
let text;
|
|
@@ -2139,7 +2203,9 @@ var DrawLineStringMode = class extends GeoJsonEditMode {
|
|
|
2139
2203
|
if (formatTooltip) {
|
|
2140
2204
|
text = formatTooltip(dist);
|
|
2141
2205
|
} else {
|
|
2142
|
-
|
|
2206
|
+
const coordSys = coordinateSystem ? getEditModeCoordinateSystem(coordinateSystem) : new GeoCoordinateSystem();
|
|
2207
|
+
const labelUnits = coordSys instanceof GeoCoordinateSystem ? "kilometers" : "pixels";
|
|
2208
|
+
text = `Distance: ${parseFloat(dist).toFixed(2)} ${labelUnits}`;
|
|
2143
2209
|
}
|
|
2144
2210
|
tooltips = [
|
|
2145
2211
|
{
|
|
@@ -2509,15 +2575,15 @@ var DrawRectangleMode = class extends TwoClickPolygonMode {
|
|
|
2509
2575
|
|
|
2510
2576
|
// dist/edit-modes/draw-square-mode.js
|
|
2511
2577
|
var import_bbox_polygon4 = __toESM(require("@turf/bbox-polygon"), 1);
|
|
2512
|
-
var
|
|
2578
|
+
var import_distance5 = __toESM(require("@turf/distance"), 1);
|
|
2513
2579
|
var import_along = __toESM(require("@turf/along"), 1);
|
|
2514
2580
|
var import_helpers10 = require("@turf/helpers");
|
|
2515
2581
|
var DrawSquareMode = class extends TwoClickPolygonMode {
|
|
2516
2582
|
getTwoClickPolygon(coord1, coord2, modeConfig) {
|
|
2517
2583
|
const coord3 = [coord2[0], coord1[1]];
|
|
2518
2584
|
const coord4 = [coord1[0], coord2[1]];
|
|
2519
|
-
const distance1 = (0,
|
|
2520
|
-
const distance22 = (0,
|
|
2585
|
+
const distance1 = (0, import_distance5.default)((0, import_helpers10.point)(coord3), (0, import_helpers10.point)(coord1));
|
|
2586
|
+
const distance22 = (0, import_distance5.default)((0, import_helpers10.point)(coord4), (0, import_helpers10.point)(coord1));
|
|
2521
2587
|
const shortestDistance = distance1 <= distance22 ? distance1 : distance22;
|
|
2522
2588
|
const closestPoint = distance1 <= distance22 ? coord3 : coord4;
|
|
2523
2589
|
const line = (0, import_helpers10.lineString)([closestPoint, coord2]);
|
|
@@ -2545,15 +2611,15 @@ var DrawRectangleFromCenterMode = class extends TwoClickPolygonMode {
|
|
|
2545
2611
|
|
|
2546
2612
|
// dist/edit-modes/draw-square-from-center-mode.js
|
|
2547
2613
|
var import_bbox_polygon6 = __toESM(require("@turf/bbox-polygon"), 1);
|
|
2548
|
-
var
|
|
2614
|
+
var import_distance6 = __toESM(require("@turf/distance"), 1);
|
|
2549
2615
|
var import_along2 = __toESM(require("@turf/along"), 1);
|
|
2550
2616
|
var import_helpers11 = require("@turf/helpers");
|
|
2551
2617
|
var DrawSquareFromCenterMode = class extends TwoClickPolygonMode {
|
|
2552
2618
|
getTwoClickPolygon(coord1, coord2, modeConfig) {
|
|
2553
2619
|
const coord3 = [coord2[0], coord1[1]];
|
|
2554
2620
|
const coord4 = [coord1[0], coord2[1]];
|
|
2555
|
-
const distance1 = (0,
|
|
2556
|
-
const distance22 = (0,
|
|
2621
|
+
const distance1 = (0, import_distance6.default)((0, import_helpers11.point)(coord3), (0, import_helpers11.point)(coord1));
|
|
2622
|
+
const distance22 = (0, import_distance6.default)((0, import_helpers11.point)(coord4), (0, import_helpers11.point)(coord1));
|
|
2557
2623
|
const shortestDistance = distance1 <= distance22 ? distance1 : distance22;
|
|
2558
2624
|
const closestPoint = distance1 <= distance22 ? coord3 : coord4;
|
|
2559
2625
|
const line = (0, import_helpers11.lineString)([closestPoint, coord2]);
|
|
@@ -2570,7 +2636,7 @@ var DrawSquareFromCenterMode = class extends TwoClickPolygonMode {
|
|
|
2570
2636
|
|
|
2571
2637
|
// dist/edit-modes/draw-circle-from-center-mode.js
|
|
2572
2638
|
var import_circle = __toESM(require("@turf/circle"), 1);
|
|
2573
|
-
var
|
|
2639
|
+
var import_distance7 = __toESM(require("@turf/distance"), 1);
|
|
2574
2640
|
var import_area = __toESM(require("@turf/area"), 1);
|
|
2575
2641
|
var DrawCircleFromCenterMode = class extends TwoClickPolygonMode {
|
|
2576
2642
|
radius = null;
|
|
@@ -2584,7 +2650,7 @@ var DrawCircleFromCenterMode = class extends TwoClickPolygonMode {
|
|
|
2584
2650
|
console.warn("Minimum steps to draw a circle is 4 ");
|
|
2585
2651
|
options.steps = 4;
|
|
2586
2652
|
}
|
|
2587
|
-
this.radius = Math.max((0,
|
|
2653
|
+
this.radius = Math.max((0, import_distance7.default)(coord1, coord2), 1e-3);
|
|
2588
2654
|
const geometry = (0, import_circle.default)(coord1, this.radius, options);
|
|
2589
2655
|
geometry.properties = geometry.properties || {};
|
|
2590
2656
|
geometry.properties.shape = "Circle";
|
|
@@ -2638,7 +2704,7 @@ var DrawCircleFromCenterMode = class extends TwoClickPolygonMode {
|
|
|
2638
2704
|
|
|
2639
2705
|
// dist/edit-modes/draw-circle-by-diameter-mode.js
|
|
2640
2706
|
var import_circle2 = __toESM(require("@turf/circle"), 1);
|
|
2641
|
-
var
|
|
2707
|
+
var import_distance8 = __toESM(require("@turf/distance"), 1);
|
|
2642
2708
|
var import_area2 = __toESM(require("@turf/area"), 1);
|
|
2643
2709
|
var DrawCircleByDiameterMode = class extends TwoClickPolygonMode {
|
|
2644
2710
|
radius = null;
|
|
@@ -2653,8 +2719,8 @@ var DrawCircleByDiameterMode = class extends TwoClickPolygonMode {
|
|
|
2653
2719
|
options.steps = 4;
|
|
2654
2720
|
}
|
|
2655
2721
|
const centerCoordinates = getIntermediatePosition(coord1, coord2);
|
|
2656
|
-
this.radius = Math.max((0,
|
|
2657
|
-
this.diameter = Math.max((0,
|
|
2722
|
+
this.radius = Math.max((0, import_distance8.default)(coord1, centerCoordinates), 1e-3);
|
|
2723
|
+
this.diameter = Math.max((0, import_distance8.default)(coord1, coord2), 1e-3);
|
|
2658
2724
|
this.position = centerCoordinates;
|
|
2659
2725
|
const geometry = (0, import_circle2.default)(centerCoordinates, this.radius, options);
|
|
2660
2726
|
geometry.properties = geometry.properties || {};
|
|
@@ -2713,7 +2779,7 @@ var DrawCircleByDiameterMode = class extends TwoClickPolygonMode {
|
|
|
2713
2779
|
|
|
2714
2780
|
// dist/edit-modes/draw-ellipse-by-bounding-box-mode.js
|
|
2715
2781
|
var import_bbox_polygon7 = __toESM(require("@turf/bbox-polygon"), 1);
|
|
2716
|
-
var
|
|
2782
|
+
var import_distance9 = __toESM(require("@turf/distance"), 1);
|
|
2717
2783
|
var import_ellipse = __toESM(require("@turf/ellipse"), 1);
|
|
2718
2784
|
var import_helpers12 = require("@turf/helpers");
|
|
2719
2785
|
var DrawEllipseByBoundingBoxMode = class extends TwoClickPolygonMode {
|
|
@@ -2724,8 +2790,8 @@ var DrawEllipseByBoundingBoxMode = class extends TwoClickPolygonMode {
|
|
|
2724
2790
|
const maxY = Math.max(coord1[1], coord2[1]);
|
|
2725
2791
|
const polygonPoints = (0, import_bbox_polygon7.default)([minX, minY, maxX, maxY]).geometry.coordinates[0];
|
|
2726
2792
|
const centerCoordinates = getIntermediatePosition(coord1, coord2);
|
|
2727
|
-
const xSemiAxis = Math.max((0,
|
|
2728
|
-
const ySemiAxis = Math.max((0,
|
|
2793
|
+
const xSemiAxis = Math.max((0, import_distance9.default)((0, import_helpers12.point)(polygonPoints[0]), (0, import_helpers12.point)(polygonPoints[1])), 1e-3);
|
|
2794
|
+
const ySemiAxis = Math.max((0, import_distance9.default)((0, import_helpers12.point)(polygonPoints[0]), (0, import_helpers12.point)(polygonPoints[3])), 1e-3);
|
|
2729
2795
|
const geometry = (0, import_ellipse.default)(centerCoordinates, xSemiAxis, ySemiAxis, {});
|
|
2730
2796
|
geometry.properties = geometry.properties || {};
|
|
2731
2797
|
geometry.properties.editProperties = geometry.properties.editProperties || {};
|
|
@@ -2837,15 +2903,15 @@ var DrawRectangleUsingThreePointsMode = class extends ThreeClickPolygonMode {
|
|
|
2837
2903
|
};
|
|
2838
2904
|
|
|
2839
2905
|
// dist/edit-modes/draw-ellipse-using-three-points-mode.js
|
|
2840
|
-
var
|
|
2906
|
+
var import_distance10 = __toESM(require("@turf/distance"), 1);
|
|
2841
2907
|
var import_ellipse2 = __toESM(require("@turf/ellipse"), 1);
|
|
2842
2908
|
var import_bearing8 = __toESM(require("@turf/bearing"), 1);
|
|
2843
2909
|
var import_helpers13 = require("@turf/helpers");
|
|
2844
2910
|
var DrawEllipseUsingThreePointsMode = class extends ThreeClickPolygonMode {
|
|
2845
2911
|
getThreeClickPolygon(coord1, coord2, coord3, modeConfig) {
|
|
2846
2912
|
const centerCoordinates = getIntermediatePosition(coord1, coord2);
|
|
2847
|
-
const xSemiAxis = Math.max((0,
|
|
2848
|
-
const ySemiAxis = Math.max((0,
|
|
2913
|
+
const xSemiAxis = Math.max((0, import_distance10.default)(centerCoordinates, (0, import_helpers13.point)(coord3)), 1e-3);
|
|
2914
|
+
const ySemiAxis = Math.max((0, import_distance10.default)(coord1, coord2), 1e-3) / 2;
|
|
2849
2915
|
const options = { angle: (0, import_bearing8.default)(coord1, coord2) };
|
|
2850
2916
|
const geometry = (0, import_ellipse2.default)(centerCoordinates, xSemiAxis, ySemiAxis, options);
|
|
2851
2917
|
geometry.properties = geometry.properties || {};
|
|
@@ -2860,10 +2926,10 @@ var DrawEllipseUsingThreePointsMode = class extends ThreeClickPolygonMode {
|
|
|
2860
2926
|
};
|
|
2861
2927
|
|
|
2862
2928
|
// dist/edit-modes/draw-90degree-polygon-mode.js
|
|
2863
|
-
var
|
|
2929
|
+
var import_destination5 = __toESM(require("@turf/destination"), 1);
|
|
2864
2930
|
var import_bearing9 = __toESM(require("@turf/bearing"), 1);
|
|
2865
2931
|
var import_line_intersect3 = __toESM(require("@turf/line-intersect"), 1);
|
|
2866
|
-
var
|
|
2932
|
+
var import_distance11 = __toESM(require("@turf/distance"), 1);
|
|
2867
2933
|
var import_helpers14 = require("@turf/helpers");
|
|
2868
2934
|
var Draw90DegreePolygonMode = class extends GeoJsonEditMode {
|
|
2869
2935
|
createTentativeFeature(props) {
|
|
@@ -2993,16 +3059,16 @@ var Draw90DegreePolygonMode = class extends GeoJsonEditMode {
|
|
|
2993
3059
|
const newAngle2 = angle2 + factor * 90;
|
|
2994
3060
|
angles.second.push(newAngle2 > 180 ? newAngle2 - 360 : newAngle2);
|
|
2995
3061
|
});
|
|
2996
|
-
const
|
|
3062
|
+
const distance6 = (0, import_distance11.default)((0, import_helpers14.point)(p1), (0, import_helpers14.point)(p3));
|
|
2997
3063
|
[0, 1, 2].forEach((indexFirst) => {
|
|
2998
3064
|
const line1 = (0, import_helpers14.lineString)([
|
|
2999
3065
|
p1,
|
|
3000
|
-
(0,
|
|
3066
|
+
(0, import_destination5.default)(p1, distance6, angles.first[indexFirst]).geometry.coordinates
|
|
3001
3067
|
]);
|
|
3002
3068
|
[0, 1, 2].forEach((indexSecond) => {
|
|
3003
3069
|
const line2 = (0, import_helpers14.lineString)([
|
|
3004
3070
|
p3,
|
|
3005
|
-
(0,
|
|
3071
|
+
(0, import_destination5.default)(p3, distance6, angles.second[indexSecond]).geometry.coordinates
|
|
3006
3072
|
]);
|
|
3007
3073
|
const fc = (0, import_line_intersect3.default)(line1, line2);
|
|
3008
3074
|
if (fc && fc.features.length) {
|
|
@@ -3326,7 +3392,7 @@ var DeleteMode = class extends GeoJsonEditMode {
|
|
|
3326
3392
|
var PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
|
|
3327
3393
|
|
|
3328
3394
|
// dist/editable-layers/editable-layer.js
|
|
3329
|
-
var
|
|
3395
|
+
var import_core2 = require("@deck.gl/core");
|
|
3330
3396
|
var EVENT_TYPES = [
|
|
3331
3397
|
"click",
|
|
3332
3398
|
"pointermove",
|
|
@@ -3336,7 +3402,7 @@ var EVENT_TYPES = [
|
|
|
3336
3402
|
"keyup",
|
|
3337
3403
|
"dblclick"
|
|
3338
3404
|
];
|
|
3339
|
-
var EditableLayer = class extends
|
|
3405
|
+
var EditableLayer = class extends import_core2.CompositeLayer {
|
|
3340
3406
|
state = void 0;
|
|
3341
3407
|
// Overridable interaction event handlers
|
|
3342
3408
|
onLayerClick(event) {
|
|
@@ -3823,6 +3889,10 @@ var EditableGeoJsonLayer = class extends EditableLayer {
|
|
|
3823
3889
|
selectedIndexes: props.selectedFeatureIndexes,
|
|
3824
3890
|
lastPointerMoveEvent: this.state.lastPointerMoveEvent,
|
|
3825
3891
|
cursor: this.state.cursor,
|
|
3892
|
+
// Derive edit-mode math from deck.gl's coordinateSystem layer prop.
|
|
3893
|
+
// This ensures that when the layer is configured for Cartesian or other
|
|
3894
|
+
// non-geographic rendering, edit modes automatically use the correct geometry math.
|
|
3895
|
+
coordinateSystem: fromDeckCoordinateSystem(this.props.coordinateSystem),
|
|
3826
3896
|
onEdit: (editAction) => {
|
|
3827
3897
|
this.setNeedsUpdate();
|
|
3828
3898
|
props.onEdit(editAction);
|
|
@@ -4142,7 +4212,7 @@ __publicField(EditableH3ClusterLayer, "layerName", "EditableH3ClusterLayer");
|
|
|
4142
4212
|
__publicField(EditableH3ClusterLayer, "defaultProps", defaultProps3);
|
|
4143
4213
|
|
|
4144
4214
|
// dist/editable-layers/selection-layer.js
|
|
4145
|
-
var
|
|
4215
|
+
var import_core3 = require("@deck.gl/core");
|
|
4146
4216
|
var import_layers3 = require("@deck.gl/layers");
|
|
4147
4217
|
var import_helpers16 = require("@turf/helpers");
|
|
4148
4218
|
var import_buffer2 = __toESM(require("@turf/buffer"), 1);
|
|
@@ -4194,7 +4264,7 @@ var PASS_THROUGH_PROPS = [
|
|
|
4194
4264
|
"getTentativeFillColor",
|
|
4195
4265
|
"getTentativeLineWidth"
|
|
4196
4266
|
];
|
|
4197
|
-
var SelectionLayer = class extends
|
|
4267
|
+
var SelectionLayer = class extends import_core3.CompositeLayer {
|
|
4198
4268
|
state = void 0;
|
|
4199
4269
|
_selectRectangleObjects(coordinates) {
|
|
4200
4270
|
const { layerIds, onSelect } = this.props;
|
|
@@ -4299,10 +4369,10 @@ __publicField(SelectionLayer, "layerName", "SelectionLayer");
|
|
|
4299
4369
|
__publicField(SelectionLayer, "defaultProps", defaultProps4);
|
|
4300
4370
|
|
|
4301
4371
|
// dist/editable-layers/elevated-edit-handle-layer.js
|
|
4302
|
-
var
|
|
4372
|
+
var import_core4 = require("@deck.gl/core");
|
|
4303
4373
|
var import_layers4 = require("@deck.gl/layers");
|
|
4304
4374
|
var defaultProps5 = {};
|
|
4305
|
-
var ElevatedEditHandleLayer = class extends
|
|
4375
|
+
var ElevatedEditHandleLayer = class extends import_core4.CompositeLayer {
|
|
4306
4376
|
renderLayers() {
|
|
4307
4377
|
const handles = new import_layers4.ScatterplotLayer(Object.assign({}, this.props, {
|
|
4308
4378
|
id: `${this.props.id}-ScatterplotLayer`,
|
|
@@ -4326,7 +4396,7 @@ __publicField(ElevatedEditHandleLayer, "defaultProps", defaultProps5);
|
|
|
4326
4396
|
// dist/widgets/edit-mode-tray-widget.js
|
|
4327
4397
|
var import_jsx_runtime = require("preact/jsx-runtime");
|
|
4328
4398
|
var import_preact = require("preact");
|
|
4329
|
-
var
|
|
4399
|
+
var import_core5 = require("@deck.gl/core");
|
|
4330
4400
|
var ROOT_STYLE = {
|
|
4331
4401
|
position: "absolute",
|
|
4332
4402
|
display: "flex",
|
|
@@ -4370,7 +4440,7 @@ var BUTTON_LABEL_STYLE = {
|
|
|
4370
4440
|
marginTop: "2px",
|
|
4371
4441
|
lineHeight: "12px"
|
|
4372
4442
|
};
|
|
4373
|
-
var _EditModeTrayWidget = class extends
|
|
4443
|
+
var _EditModeTrayWidget = class extends import_core5.Widget {
|
|
4374
4444
|
placement = "top-left";
|
|
4375
4445
|
className = "deck-widget-edit-mode-tray";
|
|
4376
4446
|
layout = "vertical";
|
|
@@ -4545,7 +4615,7 @@ __publicField(EditModeTrayWidget, "defaultProps", {
|
|
|
4545
4615
|
// dist/widgets/editor-toolbar-widget.js
|
|
4546
4616
|
var import_jsx_runtime2 = require("preact/jsx-runtime");
|
|
4547
4617
|
var import_preact2 = require("preact");
|
|
4548
|
-
var
|
|
4618
|
+
var import_core6 = require("@deck.gl/core");
|
|
4549
4619
|
var ROOT_STYLE2 = {
|
|
4550
4620
|
position: "absolute",
|
|
4551
4621
|
display: "flex",
|
|
@@ -4627,7 +4697,7 @@ var BOOLEAN_OPS = [
|
|
|
4627
4697
|
{ op: "union", icon: UnionIcon, label: "Union", title: "Union with selection" },
|
|
4628
4698
|
{ op: "intersection", icon: IntersectIcon, label: "Sect", title: "Intersect with selection" }
|
|
4629
4699
|
];
|
|
4630
|
-
var _EditorToolbarWidget = class extends
|
|
4700
|
+
var _EditorToolbarWidget = class extends import_core6.Widget {
|
|
4631
4701
|
placement = "bottom-left";
|
|
4632
4702
|
className = "deck-widget-editor-toolbar";
|
|
4633
4703
|
deck = null;
|
|
@@ -4712,9 +4782,9 @@ __publicField(EditorToolbarWidget, "defaultProps", {
|
|
|
4712
4782
|
});
|
|
4713
4783
|
|
|
4714
4784
|
// dist/editable-layers/junction-scatterplot-layer.js
|
|
4715
|
-
var
|
|
4785
|
+
var import_core7 = require("@deck.gl/core");
|
|
4716
4786
|
var import_layers5 = require("@deck.gl/layers");
|
|
4717
|
-
var JunctionScatterplotLayer = class extends
|
|
4787
|
+
var JunctionScatterplotLayer = class extends import_core7.CompositeLayer {
|
|
4718
4788
|
renderLayers() {
|
|
4719
4789
|
const { id, getFillColor, getStrokeColor, getInnerRadius, updateTriggers } = this.props;
|
|
4720
4790
|
return [
|
|
@@ -4758,7 +4828,7 @@ __publicField(JunctionScatterplotLayer, "defaultProps", {
|
|
|
4758
4828
|
var import_nearest_point_on_line2 = __toESM(require("@turf/nearest-point-on-line"), 1);
|
|
4759
4829
|
var import_helpers17 = require("@turf/helpers");
|
|
4760
4830
|
var import_circle3 = __toESM(require("@turf/circle"), 1);
|
|
4761
|
-
var
|
|
4831
|
+
var import_distance12 = __toESM(require("@turf/distance"), 1);
|
|
4762
4832
|
var import_center2 = __toESM(require("@turf/center"), 1);
|
|
4763
4833
|
var ResizeCircleMode = class extends GeoJsonEditMode {
|
|
4764
4834
|
_selectedEditHandle;
|
|
@@ -4826,7 +4896,7 @@ var ResizeCircleMode = class extends GeoJsonEditMode {
|
|
|
4826
4896
|
const feature = this.getSelectedFeature(props);
|
|
4827
4897
|
const center = (0, import_center2.default)(feature).geometry.coordinates;
|
|
4828
4898
|
const numberOfSteps = Object.entries(feature.geometry.coordinates[0]).length - 1;
|
|
4829
|
-
const radius = Math.max((0,
|
|
4899
|
+
const radius = Math.max((0, import_distance12.default)(center, event.mapCoords), 1e-3);
|
|
4830
4900
|
const { steps = numberOfSteps } = {};
|
|
4831
4901
|
const options = { steps };
|
|
4832
4902
|
const updatedFeature = (0, import_circle3.default)(center, radius, options);
|
|
@@ -4942,34 +5012,33 @@ var ExtendLineStringMode = class extends GeoJsonEditMode {
|
|
|
4942
5012
|
};
|
|
4943
5013
|
|
|
4944
5014
|
// dist/edit-modes/measure-distance-mode.js
|
|
4945
|
-
var import_distance14 = __toESM(require("@turf/distance"), 1);
|
|
4946
|
-
var import_midpoint = __toESM(require("@turf/midpoint"), 1);
|
|
4947
5015
|
var MeasureDistanceMode = class extends GeoJsonEditMode {
|
|
4948
5016
|
_isMeasuringSessionFinished = false;
|
|
4949
5017
|
_currentTooltips = [];
|
|
4950
5018
|
_currentDistance = 0;
|
|
4951
|
-
_calculateDistanceForTooltip = ({ positionA, positionB, modeConfig }) => {
|
|
4952
|
-
const {
|
|
4953
|
-
const
|
|
5019
|
+
_calculateDistanceForTooltip = ({ positionA, positionB, modeConfig, coordinateSystem }) => {
|
|
5020
|
+
const { measurementCallback } = modeConfig || {};
|
|
5021
|
+
const distance6 = getEditModeCoordinateSystem(coordinateSystem).distance(positionA, positionB);
|
|
4954
5022
|
if (measurementCallback) {
|
|
4955
|
-
measurementCallback(
|
|
5023
|
+
measurementCallback(distance6);
|
|
4956
5024
|
}
|
|
4957
|
-
return
|
|
5025
|
+
return distance6;
|
|
4958
5026
|
};
|
|
4959
|
-
_formatTooltip(
|
|
5027
|
+
_formatTooltip(distance6, modeConfig) {
|
|
4960
5028
|
const { formatTooltip, turfOptions } = modeConfig || {};
|
|
4961
5029
|
const units = turfOptions && turfOptions.units || "kilometers";
|
|
4962
5030
|
let text;
|
|
4963
5031
|
if (formatTooltip) {
|
|
4964
|
-
text = formatTooltip(
|
|
5032
|
+
text = formatTooltip(distance6);
|
|
4965
5033
|
} else {
|
|
4966
|
-
text = `${parseFloat(
|
|
5034
|
+
text = `${parseFloat(distance6).toFixed(2)} ${units}`;
|
|
4967
5035
|
}
|
|
4968
5036
|
return text;
|
|
4969
5037
|
}
|
|
4970
5038
|
handleClick(event, props) {
|
|
4971
5039
|
const { modeConfig, data, onEdit } = props;
|
|
4972
5040
|
const { centerTooltipsOnLine = false } = modeConfig || {};
|
|
5041
|
+
const coordSys = getEditModeCoordinateSystem(props.coordinateSystem);
|
|
4973
5042
|
if (this._isMeasuringSessionFinished) {
|
|
4974
5043
|
this._isMeasuringSessionFinished = false;
|
|
4975
5044
|
this.resetClickSequence();
|
|
@@ -4991,9 +5060,10 @@ var MeasureDistanceMode = class extends GeoJsonEditMode {
|
|
|
4991
5060
|
this._currentDistance += this._calculateDistanceForTooltip({
|
|
4992
5061
|
positionA: clickSequence[clickSequence.length - 2],
|
|
4993
5062
|
positionB: clickSequence[clickSequence.length - 1],
|
|
4994
|
-
modeConfig
|
|
5063
|
+
modeConfig,
|
|
5064
|
+
coordinateSystem: coordSys
|
|
4995
5065
|
});
|
|
4996
|
-
const tooltipPosition = centerTooltipsOnLine ?
|
|
5066
|
+
const tooltipPosition = centerTooltipsOnLine ? coordSys.midpoint(clickSequence[clickSequence.length - 2], clickSequence[clickSequence.length - 1]) : event.mapCoords;
|
|
4997
5067
|
this._currentTooltips.push({
|
|
4998
5068
|
position: tooltipPosition,
|
|
4999
5069
|
text: this._formatTooltip(this._currentDistance, modeConfig)
|
|
@@ -5075,18 +5145,20 @@ var MeasureDistanceMode = class extends GeoJsonEditMode {
|
|
|
5075
5145
|
const { lastPointerMoveEvent, modeConfig } = props;
|
|
5076
5146
|
const { centerTooltipsOnLine = false } = modeConfig || {};
|
|
5077
5147
|
const positions = this.getClickSequence();
|
|
5148
|
+
const coordSys = getEditModeCoordinateSystem(props.coordinateSystem);
|
|
5078
5149
|
if (positions.length > 0 && lastPointerMoveEvent && !this._isMeasuringSessionFinished) {
|
|
5079
|
-
const
|
|
5150
|
+
const distance6 = this._calculateDistanceForTooltip({
|
|
5080
5151
|
positionA: positions[positions.length - 1],
|
|
5081
5152
|
positionB: lastPointerMoveEvent.mapCoords,
|
|
5082
|
-
modeConfig: props.modeConfig
|
|
5153
|
+
modeConfig: props.modeConfig,
|
|
5154
|
+
coordinateSystem: coordSys
|
|
5083
5155
|
});
|
|
5084
|
-
const tooltipPosition = centerTooltipsOnLine ?
|
|
5156
|
+
const tooltipPosition = centerTooltipsOnLine ? coordSys.midpoint(positions[positions.length - 1], lastPointerMoveEvent.mapCoords) : lastPointerMoveEvent.mapCoords;
|
|
5085
5157
|
return [
|
|
5086
5158
|
...this._currentTooltips,
|
|
5087
5159
|
{
|
|
5088
5160
|
position: tooltipPosition,
|
|
5089
|
-
text: this._formatTooltip(this._currentDistance +
|
|
5161
|
+
text: this._formatTooltip(this._currentDistance + distance6, modeConfig)
|
|
5090
5162
|
}
|
|
5091
5163
|
];
|
|
5092
5164
|
}
|