@lumikmz/kmz 0.11.0 → 0.11.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/index.d.mts +150 -132
- package/dist/index.mjs +347 -115
- package/package.json +2 -3
- package/src/plan/geometry.test.ts +1 -1
- package/src/plan/plan-mapping-strip-corners.test.ts +349 -0
- package/src/plan/plan-mapping-strip.test.ts +134 -3
- package/src/plan/plan-mapping-strip.ts +366 -159
- package/src/plan/plan-target-detection.test.ts +1 -1
- package/src/plan/plan.test.ts +1 -1
- package/src/plan/strip-route-order.test.ts +241 -0
- package/src/plan/strip-route-order.ts +192 -0
- package/vite.config.ts +7 -0
package/dist/index.d.mts
CHANGED
|
@@ -2,77 +2,91 @@
|
|
|
2
2
|
type Brand<T, B> = T & {
|
|
3
3
|
readonly __brand: B;
|
|
4
4
|
};
|
|
5
|
-
type Meters = Brand<number, "Meters">;
|
|
6
|
-
type MetersPerSecond = Brand<number, "MetersPerSecond">;
|
|
7
|
-
type Degrees = Brand<number, "Degrees">;
|
|
8
|
-
declare const meters: (n: number) => Meters;
|
|
9
|
-
declare const metersPerSecond: (n: number) => MetersPerSecond;
|
|
10
|
-
declare const degrees: (n: number) => Degrees;
|
|
11
|
-
interface LngLat {
|
|
5
|
+
export type Meters = Brand<number, "Meters">;
|
|
6
|
+
export type MetersPerSecond = Brand<number, "MetersPerSecond">;
|
|
7
|
+
export type Degrees = Brand<number, "Degrees">;
|
|
8
|
+
export declare const meters: (n: number) => Meters;
|
|
9
|
+
export declare const metersPerSecond: (n: number) => MetersPerSecond;
|
|
10
|
+
export declare const degrees: (n: number) => Degrees;
|
|
11
|
+
export interface LngLat {
|
|
12
12
|
readonly lng: number;
|
|
13
13
|
readonly lat: number;
|
|
14
14
|
}
|
|
15
|
-
interface LngLatHeight {
|
|
15
|
+
export interface LngLatHeight {
|
|
16
16
|
readonly lng: number;
|
|
17
17
|
readonly lat: number;
|
|
18
18
|
readonly height: Meters;
|
|
19
19
|
}
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/types/errors.d.ts
|
|
22
|
-
declare class KmzError extends Error {
|
|
22
|
+
export declare class KmzError extends Error {
|
|
23
23
|
constructor(message: string);
|
|
24
24
|
}
|
|
25
|
-
declare class PlannerError extends KmzError {
|
|
25
|
+
export declare class PlannerError extends KmzError {
|
|
26
26
|
constructor(message: string);
|
|
27
27
|
}
|
|
28
|
-
interface Issue {
|
|
28
|
+
export interface Issue {
|
|
29
29
|
path: string;
|
|
30
30
|
message: string;
|
|
31
31
|
severity: "error" | "warning";
|
|
32
32
|
}
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/types/enums.d.ts
|
|
35
|
-
type FlyToWaylineMode = "safely" | "pointToPoint";
|
|
36
|
-
type FinishAction = "goHome" | "noAction" | "autoLand" | "gotoFirstWaypoint";
|
|
37
|
-
type ExitOnRCLost = "goContinue" | "executeLostAction";
|
|
38
|
-
type ExecuteRCLostAction = "goBack" | "landing" | "hover";
|
|
39
|
-
type TemplateType = "waypoint" | "mapping2d" | "mapping3d" | "mappingStrip" | "targetdetection";
|
|
40
|
-
type CoordinateMode = "WGS84";
|
|
35
|
+
export type FlyToWaylineMode = "safely" | "pointToPoint";
|
|
36
|
+
export type FinishAction = "goHome" | "noAction" | "autoLand" | "gotoFirstWaypoint";
|
|
37
|
+
export type ExitOnRCLost = "goContinue" | "executeLostAction";
|
|
38
|
+
export type ExecuteRCLostAction = "goBack" | "landing" | "hover";
|
|
39
|
+
export type TemplateType = "waypoint" | "mapping2d" | "mapping3d" | "mappingStrip" | "targetdetection";
|
|
40
|
+
export type CoordinateMode = "WGS84";
|
|
41
41
|
/** Used in template.kml `waylineCoordinateSysParam.heightMode`. */
|
|
42
|
-
type TemplateHeightMode = "EGM96" | "relativeToStartPoint" | "aboveGroundLevel" | "realTimeFollowSurface";
|
|
42
|
+
export type TemplateHeightMode = "EGM96" | "relativeToStartPoint" | "aboveGroundLevel" | "realTimeFollowSurface";
|
|
43
43
|
/** Used in waylines.wpml `Folder.executeHeightMode`. */
|
|
44
|
-
type ExecuteHeightMode = "WGS84" | "relativeToStartPoint" | "realTimeFollowSurface";
|
|
45
|
-
type PositioningType = "GPS" | "RTKBaseStation" | "QianXun" | "Custom";
|
|
46
|
-
type WaypointTurnMode = "coordinateTurn" | "toPointAndStopWithDiscontinuityCurvature" | "toPointAndStopWithContinuityCurvature" | "toPointAndPassWithContinuityCurvature";
|
|
47
|
-
type WaypointHeadingMode = "followWayline" | "manually" | "fixed" | "smoothTransition" | "towardPOI";
|
|
44
|
+
export type ExecuteHeightMode = "WGS84" | "relativeToStartPoint" | "realTimeFollowSurface";
|
|
45
|
+
export type PositioningType = "GPS" | "RTKBaseStation" | "QianXun" | "Custom";
|
|
46
|
+
export type WaypointTurnMode = "coordinateTurn" | "toPointAndStopWithDiscontinuityCurvature" | "toPointAndStopWithContinuityCurvature" | "toPointAndPassWithContinuityCurvature";
|
|
47
|
+
export type WaypointHeadingMode = "followWayline" | "manually" | "fixed" | "smoothTransition" | "towardPOI";
|
|
48
48
|
/** Spec typo preserved: `followBadArc` (intended "shortest path / smaller arc"). */
|
|
49
|
-
type WaypointHeadingPathMode = "clockwise" | "counterClockwise" | "followBadArc";
|
|
49
|
+
export type WaypointHeadingPathMode = "clockwise" | "counterClockwise" | "followBadArc";
|
|
50
50
|
/** Template waypoint folder allows manual + per-point; mapping templates allow manual + fixed. */
|
|
51
|
-
type GimbalPitchMode = "manual" | "usePointSetting" | "fixed";
|
|
52
|
-
type ShootType = "time" | "distance";
|
|
53
|
-
type MappingHeadingMode = "fixed" | "followWayline";
|
|
51
|
+
export type GimbalPitchMode = "manual" | "usePointSetting" | "fixed";
|
|
52
|
+
export type ShootType = "time" | "distance";
|
|
53
|
+
export type MappingHeadingMode = "fixed" | "followWayline";
|
|
54
54
|
/** Spec typo preserved: `visable`. */
|
|
55
|
-
type LensType = "wide" | "zoom" | "ir" | "narrow_band" | "visable";
|
|
56
|
-
type FocusMode = "firstPoint" | "custom";
|
|
57
|
-
type MeteringMode = "average" | "spot";
|
|
58
|
-
type LidarReturnMode = "singleReturnStrongest" | "dualReturn" | "tripleReturn";
|
|
59
|
-
type LidarScanningMode = "repetitive" | "nonRepetitive";
|
|
60
|
-
type ActionGroupMode = "sequence";
|
|
61
|
-
type ActionTriggerType = "reachPoint" | "betweenAdjacentPoints" | "betweenAdjacentPointsIncludeFirstPoint" | "multipleTiming" | "multipleDistance";
|
|
62
|
-
type ActionActuatorFunc = "targetDetection" | "takePhoto" | "startRecord" | "stopRecord" | "focus" | "zoom" | "customDirName" | "gimbalRotate" | "rotateYaw" | "hover" | "gimbalEvenlyRotate" | "accurateShoot" | "orientedShoot" | "panoShot" | "recordPointCloud" | "megaphone" | "searchlight"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
export type LensType = "wide" | "zoom" | "ir" | "narrow_band" | "visable";
|
|
56
|
+
export type FocusMode = "firstPoint" | "custom";
|
|
57
|
+
export type MeteringMode = "average" | "spot";
|
|
58
|
+
export type LidarReturnMode = "singleReturnStrongest" | "dualReturn" | "tripleReturn";
|
|
59
|
+
export type LidarScanningMode = "repetitive" | "nonRepetitive";
|
|
60
|
+
export type ActionGroupMode = "sequence";
|
|
61
|
+
export type ActionTriggerType = "reachPoint" | "betweenAdjacentPoints" | "betweenAdjacentPointsIncludeFirstPoint" | "multipleTiming" | "multipleDistance";
|
|
62
|
+
export type ActionActuatorFunc = "targetDetection" | "takePhoto" | "startRecord" | "stopRecord" | "focus" | "zoom" | "customDirName" | "gimbalRotate" | "rotateYaw" | "hover" | "gimbalEvenlyRotate" | "accurateShoot" | "orientedShoot" | "panoShot" | "recordPointCloud" | "megaphone" | "searchlight" |
|
|
63
|
+
/** ⚠️ NON-SPEC — observed in real DJI KMZ exports, absent from WPML 1.15 docs. */
|
|
64
|
+
"startSmartOblique" |
|
|
65
|
+
/** ⚠️ NON-SPEC — observed in real DJI KMZ exports, absent from WPML 1.15 docs. */
|
|
66
|
+
"stopSmartOblique" |
|
|
67
|
+
/** Starts time-lapse (interval) shooting for a mapping strip. */
|
|
68
|
+
"startTimeLapse" |
|
|
69
|
+
/** Stops time-lapse shooting. */
|
|
70
|
+
"stopTimeLapse" |
|
|
71
|
+
/** Locks gimbal angle during a mapping strip. */
|
|
72
|
+
"gimbalAngleLock" |
|
|
73
|
+
/** Unlocks gimbal angle (no params in XML). */
|
|
74
|
+
"gimbalAngleUnlock" |
|
|
75
|
+
/** Sets camera focus mode (manual / auto). */
|
|
76
|
+
"setFocusType";
|
|
77
|
+
export type GimbalHeadingYawBase = "north" | "aircraft";
|
|
78
|
+
export type GimbalRotateMode = "absoluteAngle";
|
|
79
|
+
export type AircraftPathMode = "clockwise" | "counterClockwise";
|
|
80
|
+
export type RecordPointCloudOperate = "startRecord" | "pauseRecord" | "resumeRecord" | "stopRecord";
|
|
81
|
+
export type PanoShotSubMode = "panoShot_360";
|
|
82
|
+
export type OrientedPhotoMode = "normalPhoto" | "lowLightSmartShooting";
|
|
69
83
|
//#endregion
|
|
70
84
|
//#region src/types/drone-payload.d.ts
|
|
71
|
-
interface DroneInfo {
|
|
85
|
+
export interface DroneInfo {
|
|
72
86
|
droneEnumValue: number;
|
|
73
87
|
droneSubEnumValue?: number;
|
|
74
88
|
}
|
|
75
|
-
interface PayloadInfo {
|
|
89
|
+
export interface PayloadInfo {
|
|
76
90
|
payloadEnumValue: number;
|
|
77
91
|
/**
|
|
78
92
|
* Payload sub-type (`type-subtype-gimbalindex`, the middle field). Non-standard
|
|
@@ -85,7 +99,7 @@ interface PayloadInfo {
|
|
|
85
99
|
equivalentFocalLength?: number;
|
|
86
100
|
}
|
|
87
101
|
/** Aircraft `{ droneEnumValue, droneSubEnumValue }` tuples. */
|
|
88
|
-
declare const DroneEnum: {
|
|
102
|
+
export declare const DroneEnum: {
|
|
89
103
|
readonly M400: {
|
|
90
104
|
readonly droneEnumValue: 103;
|
|
91
105
|
readonly droneSubEnumValue: 0;
|
|
@@ -144,7 +158,7 @@ declare const DroneEnum: {
|
|
|
144
158
|
};
|
|
145
159
|
};
|
|
146
160
|
/** Payload `{ payloadEnumValue, payloadPositionIndex }` tuples for common cameras. */
|
|
147
|
-
declare const PayloadEnum: {
|
|
161
|
+
export declare const PayloadEnum: {
|
|
148
162
|
readonly M30Camera: {
|
|
149
163
|
readonly payloadEnumValue: 52;
|
|
150
164
|
readonly payloadSubEnumValue: 0;
|
|
@@ -251,7 +265,7 @@ declare const PayloadEnum: {
|
|
|
251
265
|
* `wpml:missionConfig` — shared between template.kml and waylines.wpml.
|
|
252
266
|
* See `docs/kmz/common-element.html` §missionConfig.
|
|
253
267
|
*/
|
|
254
|
-
interface MissionConfig {
|
|
268
|
+
export interface MissionConfig {
|
|
255
269
|
flyToWaylineMode: FlyToWaylineMode;
|
|
256
270
|
finishAction: FinishAction;
|
|
257
271
|
exitOnRCLost: ExitOnRCLost;
|
|
@@ -271,7 +285,7 @@ interface MissionConfig {
|
|
|
271
285
|
/** Only M3D/M3TD, M4D/M4TD, M4E/M4T. */
|
|
272
286
|
autoRerouteInfo?: AutoRerouteInfo;
|
|
273
287
|
}
|
|
274
|
-
interface AutoRerouteInfo {
|
|
288
|
+
export interface AutoRerouteInfo {
|
|
275
289
|
missionAutoRerouteMode: boolean;
|
|
276
290
|
transitionalAutoRerouteMode: boolean;
|
|
277
291
|
}
|
|
@@ -279,7 +293,7 @@ interface AutoRerouteInfo {
|
|
|
279
293
|
* `wpml:payloadParam` — per-payload imaging settings.
|
|
280
294
|
* Lives under template `Folder`.
|
|
281
295
|
*/
|
|
282
|
-
interface PayloadParam {
|
|
296
|
+
export interface PayloadParam {
|
|
283
297
|
payloadPositionIndex: number;
|
|
284
298
|
focusMode?: FocusMode;
|
|
285
299
|
meteringMode?: MeteringMode;
|
|
@@ -302,7 +316,7 @@ interface PayloadParam {
|
|
|
302
316
|
* `wpml:waypointHeadingParam` & `wpml:globalWaypointHeadingParam`.
|
|
303
317
|
* See `docs/kmz/common-element.html` §waypointHeadingParam.
|
|
304
318
|
*/
|
|
305
|
-
interface WaypointHeadingParam {
|
|
319
|
+
export interface WaypointHeadingParam {
|
|
306
320
|
waypointHeadingMode: WaypointHeadingMode;
|
|
307
321
|
/** Required iff `waypointHeadingMode === "smoothTransition"`. Range `[-180, 180]`. */
|
|
308
322
|
waypointHeadingAngle?: Degrees;
|
|
@@ -321,7 +335,7 @@ interface WaypointHeadingParam {
|
|
|
321
335
|
* `wpml:waypointTurnParam`.
|
|
322
336
|
* See `docs/kmz/common-element.html` §waypointTurnParam.
|
|
323
337
|
*/
|
|
324
|
-
interface WaypointTurnParam {
|
|
338
|
+
export interface WaypointTurnParam {
|
|
325
339
|
waypointTurnMode: WaypointTurnMode;
|
|
326
340
|
/**
|
|
327
341
|
* Required iff `waypointTurnMode === "coordinateTurn"`
|
|
@@ -333,7 +347,7 @@ interface WaypointTurnParam {
|
|
|
333
347
|
* `wpml:waylineCoordinateSysParam`.
|
|
334
348
|
* Mapping templates require globalShootHeight + surfaceFollowModeEnable.
|
|
335
349
|
*/
|
|
336
|
-
interface WaylineCoordinateSysParam {
|
|
350
|
+
export interface WaylineCoordinateSysParam {
|
|
337
351
|
/** Currently only `"WGS84"` is allowed. */
|
|
338
352
|
coordinateMode: CoordinateMode;
|
|
339
353
|
heightMode: TemplateHeightMode;
|
|
@@ -360,7 +374,7 @@ interface WaylineCoordinateSysParam {
|
|
|
360
374
|
* `wpml:mappingHeadingParam` — only on `mapping2d` Folder
|
|
361
375
|
* (M3E/M3T/M3M, M3D/M3TD, M4D/M4TD, M4E/M4T).
|
|
362
376
|
*/
|
|
363
|
-
interface MappingHeadingParam {
|
|
377
|
+
export interface MappingHeadingParam {
|
|
364
378
|
mappingHeadingMode: MappingHeadingMode;
|
|
365
379
|
/** Required iff `mappingHeadingMode === "fixed"`. Range `[0, 360]`. */
|
|
366
380
|
mappingHeadingAngle?: Degrees;
|
|
@@ -369,7 +383,7 @@ interface MappingHeadingParam {
|
|
|
369
383
|
* `wpml:overlap` — child of mapping2d / mapping3d / mappingStrip Folders.
|
|
370
384
|
* All fields individually optional in spec but at least one ortho pair is required in practice.
|
|
371
385
|
*/
|
|
372
|
-
interface Overlap {
|
|
386
|
+
export interface Overlap {
|
|
373
387
|
orthoLidarOverlapH?: number;
|
|
374
388
|
orthoLidarOverlapW?: number;
|
|
375
389
|
orthoCameraOverlapH?: number;
|
|
@@ -387,7 +401,7 @@ interface Overlap {
|
|
|
387
401
|
* - `actionGroupId` is unique within the entire KMZ (monotonically from 0).
|
|
388
402
|
* - `actionId` is scoped within its group.
|
|
389
403
|
*/
|
|
390
|
-
interface ActionGroup {
|
|
404
|
+
export interface ActionGroup {
|
|
391
405
|
actionGroupId: number;
|
|
392
406
|
actionGroupStartIndex: number;
|
|
393
407
|
actionGroupEndIndex: number;
|
|
@@ -395,19 +409,19 @@ interface ActionGroup {
|
|
|
395
409
|
actionTrigger: ActionTrigger;
|
|
396
410
|
action: Action[];
|
|
397
411
|
}
|
|
398
|
-
interface ActionTrigger {
|
|
412
|
+
export interface ActionTrigger {
|
|
399
413
|
actionTriggerType: ActionTriggerType;
|
|
400
414
|
/** Seconds for `multipleTiming`, meters for `multipleDistance`. */
|
|
401
415
|
actionTriggerParam?: number;
|
|
402
416
|
}
|
|
403
417
|
/** Discriminated by `actionActuatorFunc`. */
|
|
404
|
-
type Action = TargetDetectionAction | TakePhotoAction | StartRecordAction | StopRecordAction | FocusAction | ZoomAction | CustomDirNameAction | GimbalRotateAction | RotateYawAction | HoverAction | GimbalEvenlyRotateAction | AccurateShootAction | OrientedShootAction | PanoShotAction | RecordPointCloudAction | MegaphoneAction | SearchlightAction | StartSmartObliqueAction | StopSmartObliqueAction | StartTimeLapseAction | StopTimeLapseAction | GimbalAngleLockAction | GimbalAngleUnlockAction | SetFocusTypeAction;
|
|
418
|
+
export type Action = TargetDetectionAction | TakePhotoAction | StartRecordAction | StopRecordAction | FocusAction | ZoomAction | CustomDirNameAction | GimbalRotateAction | RotateYawAction | HoverAction | GimbalEvenlyRotateAction | AccurateShootAction | OrientedShootAction | PanoShotAction | RecordPointCloudAction | MegaphoneAction | SearchlightAction | StartSmartObliqueAction | StopSmartObliqueAction | StartTimeLapseAction | StopTimeLapseAction | GimbalAngleLockAction | GimbalAngleUnlockAction | SetFocusTypeAction;
|
|
405
419
|
interface ActionBase<F extends string, P> {
|
|
406
420
|
actionId: number;
|
|
407
421
|
actionActuatorFunc: F;
|
|
408
422
|
actionActuatorFuncParam: P;
|
|
409
423
|
}
|
|
410
|
-
interface TargetDetectionParam {
|
|
424
|
+
export interface TargetDetectionParam {
|
|
411
425
|
focalLength?: number;
|
|
412
426
|
payloadPositionIndex: number;
|
|
413
427
|
useGlobalPayloadLensIndex: boolean;
|
|
@@ -430,27 +444,27 @@ interface TargetDetectionParam {
|
|
|
430
444
|
targetType: string;
|
|
431
445
|
};
|
|
432
446
|
}
|
|
433
|
-
type TargetDetectionAction = ActionBase<"targetDetection", TargetDetectionParam>;
|
|
434
|
-
interface TakePhotoParam {
|
|
447
|
+
export type TargetDetectionAction = ActionBase<"targetDetection", TargetDetectionParam>;
|
|
448
|
+
export interface TakePhotoParam {
|
|
435
449
|
payloadPositionIndex: number;
|
|
436
450
|
fileSuffix?: string;
|
|
437
451
|
payloadLensIndex?: LensType[];
|
|
438
452
|
useGlobalPayloadLensIndex: boolean;
|
|
439
453
|
}
|
|
440
|
-
type TakePhotoAction = ActionBase<"takePhoto", TakePhotoParam>;
|
|
441
|
-
interface StartRecordParam {
|
|
454
|
+
export type TakePhotoAction = ActionBase<"takePhoto", TakePhotoParam>;
|
|
455
|
+
export interface StartRecordParam {
|
|
442
456
|
payloadPositionIndex: number;
|
|
443
457
|
fileSuffix?: string;
|
|
444
458
|
payloadLensIndex?: LensType[];
|
|
445
459
|
useGlobalPayloadLensIndex: boolean;
|
|
446
460
|
}
|
|
447
|
-
type StartRecordAction = ActionBase<"startRecord", StartRecordParam>;
|
|
448
|
-
interface StopRecordParam {
|
|
461
|
+
export type StartRecordAction = ActionBase<"startRecord", StartRecordParam>;
|
|
462
|
+
export interface StopRecordParam {
|
|
449
463
|
payloadPositionIndex: number;
|
|
450
464
|
payloadLensIndex?: LensType[];
|
|
451
465
|
}
|
|
452
|
-
type StopRecordAction = ActionBase<"stopRecord", StopRecordParam>;
|
|
453
|
-
interface FocusParam {
|
|
466
|
+
export type StopRecordAction = ActionBase<"stopRecord", StopRecordParam>;
|
|
467
|
+
export interface FocusParam {
|
|
454
468
|
payloadPositionIndex: number;
|
|
455
469
|
isPointFocus: boolean;
|
|
456
470
|
focusX: number;
|
|
@@ -464,19 +478,19 @@ interface FocusParam {
|
|
|
464
478
|
/** Calibration focus flag, observed in mapping WPML exports. */
|
|
465
479
|
isCalibrationFocus?: boolean;
|
|
466
480
|
}
|
|
467
|
-
type FocusAction = ActionBase<"focus", FocusParam>;
|
|
468
|
-
interface ZoomParam {
|
|
481
|
+
export type FocusAction = ActionBase<"focus", FocusParam>;
|
|
482
|
+
export interface ZoomParam {
|
|
469
483
|
payloadPositionIndex: number;
|
|
470
484
|
/** mm, > 0. */
|
|
471
485
|
focalLength: number;
|
|
472
486
|
}
|
|
473
|
-
type ZoomAction = ActionBase<"zoom", ZoomParam>;
|
|
474
|
-
interface CustomDirNameParam {
|
|
487
|
+
export type ZoomAction = ActionBase<"zoom", ZoomParam>;
|
|
488
|
+
export interface CustomDirNameParam {
|
|
475
489
|
payloadPositionIndex: number;
|
|
476
490
|
directoryName: string;
|
|
477
491
|
}
|
|
478
|
-
type CustomDirNameAction = ActionBase<"customDirName", CustomDirNameParam>;
|
|
479
|
-
interface GimbalRotateParam {
|
|
492
|
+
export type CustomDirNameAction = ActionBase<"customDirName", CustomDirNameParam>;
|
|
493
|
+
export interface GimbalRotateParam {
|
|
480
494
|
payloadPositionIndex: number;
|
|
481
495
|
gimbalHeadingYawBase: GimbalHeadingYawBase;
|
|
482
496
|
gimbalRotateMode: GimbalRotateMode;
|
|
@@ -490,27 +504,27 @@ interface GimbalRotateParam {
|
|
|
490
504
|
/** seconds */
|
|
491
505
|
gimbalRotateTime: number;
|
|
492
506
|
}
|
|
493
|
-
type GimbalRotateAction = ActionBase<"gimbalRotate", GimbalRotateParam>;
|
|
494
|
-
interface RotateYawParam {
|
|
507
|
+
export type GimbalRotateAction = ActionBase<"gimbalRotate", GimbalRotateParam>;
|
|
508
|
+
export interface RotateYawParam {
|
|
495
509
|
/** `[-180, 180]`, 0=N, 90=E, -90=W, ±180=S. */
|
|
496
510
|
aircraftHeading: Degrees;
|
|
497
511
|
/** Required on M300/M350. */
|
|
498
512
|
aircraftPathMode?: AircraftPathMode;
|
|
499
513
|
}
|
|
500
|
-
type RotateYawAction = ActionBase<"rotateYaw", RotateYawParam>;
|
|
501
|
-
interface HoverParam {
|
|
514
|
+
export type RotateYawAction = ActionBase<"rotateYaw", RotateYawParam>;
|
|
515
|
+
export interface HoverParam {
|
|
502
516
|
/** seconds, > 0. */
|
|
503
517
|
hoverTime: number;
|
|
504
518
|
}
|
|
505
|
-
type HoverAction = ActionBase<"hover", HoverParam>;
|
|
506
|
-
interface GimbalEvenlyRotateParam {
|
|
519
|
+
export type HoverAction = ActionBase<"hover", HoverParam>;
|
|
520
|
+
export interface GimbalEvenlyRotateParam {
|
|
507
521
|
payloadPositionIndex: number;
|
|
508
522
|
gimbalPitchRotateAngle: Degrees;
|
|
509
523
|
}
|
|
510
524
|
/** Must be paired with `actionTriggerType === "betweenAdjacentPoints"`. */
|
|
511
|
-
type GimbalEvenlyRotateAction = ActionBase<"gimbalEvenlyRotate", GimbalEvenlyRotateParam>;
|
|
525
|
+
export type GimbalEvenlyRotateAction = ActionBase<"gimbalEvenlyRotate", GimbalEvenlyRotateParam>;
|
|
512
526
|
/** Deprecated for M30/M30T after firmware V06.01.10.02. Prefer `orientedShoot`. */
|
|
513
|
-
interface AccurateShootParam {
|
|
527
|
+
export interface AccurateShootParam {
|
|
514
528
|
gimbalPitchRotateAngle: Degrees;
|
|
515
529
|
gimbalYawRotateAngle: Degrees;
|
|
516
530
|
focusX: number;
|
|
@@ -538,8 +552,8 @@ interface AccurateShootParam {
|
|
|
538
552
|
accurateCameraShutterTime?: number;
|
|
539
553
|
accurateCameraISO?: number;
|
|
540
554
|
}
|
|
541
|
-
type AccurateShootAction = ActionBase<"accurateShoot", AccurateShootParam>;
|
|
542
|
-
interface OrientedShootParam {
|
|
555
|
+
export type AccurateShootAction = ActionBase<"accurateShoot", AccurateShootParam>;
|
|
556
|
+
export interface OrientedShootParam {
|
|
543
557
|
gimbalPitchRotateAngle: Degrees;
|
|
544
558
|
gimbalYawRotateAngle: Degrees;
|
|
545
559
|
focusX: number;
|
|
@@ -569,8 +583,8 @@ interface OrientedShootParam {
|
|
|
569
583
|
orientedCameraISO: number;
|
|
570
584
|
orientedPhotoMode: OrientedPhotoMode;
|
|
571
585
|
}
|
|
572
|
-
type OrientedShootAction = ActionBase<"orientedShoot", OrientedShootParam>;
|
|
573
|
-
interface PanoShotParam {
|
|
586
|
+
export type OrientedShootAction = ActionBase<"orientedShoot", OrientedShootParam>;
|
|
587
|
+
export interface PanoShotParam {
|
|
574
588
|
payloadPositionIndex?: number;
|
|
575
589
|
payloadLensIndex?: LensType[];
|
|
576
590
|
useGlobalPayloadLensIndex?: boolean;
|
|
@@ -578,14 +592,14 @@ interface PanoShotParam {
|
|
|
578
592
|
actionUUID?: string;
|
|
579
593
|
panoShotSubMode: PanoShotSubMode;
|
|
580
594
|
}
|
|
581
|
-
type PanoShotAction = ActionBase<"panoShot", PanoShotParam>;
|
|
582
|
-
interface RecordPointCloudParam {
|
|
595
|
+
export type PanoShotAction = ActionBase<"panoShot", PanoShotParam>;
|
|
596
|
+
export interface RecordPointCloudParam {
|
|
583
597
|
payloadPositionIndex: number;
|
|
584
598
|
recordPointCloudOperate: RecordPointCloudOperate;
|
|
585
599
|
}
|
|
586
|
-
type RecordPointCloudAction = ActionBase<"recordPointCloud", RecordPointCloudParam>;
|
|
600
|
+
export type RecordPointCloudAction = ActionBase<"recordPointCloud", RecordPointCloudParam>;
|
|
587
601
|
/** M4D/M4TD only. */
|
|
588
|
-
interface MegaphoneParam {
|
|
602
|
+
export interface MegaphoneParam {
|
|
589
603
|
payloadPositionIndex: number;
|
|
590
604
|
actionUUID: string;
|
|
591
605
|
/** 0 = start, 1 = stop. */
|
|
@@ -603,8 +617,8 @@ interface MegaphoneParam {
|
|
|
603
617
|
/** Non-spec DJI Pilot TTS params observed in M4D/M4TD megaphone actions. */
|
|
604
618
|
ttsparam?: MegaphoneTtsParam;
|
|
605
619
|
}
|
|
606
|
-
type MegaphoneAction = ActionBase<"megaphone", MegaphoneParam>;
|
|
607
|
-
interface MegaphoneTtsParam {
|
|
620
|
+
export type MegaphoneAction = ActionBase<"megaphone", MegaphoneParam>;
|
|
621
|
+
export interface MegaphoneTtsParam {
|
|
608
622
|
text: string;
|
|
609
623
|
role: "male" | "female";
|
|
610
624
|
language: "CN";
|
|
@@ -614,7 +628,7 @@ interface MegaphoneTtsParam {
|
|
|
614
628
|
speed: number;
|
|
615
629
|
}
|
|
616
630
|
/** M4D/M4TD only — starts gimbal swing in smart-oblique mode. */
|
|
617
|
-
interface SmartObliquePoint {
|
|
631
|
+
export interface SmartObliquePoint {
|
|
618
632
|
/** seconds before this pose starts; DJI exports currently use 0. */
|
|
619
633
|
smartObliqueRunningTime: number;
|
|
620
634
|
/** seconds to hold this pose for smart-oblique shooting. */
|
|
@@ -623,20 +637,20 @@ interface SmartObliquePoint {
|
|
|
623
637
|
smartObliqueEulerRoll: Degrees;
|
|
624
638
|
smartObliqueEulerYaw: Degrees;
|
|
625
639
|
}
|
|
626
|
-
interface StartSmartObliqueParam {
|
|
640
|
+
export interface StartSmartObliqueParam {
|
|
627
641
|
/** Observed in DJI exports; older generated files may omit it. */
|
|
628
642
|
smartObliqueCycleMode?: "unlimited";
|
|
629
643
|
payloadPositionIndex: number;
|
|
630
644
|
smartObliquePoint?: SmartObliquePoint[];
|
|
631
645
|
}
|
|
632
|
-
type StartSmartObliqueAction = ActionBase<"startSmartOblique", StartSmartObliqueParam>;
|
|
646
|
+
export type StartSmartObliqueAction = ActionBase<"startSmartOblique", StartSmartObliqueParam>;
|
|
633
647
|
/** M4D/M4TD only — stops gimbal swing in smart-oblique mode. */
|
|
634
|
-
interface StopSmartObliqueParam {
|
|
648
|
+
export interface StopSmartObliqueParam {
|
|
635
649
|
payloadPositionIndex: number;
|
|
636
650
|
}
|
|
637
|
-
type StopSmartObliqueAction = ActionBase<"stopSmartOblique", StopSmartObliqueParam>;
|
|
651
|
+
export type StopSmartObliqueAction = ActionBase<"stopSmartOblique", StopSmartObliqueParam>;
|
|
638
652
|
/** Starts interval (time-lapse) shooting for a mapping strip. */
|
|
639
|
-
interface StartTimeLapseParam {
|
|
653
|
+
export interface StartTimeLapseParam {
|
|
640
654
|
payloadPositionIndex: number;
|
|
641
655
|
useGlobalPayloadLensIndex: boolean;
|
|
642
656
|
/** Comma-separated in WPML; may contain visible and infrared lenses together. */
|
|
@@ -644,35 +658,35 @@ interface StartTimeLapseParam {
|
|
|
644
658
|
/** Minimum shoot interval in seconds. Derived from `forwardGroundSpacing / speed`. */
|
|
645
659
|
minShootInterval: number;
|
|
646
660
|
}
|
|
647
|
-
type StartTimeLapseAction = ActionBase<"startTimeLapse", StartTimeLapseParam>;
|
|
661
|
+
export type StartTimeLapseAction = ActionBase<"startTimeLapse", StartTimeLapseParam>;
|
|
648
662
|
/** Stops interval shooting for a mapping strip. */
|
|
649
|
-
interface StopTimeLapseParam {
|
|
663
|
+
export interface StopTimeLapseParam {
|
|
650
664
|
payloadPositionIndex: number;
|
|
651
665
|
payloadLensIndex: LensType[];
|
|
652
666
|
}
|
|
653
|
-
type StopTimeLapseAction = ActionBase<"stopTimeLapse", StopTimeLapseParam>;
|
|
667
|
+
export type StopTimeLapseAction = ActionBase<"stopTimeLapse", StopTimeLapseParam>;
|
|
654
668
|
/** Locks gimbal pitch angle during a mapping strip. */
|
|
655
|
-
interface GimbalAngleLockParam {
|
|
669
|
+
export interface GimbalAngleLockParam {
|
|
656
670
|
payloadPositionIndex: number;
|
|
657
671
|
}
|
|
658
|
-
type GimbalAngleLockAction = ActionBase<"gimbalAngleLock", GimbalAngleLockParam>;
|
|
672
|
+
export type GimbalAngleLockAction = ActionBase<"gimbalAngleLock", GimbalAngleLockParam>;
|
|
659
673
|
/**
|
|
660
674
|
* Unlocks gimbal angle after a mapping strip ends.
|
|
661
675
|
* ⚠️ No `actionActuatorFuncParam` element is emitted in XML — this action has no params.
|
|
662
676
|
*/
|
|
663
|
-
interface GimbalAngleUnlockAction {
|
|
677
|
+
export interface GimbalAngleUnlockAction {
|
|
664
678
|
actionId: number;
|
|
665
679
|
actionActuatorFunc: "gimbalAngleUnlock";
|
|
666
680
|
}
|
|
667
681
|
/** Sets camera focus mode (e.g. "manual") before a mapping run. */
|
|
668
|
-
interface SetFocusTypeParam {
|
|
682
|
+
export interface SetFocusTypeParam {
|
|
669
683
|
payloadPositionIndex: number;
|
|
670
684
|
/** e.g. `"manual"`, `"auto"`. */
|
|
671
685
|
cameraFocusType: string;
|
|
672
686
|
}
|
|
673
|
-
type SetFocusTypeAction = ActionBase<"setFocusType", SetFocusTypeParam>;
|
|
687
|
+
export type SetFocusTypeAction = ActionBase<"setFocusType", SetFocusTypeParam>;
|
|
674
688
|
/** M4D/M4TD only. */
|
|
675
|
-
interface SearchlightParam {
|
|
689
|
+
export interface SearchlightParam {
|
|
676
690
|
payloadPositionIndex: number;
|
|
677
691
|
actionUUID?: string;
|
|
678
692
|
/** 0 = off, 1 = illuminate, 2 = flash. */
|
|
@@ -680,7 +694,7 @@ interface SearchlightParam {
|
|
|
680
694
|
/** 0–100. */
|
|
681
695
|
searchlightBrightness: number;
|
|
682
696
|
}
|
|
683
|
-
type SearchlightAction = ActionBase<"searchlight", SearchlightParam>;
|
|
697
|
+
export type SearchlightAction = ActionBase<"searchlight", SearchlightParam>;
|
|
684
698
|
//#endregion
|
|
685
699
|
//#region src/types/placemark.d.ts
|
|
686
700
|
/**
|
|
@@ -688,7 +702,7 @@ type SearchlightAction = ActionBase<"searchlight", SearchlightParam>;
|
|
|
688
702
|
*
|
|
689
703
|
* Note coordinate order: `Point.coordinates` is `lon,lat` per KML (no altitude).
|
|
690
704
|
*/
|
|
691
|
-
interface TemplateWaypointPlacemark {
|
|
705
|
+
export interface TemplateWaypointPlacemark {
|
|
692
706
|
Point: {
|
|
693
707
|
coordinates: LngLat;
|
|
694
708
|
};
|
|
@@ -719,10 +733,11 @@ interface TemplateWaypointPlacemark {
|
|
|
719
733
|
actionGroup?: ActionGroup[];
|
|
720
734
|
}
|
|
721
735
|
/** Survey-area boundary polygon, shared by mapping2d / mapping3d Placemarks. */
|
|
722
|
-
interface TemplatePolygon {
|
|
736
|
+
export interface TemplatePolygon {
|
|
723
737
|
outerBoundaryIs: {
|
|
724
738
|
LinearRing: {
|
|
725
|
-
/** Space-separated `lon,lat,alt` triples. */
|
|
739
|
+
/** Space-separated `lon,lat,alt` triples. */
|
|
740
|
+
coordinates: string;
|
|
726
741
|
};
|
|
727
742
|
};
|
|
728
743
|
}
|
|
@@ -730,7 +745,7 @@ interface TemplatePolygon {
|
|
|
730
745
|
* `Placemark` inside a `mapping2d` Folder. Per the WPML spec the shooting/mapping
|
|
731
746
|
* params live HERE alongside the polygon — NOT on the Folder.
|
|
732
747
|
*/
|
|
733
|
-
interface Mapping2dPlacemark {
|
|
748
|
+
export interface Mapping2dPlacemark {
|
|
734
749
|
/** M300/M350 only. */
|
|
735
750
|
caliFlightEnable?: boolean;
|
|
736
751
|
elevationOptimizeEnable: boolean;
|
|
@@ -763,7 +778,7 @@ interface Mapping2dPlacemark {
|
|
|
763
778
|
height: Meters;
|
|
764
779
|
}
|
|
765
780
|
/** `Placemark` inside a `mapping3d` (oblique) Folder. Params live here, not on the Folder. */
|
|
766
|
-
interface Mapping3dPlacemark {
|
|
781
|
+
export interface Mapping3dPlacemark {
|
|
767
782
|
caliFlightEnable?: boolean;
|
|
768
783
|
inclinedGimbalPitch: Degrees;
|
|
769
784
|
/** Range `[1, 15]`. */
|
|
@@ -778,7 +793,7 @@ interface Mapping3dPlacemark {
|
|
|
778
793
|
height: Meters;
|
|
779
794
|
}
|
|
780
795
|
/** `Placemark` inside a FlightHub 2 patrol-area `targetdetection` Folder. */
|
|
781
|
-
interface TargetDetectionPlacemark {
|
|
796
|
+
export interface TargetDetectionPlacemark {
|
|
782
797
|
direction: Degrees;
|
|
783
798
|
margin: number;
|
|
784
799
|
gimbalPitchMode: "fixed";
|
|
@@ -794,7 +809,7 @@ interface TargetDetectionPlacemark {
|
|
|
794
809
|
action?: TargetDetectionAction;
|
|
795
810
|
}
|
|
796
811
|
/** `Placemark` inside a `mappingStrip` Folder — uses a LineString; params live here. */
|
|
797
|
-
interface MappingStripPlacemark {
|
|
812
|
+
export interface MappingStripPlacemark {
|
|
798
813
|
caliFlightEnable: boolean;
|
|
799
814
|
/** Optional field observed in FlightHub 2 mappingStrip exports. */
|
|
800
815
|
elevationOptimizeEnable?: boolean;
|
|
@@ -813,7 +828,8 @@ interface MappingStripPlacemark {
|
|
|
813
828
|
/** Overlap ratios as percentages `[0, 100]`. */
|
|
814
829
|
overlap: Overlap;
|
|
815
830
|
LineString: {
|
|
816
|
-
/** Space-separated `lon,lat,alt` triples. Alt consumed only when `stripUseTemplateAltitude === true`. */
|
|
831
|
+
/** Space-separated `lon,lat,alt` triples. Alt consumed only when `stripUseTemplateAltitude === true`. */
|
|
832
|
+
coordinates: string;
|
|
817
833
|
};
|
|
818
834
|
ellipsoidHeight: Meters;
|
|
819
835
|
height: Meters;
|
|
@@ -826,7 +842,7 @@ interface MappingStripPlacemark {
|
|
|
826
842
|
* The spec's `useGlobalXxx` switches are template-only — in waylines.wpml the
|
|
827
843
|
* params are inlined unconditionally, so they are required here.
|
|
828
844
|
*/
|
|
829
|
-
interface WaylinesPlacemark {
|
|
845
|
+
export interface WaylinesPlacemark {
|
|
830
846
|
Point: {
|
|
831
847
|
coordinates: LngLat;
|
|
832
848
|
};
|
|
@@ -854,7 +870,7 @@ interface WaylinesPlacemark {
|
|
|
854
870
|
* `template.kml` document. Mirrors `<kml><Document>` structure.
|
|
855
871
|
* See `docs/kmz/template-kml.html`.
|
|
856
872
|
*/
|
|
857
|
-
type Template = WaypointTemplate | Mapping2dTemplate | Mapping3dTemplate | MappingStripTemplate | TargetDetectionTemplate;
|
|
873
|
+
export type Template = WaypointTemplate | Mapping2dTemplate | Mapping3dTemplate | MappingStripTemplate | TargetDetectionTemplate;
|
|
858
874
|
interface TemplateDocumentBase {
|
|
859
875
|
/** Unix milliseconds. */
|
|
860
876
|
author?: string;
|
|
@@ -866,10 +882,10 @@ interface TemplateDocumentBase {
|
|
|
866
882
|
};
|
|
867
883
|
missionConfig: MissionConfig;
|
|
868
884
|
}
|
|
869
|
-
interface WaypointTemplate extends TemplateDocumentBase {
|
|
885
|
+
export interface WaypointTemplate extends TemplateDocumentBase {
|
|
870
886
|
Folder: WaypointFolder;
|
|
871
887
|
}
|
|
872
|
-
interface WaypointFolder {
|
|
888
|
+
export interface WaypointFolder {
|
|
873
889
|
templateType: "waypoint";
|
|
874
890
|
/** Range `[0, 65535]`. */
|
|
875
891
|
templateId: number;
|
|
@@ -890,10 +906,10 @@ interface WaypointFolder {
|
|
|
890
906
|
globalWaypointHeadingParam: WaypointHeadingParam;
|
|
891
907
|
Placemark: TemplateWaypointPlacemark[];
|
|
892
908
|
}
|
|
893
|
-
interface Mapping2dTemplate extends TemplateDocumentBase {
|
|
909
|
+
export interface Mapping2dTemplate extends TemplateDocumentBase {
|
|
894
910
|
Folder: Mapping2dFolder;
|
|
895
911
|
}
|
|
896
|
-
interface Mapping2dFolder {
|
|
912
|
+
export interface Mapping2dFolder {
|
|
897
913
|
templateType: "mapping2d";
|
|
898
914
|
templateId: number;
|
|
899
915
|
waylineCoordinateSysParam: WaylineCoordinateSysParam;
|
|
@@ -902,10 +918,10 @@ interface Mapping2dFolder {
|
|
|
902
918
|
/** Holds the survey polygon AND all shooting/mapping params (per WPML nesting). */
|
|
903
919
|
Placemark: Mapping2dPlacemark;
|
|
904
920
|
}
|
|
905
|
-
interface Mapping3dTemplate extends TemplateDocumentBase {
|
|
921
|
+
export interface Mapping3dTemplate extends TemplateDocumentBase {
|
|
906
922
|
Folder: Mapping3dFolder;
|
|
907
923
|
}
|
|
908
|
-
interface Mapping3dFolder {
|
|
924
|
+
export interface Mapping3dFolder {
|
|
909
925
|
templateType: "mapping3d";
|
|
910
926
|
templateId: number;
|
|
911
927
|
waylineCoordinateSysParam: WaylineCoordinateSysParam;
|
|
@@ -914,10 +930,10 @@ interface Mapping3dFolder {
|
|
|
914
930
|
/** Holds the survey polygon AND all shooting/mapping params. */
|
|
915
931
|
Placemark: Mapping3dPlacemark;
|
|
916
932
|
}
|
|
917
|
-
interface TargetDetectionTemplate extends TemplateDocumentBase {
|
|
933
|
+
export interface TargetDetectionTemplate extends TemplateDocumentBase {
|
|
918
934
|
Folder: TargetDetectionFolder;
|
|
919
935
|
}
|
|
920
|
-
interface TargetDetectionFolder {
|
|
936
|
+
export interface TargetDetectionFolder {
|
|
921
937
|
templateType: "targetdetection";
|
|
922
938
|
templateId: number;
|
|
923
939
|
waylineCoordinateSysParam: WaylineCoordinateSysParam;
|
|
@@ -925,10 +941,10 @@ interface TargetDetectionFolder {
|
|
|
925
941
|
payloadParam?: PayloadParam;
|
|
926
942
|
Placemark: TargetDetectionPlacemark;
|
|
927
943
|
}
|
|
928
|
-
interface MappingStripTemplate extends TemplateDocumentBase {
|
|
944
|
+
export interface MappingStripTemplate extends TemplateDocumentBase {
|
|
929
945
|
Folder: MappingStripFolder;
|
|
930
946
|
}
|
|
931
|
-
interface MappingStripFolder {
|
|
947
|
+
export interface MappingStripFolder {
|
|
932
948
|
templateType: "mappingStrip";
|
|
933
949
|
templateId: number;
|
|
934
950
|
waylineCoordinateSysParam: WaylineCoordinateSysParam;
|
|
@@ -944,7 +960,7 @@ interface MappingStripFolder {
|
|
|
944
960
|
* The XML `<wpml:startActionGroup>` element only wraps raw `<wpml:action>` items —
|
|
945
961
|
* it has no `actionGroupId`, `actionGroupMode`, or `actionTrigger` elements.
|
|
946
962
|
*/
|
|
947
|
-
interface StartActionGroup {
|
|
963
|
+
export interface StartActionGroup {
|
|
948
964
|
action: Action[];
|
|
949
965
|
}
|
|
950
966
|
/**
|
|
@@ -954,11 +970,11 @@ interface StartActionGroup {
|
|
|
954
970
|
* Cardinality: `Folder` is `1..*` — `mapping3d` templates expand to 5 Folders
|
|
955
971
|
* (1 ortho + 4 oblique).
|
|
956
972
|
*/
|
|
957
|
-
interface Waylines {
|
|
973
|
+
export interface Waylines {
|
|
958
974
|
missionConfig: MissionConfig;
|
|
959
975
|
Folder: WaylinesFolder[];
|
|
960
976
|
}
|
|
961
|
-
interface WaylinesFolder {
|
|
977
|
+
export interface WaylinesFolder {
|
|
962
978
|
/** Links back to template Folder's `templateId`. */
|
|
963
979
|
templateId: number;
|
|
964
980
|
waylineId: number;
|
|
@@ -1010,7 +1026,7 @@ interface PlanOptions {
|
|
|
1010
1026
|
*
|
|
1011
1027
|
* Mapping templates require `options.lineSpacing` (meters between flight lines).
|
|
1012
1028
|
*/
|
|
1013
|
-
declare function plan(template: Template, options?: PlanOptions): Waylines;
|
|
1029
|
+
export declare function plan(template: Template, options?: PlanOptions): Waylines;
|
|
1014
1030
|
//#endregion
|
|
1015
1031
|
//#region src/plan/plan-mapping-strip.d.ts
|
|
1016
1032
|
interface MappingStripRegion {
|
|
@@ -1040,12 +1056,14 @@ interface MappingStripDerived {
|
|
|
1040
1056
|
surveyAreaSize: number;
|
|
1041
1057
|
regions: MappingStripRegion[];
|
|
1042
1058
|
flightRoutes: MappingStripRegionRoute[];
|
|
1059
|
+
/** Horizontal mission distance, including known ingress and finish travel. */
|
|
1043
1060
|
totalFlightLength: Meters;
|
|
1044
1061
|
photoSpacing: Meters;
|
|
1045
1062
|
estimatedPhotoCount: number;
|
|
1063
|
+
/** Estimated horizontal flying seconds at the configured work/transit speeds. */
|
|
1046
1064
|
estimatedDuration: number;
|
|
1047
1065
|
}
|
|
1048
|
-
declare function deriveMappingStrip(template: MappingStripTemplate, options?: PlanOptions): MappingStripDerived;
|
|
1066
|
+
export declare function deriveMappingStrip(template: MappingStripTemplate, options?: PlanOptions): MappingStripDerived;
|
|
1049
1067
|
//#endregion
|
|
1050
1068
|
//#region src/validate/index.d.ts
|
|
1051
1069
|
/**
|
|
@@ -1054,10 +1072,10 @@ declare function deriveMappingStrip(template: MappingStripTemplate, options?: Pl
|
|
|
1054
1072
|
*
|
|
1055
1073
|
* The function is non-throwing by design — callers decide how to react.
|
|
1056
1074
|
*/
|
|
1057
|
-
declare function validate(doc: Template | Waylines): Issue[];
|
|
1075
|
+
export declare function validate(doc: Template | Waylines): Issue[];
|
|
1058
1076
|
//#endregion
|
|
1059
1077
|
//#region src/plan/geometry.d.ts
|
|
1060
1078
|
/** Great-circle distance between two WGS-84 coordinates, in meters. */
|
|
1061
|
-
declare function haversineMeters(a: LngLat, b: LngLat): number;
|
|
1079
|
+
export declare function haversineMeters(a: LngLat, b: LngLat): number;
|
|
1062
1080
|
//#endregion
|
|
1063
|
-
export {
|
|
1081
|
+
export type { MappingStripDerived, MappingStripRegion, MappingStripRegionRoute, PlanOptions };
|