@vesium/shared 1.0.1-beta.25
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.cjs +396 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +409 -0
- package/dist/index.js +397 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.cjs +2 -0
- package/dist/index.min.cjs.map +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/dist/index.min.mjs +2 -0
- package/dist/index.min.mjs.map +1 -0
- package/dist/index.mjs +396 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +23 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const cesium = require("cesium");
|
|
4
|
+
const shared = require("@vueuse/shared");
|
|
5
|
+
const toString = Object.prototype.toString;
|
|
6
|
+
function isDef(val) {
|
|
7
|
+
return typeof val !== "undefined";
|
|
8
|
+
}
|
|
9
|
+
function isBoolean(val) {
|
|
10
|
+
return typeof val === "boolean";
|
|
11
|
+
}
|
|
12
|
+
function isFunction(val) {
|
|
13
|
+
return typeof val === "function";
|
|
14
|
+
}
|
|
15
|
+
function isNumber(val) {
|
|
16
|
+
return typeof val === "number";
|
|
17
|
+
}
|
|
18
|
+
function isString(val) {
|
|
19
|
+
return typeof val === "string";
|
|
20
|
+
}
|
|
21
|
+
function isObject(val) {
|
|
22
|
+
return toString.call(val) === "[object Object]";
|
|
23
|
+
}
|
|
24
|
+
function isWindow(val) {
|
|
25
|
+
return typeof window !== "undefined" && toString.call(val) === "[object Window]";
|
|
26
|
+
}
|
|
27
|
+
function isPromise(val) {
|
|
28
|
+
return !!val && (typeof val === "object" || typeof val === "function") && typeof val.then === "function";
|
|
29
|
+
}
|
|
30
|
+
function isElement(val) {
|
|
31
|
+
return !!(val && val.nodeName && val.nodeType === 1);
|
|
32
|
+
}
|
|
33
|
+
const isArray = Array.isArray;
|
|
34
|
+
function isBase64(val) {
|
|
35
|
+
const reg = /^\s*data:([a-z]+\/[\d+.a-z-]+(;[a-z-]+=[\da-z-]+)?)?(;base64)?,([\s\w!$%&'()*+,./:;=?@~-]*?)\s*$/i;
|
|
36
|
+
return reg.test(val);
|
|
37
|
+
}
|
|
38
|
+
function assertError(condition, error) {
|
|
39
|
+
if (condition) {
|
|
40
|
+
throw new Error(error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function cesiumEquals(left, right) {
|
|
44
|
+
return left === right || isFunction(left == null ? void 0 : left.equals) && left.equals(right) || isFunction(right == null ? void 0 : right.equals) && right.equals(left);
|
|
45
|
+
}
|
|
46
|
+
function isCesiumConstant(value) {
|
|
47
|
+
return !cesium.defined(value) || !!value.isConstant;
|
|
48
|
+
}
|
|
49
|
+
function canvasCoordToCartesian(canvasCoord, scene, mode = "auto") {
|
|
50
|
+
if (mode === "pickPosition") {
|
|
51
|
+
return scene.pickPosition(canvasCoord);
|
|
52
|
+
} else if (mode === "globePick") {
|
|
53
|
+
const ray = scene.camera.getPickRay(canvasCoord);
|
|
54
|
+
return ray && scene.globe.pick(ray, scene);
|
|
55
|
+
} else {
|
|
56
|
+
if (scene.globe.depthTestAgainstTerrain) {
|
|
57
|
+
return scene.pickPosition(canvasCoord);
|
|
58
|
+
}
|
|
59
|
+
const position1 = scene.pickPosition(canvasCoord);
|
|
60
|
+
const ray = scene.camera.getPickRay(canvasCoord);
|
|
61
|
+
const position2 = ray && scene.globe.pick(ray, scene);
|
|
62
|
+
if (!position1) {
|
|
63
|
+
return position2;
|
|
64
|
+
}
|
|
65
|
+
const height1 = (position1 && cesium.Ellipsoid.WGS84.cartesianToCartographic(position1).height) ?? 0;
|
|
66
|
+
const height2 = (position2 && cesium.Ellipsoid.WGS84.cartesianToCartographic(position2).height) ?? 0;
|
|
67
|
+
return height1 < height2 ? position1 : position2;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function cartesianToCanvasCoord(position, scene) {
|
|
71
|
+
return scene.cartesianToCanvasCoordinates(position);
|
|
72
|
+
}
|
|
73
|
+
function toCoord(position, options = {}) {
|
|
74
|
+
if (!position) {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
const { type = "Array", alt = false } = options;
|
|
78
|
+
let longitude, latitude, height;
|
|
79
|
+
if (position instanceof cesium.Cartesian3) {
|
|
80
|
+
const cartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
|
|
81
|
+
longitude = cesium.Math.toDegrees(cartographic.longitude);
|
|
82
|
+
latitude = cesium.Math.toDegrees(cartographic.latitude);
|
|
83
|
+
height = cartographic.height;
|
|
84
|
+
} else if (position instanceof cesium.Cartographic) {
|
|
85
|
+
const cartographic = position;
|
|
86
|
+
longitude = cesium.Math.toDegrees(cartographic.longitude);
|
|
87
|
+
latitude = cesium.Math.toDegrees(cartographic.latitude);
|
|
88
|
+
height = cartographic.height;
|
|
89
|
+
} else if (Array.isArray(position)) {
|
|
90
|
+
longitude = cesium.Math.toDegrees(position[0]);
|
|
91
|
+
latitude = cesium.Math.toDegrees(position[1]);
|
|
92
|
+
height = position[2];
|
|
93
|
+
} else {
|
|
94
|
+
longitude = position.longitude;
|
|
95
|
+
latitude = position.latitude;
|
|
96
|
+
height = position.height;
|
|
97
|
+
}
|
|
98
|
+
if (type === "Array") {
|
|
99
|
+
return alt ? [longitude, latitude, height] : [longitude, latitude];
|
|
100
|
+
} else {
|
|
101
|
+
return alt ? { longitude, latitude, height } : { longitude, latitude };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function dmsEncode(degrees, precision = 3) {
|
|
105
|
+
const str = `${degrees}`;
|
|
106
|
+
let i = str.indexOf(".");
|
|
107
|
+
const d = i < 0 ? str : str.slice(0, Math.max(0, i));
|
|
108
|
+
let m = "0";
|
|
109
|
+
let s = "0";
|
|
110
|
+
if (i > 0) {
|
|
111
|
+
m = `0${str.slice(Math.max(0, i))}`;
|
|
112
|
+
m = `${+m * 60}`;
|
|
113
|
+
i = m.indexOf(".");
|
|
114
|
+
if (i > 0) {
|
|
115
|
+
s = `0${m.slice(Math.max(0, i))}`;
|
|
116
|
+
m = m.slice(0, Math.max(0, i));
|
|
117
|
+
s = `${+s * 60}`;
|
|
118
|
+
i = s.indexOf(".");
|
|
119
|
+
s = s.slice(0, Math.max(0, i + 4));
|
|
120
|
+
s = (+s).toFixed(precision);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return `${Math.abs(+d)}°${+m}′${+s}″`;
|
|
124
|
+
}
|
|
125
|
+
function dmsDecode(dmsCode) {
|
|
126
|
+
const [dd, msStr] = dmsCode.split("°") ?? [];
|
|
127
|
+
const [mm, sStr] = (msStr == null ? void 0 : msStr.split("′")) ?? [];
|
|
128
|
+
const ss = sStr == null ? void 0 : sStr.split("″")[0];
|
|
129
|
+
const d = Number(dd) || 0;
|
|
130
|
+
const m = (Number(mm) || 0) / 60;
|
|
131
|
+
const s = (Number(ss) || 0) / 60 / 60;
|
|
132
|
+
const degrees = d + m + s;
|
|
133
|
+
if (degrees === 0) {
|
|
134
|
+
return 0;
|
|
135
|
+
} else {
|
|
136
|
+
let res = degrees;
|
|
137
|
+
if (["W", "w", "S", "s"].includes(dmsCode[dmsCode.length - 1])) {
|
|
138
|
+
res = -res;
|
|
139
|
+
}
|
|
140
|
+
return res;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function degreesToDms(position, precision = 3) {
|
|
144
|
+
const coord = toCoord(position, { alt: true });
|
|
145
|
+
if (!coord) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const [longitude, latitude, height] = coord;
|
|
149
|
+
const x = dmsEncode(longitude, precision);
|
|
150
|
+
const y = dmsEncode(latitude, precision);
|
|
151
|
+
return [`${x}${longitude > 0 ? "E" : "W"}`, `${y}${latitude > 0 ? "N" : "S"}`, height];
|
|
152
|
+
}
|
|
153
|
+
function dmsToDegrees(dms) {
|
|
154
|
+
const [x, y, height] = dms;
|
|
155
|
+
const longitude = dmsDecode(x);
|
|
156
|
+
const latitude = dmsDecode(y);
|
|
157
|
+
return [longitude, latitude, Number(height) || 0];
|
|
158
|
+
}
|
|
159
|
+
class CesiumMaterial extends cesium.Material {
|
|
160
|
+
constructor(options) {
|
|
161
|
+
super(options);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function getMaterialCache(type) {
|
|
165
|
+
return cesium.Material._materialCache.getMaterial(type);
|
|
166
|
+
}
|
|
167
|
+
function addMaterialCache(type, material) {
|
|
168
|
+
return cesium.Material._materialCache.addMaterial(type, material);
|
|
169
|
+
}
|
|
170
|
+
function resolvePick(pick = {}) {
|
|
171
|
+
const { primitive, id, primitiveCollection, collection } = pick;
|
|
172
|
+
const entityCollection = id && id.entityCollection || null;
|
|
173
|
+
const dataSource = entityCollection && entityCollection.owner || null;
|
|
174
|
+
const ids = Array.isArray(id) ? id : [id].filter(Boolean);
|
|
175
|
+
return [
|
|
176
|
+
...ids,
|
|
177
|
+
primitive,
|
|
178
|
+
primitiveCollection,
|
|
179
|
+
collection,
|
|
180
|
+
entityCollection,
|
|
181
|
+
dataSource
|
|
182
|
+
].filter((e) => !!e);
|
|
183
|
+
}
|
|
184
|
+
function pickHitGraphic(pick, graphic) {
|
|
185
|
+
if (!Array.isArray(graphic) || !graphic.length) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const elements = resolvePick(pick);
|
|
189
|
+
if (!elements.length) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
return elements.some((element) => graphic.includes(element));
|
|
193
|
+
}
|
|
194
|
+
function isProperty(value) {
|
|
195
|
+
return value && isFunction(value.getValue);
|
|
196
|
+
}
|
|
197
|
+
function toPropertyValue(value, time) {
|
|
198
|
+
return isProperty(value) ? value.getValue(time) : value;
|
|
199
|
+
}
|
|
200
|
+
function toProperty(value, isConstant = false) {
|
|
201
|
+
return isProperty(value) ? value : isFunction(value) ? new cesium.CallbackProperty(value, isConstant) : new cesium.ConstantProperty(value);
|
|
202
|
+
}
|
|
203
|
+
function createPropertyField(scope, field, maybeProperty, readonly) {
|
|
204
|
+
let removeOwnerListener;
|
|
205
|
+
const ownerBinding = (value) => {
|
|
206
|
+
var _a;
|
|
207
|
+
removeOwnerListener == null ? void 0 : removeOwnerListener();
|
|
208
|
+
if (cesium.defined(value == null ? void 0 : value.definitionChanged)) {
|
|
209
|
+
removeOwnerListener = (_a = value == null ? void 0 : value.definitionChanged) == null ? void 0 : _a.addEventListener(() => {
|
|
210
|
+
scope.definitionChanged.raiseEvent(scope, field, value, value);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const privateField = `_${field}`;
|
|
215
|
+
const property = toProperty(maybeProperty);
|
|
216
|
+
scope[privateField] = property;
|
|
217
|
+
ownerBinding(property);
|
|
218
|
+
if (readonly) {
|
|
219
|
+
Object.defineProperty(scope, field, {
|
|
220
|
+
get() {
|
|
221
|
+
return scope[privateField];
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
} else {
|
|
225
|
+
Object.defineProperty(scope, field, {
|
|
226
|
+
get() {
|
|
227
|
+
return scope[privateField];
|
|
228
|
+
},
|
|
229
|
+
set(value) {
|
|
230
|
+
const previous = scope[privateField];
|
|
231
|
+
if (scope[privateField] !== value) {
|
|
232
|
+
scope[privateField] = value;
|
|
233
|
+
ownerBinding(value);
|
|
234
|
+
if (cesium.defined(scope.definitionChanged)) {
|
|
235
|
+
scope.definitionChanged.raiseEvent(scope, field, value, previous);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function createCesiumAttribute(scope, key, value, options = {}) {
|
|
243
|
+
const allowToProperty = !!options.toProperty;
|
|
244
|
+
const shallowClone = !!options.shallowClone;
|
|
245
|
+
const changedEventKey = options.changedEventKey || "definitionChanged";
|
|
246
|
+
const changedEvent = Reflect.get(scope, changedEventKey);
|
|
247
|
+
const privateKey = `_${String(key)}`;
|
|
248
|
+
const attribute = allowToProperty ? toProperty(value) : value;
|
|
249
|
+
Reflect.set(scope, privateKey, attribute);
|
|
250
|
+
const obj = {
|
|
251
|
+
get() {
|
|
252
|
+
const value2 = Reflect.get(scope, privateKey);
|
|
253
|
+
if (shallowClone) {
|
|
254
|
+
return Array.isArray(value2) ? [...value2] : { ...value2 };
|
|
255
|
+
} else {
|
|
256
|
+
return value2;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
let previousListener;
|
|
261
|
+
const serial = (property, previous) => {
|
|
262
|
+
var _a;
|
|
263
|
+
previousListener == null ? void 0 : previousListener();
|
|
264
|
+
previousListener = (_a = property == null ? void 0 : property.definitionChanged) == null ? void 0 : _a.addEventListener(() => {
|
|
265
|
+
changedEvent == null ? void 0 : changedEvent.raiseEvent.bind(changedEvent)(scope, key, property, previous);
|
|
266
|
+
});
|
|
267
|
+
};
|
|
268
|
+
if (!options.readonly) {
|
|
269
|
+
if (allowToProperty && isProperty(value)) {
|
|
270
|
+
serial(value);
|
|
271
|
+
}
|
|
272
|
+
obj.set = (value2) => {
|
|
273
|
+
if (allowToProperty && !isProperty(value2)) {
|
|
274
|
+
throw new Error(`The value of ${String(key)} must be a Cesium.Property object`);
|
|
275
|
+
}
|
|
276
|
+
const previous = Reflect.get(scope, privateKey);
|
|
277
|
+
if (previous !== value2) {
|
|
278
|
+
Reflect.set(scope, privateKey, value2);
|
|
279
|
+
changedEvent == null ? void 0 : changedEvent.raiseEvent.bind(changedEvent)(scope, key, value2, previous);
|
|
280
|
+
if (allowToProperty) {
|
|
281
|
+
serial(value2);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
Object.defineProperty(scope, key, obj);
|
|
287
|
+
}
|
|
288
|
+
function createCesiumProperty(scope, key, value, options = {}) {
|
|
289
|
+
return createCesiumAttribute(scope, key, value, { ...options, toProperty: true });
|
|
290
|
+
}
|
|
291
|
+
function throttle(callback, delay = 100, trailing = true, leading = false) {
|
|
292
|
+
const restList = [];
|
|
293
|
+
let tracked = false;
|
|
294
|
+
const trigger = async () => {
|
|
295
|
+
await shared.promiseTimeout(delay);
|
|
296
|
+
tracked = false;
|
|
297
|
+
if (leading) {
|
|
298
|
+
try {
|
|
299
|
+
callback(...restList[0]);
|
|
300
|
+
} catch (error) {
|
|
301
|
+
console.error(error);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (trailing && (!leading || restList.length > 1)) {
|
|
305
|
+
try {
|
|
306
|
+
callback(...restList[restList.length - 1]);
|
|
307
|
+
} catch (error) {
|
|
308
|
+
console.error(error);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
restList.length = 0;
|
|
312
|
+
};
|
|
313
|
+
return (...rest) => {
|
|
314
|
+
if (restList.length < 2) {
|
|
315
|
+
restList.push(rest);
|
|
316
|
+
} else {
|
|
317
|
+
restList[1] = rest;
|
|
318
|
+
}
|
|
319
|
+
if (!tracked) {
|
|
320
|
+
tracked = true;
|
|
321
|
+
trigger();
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
function toCartesian3(position) {
|
|
326
|
+
if (!position) {
|
|
327
|
+
return void 0;
|
|
328
|
+
}
|
|
329
|
+
if (position instanceof cesium.Cartesian3) {
|
|
330
|
+
return position.clone();
|
|
331
|
+
} else if (position instanceof cesium.Cartographic) {
|
|
332
|
+
return cesium.Ellipsoid.WGS84.cartographicToCartesian(position);
|
|
333
|
+
} else if (Array.isArray(position)) {
|
|
334
|
+
return cesium.Cartesian3.fromDegrees(position[0], position[1], position[2]);
|
|
335
|
+
} else {
|
|
336
|
+
return cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, position.height);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function toCartographic(position) {
|
|
340
|
+
if (!position) {
|
|
341
|
+
return void 0;
|
|
342
|
+
}
|
|
343
|
+
if (position instanceof cesium.Cartesian3) {
|
|
344
|
+
return cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
|
|
345
|
+
} else if (position instanceof cesium.Cartographic) {
|
|
346
|
+
return position.clone();
|
|
347
|
+
} else if (Array.isArray(position)) {
|
|
348
|
+
return cesium.Cartographic.fromDegrees(position[0], position[1], position[2]);
|
|
349
|
+
} else {
|
|
350
|
+
return cesium.Cartographic.fromDegrees(position.longitude, position.latitude, position.height);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
function arrayDifference(list, oldList) {
|
|
354
|
+
const oldListSet = new Set(oldList);
|
|
355
|
+
const added = list.filter((obj) => !oldListSet.has(obj));
|
|
356
|
+
const newListSet = new Set(list);
|
|
357
|
+
const removed = (oldList == null ? void 0 : oldList.filter((obj) => !newListSet.has(obj))) ?? [];
|
|
358
|
+
return { added, removed };
|
|
359
|
+
}
|
|
360
|
+
exports.CesiumMaterial = CesiumMaterial;
|
|
361
|
+
exports.addMaterialCache = addMaterialCache;
|
|
362
|
+
exports.arrayDifference = arrayDifference;
|
|
363
|
+
exports.assertError = assertError;
|
|
364
|
+
exports.canvasCoordToCartesian = canvasCoordToCartesian;
|
|
365
|
+
exports.cartesianToCanvasCoord = cartesianToCanvasCoord;
|
|
366
|
+
exports.cesiumEquals = cesiumEquals;
|
|
367
|
+
exports.createCesiumAttribute = createCesiumAttribute;
|
|
368
|
+
exports.createCesiumProperty = createCesiumProperty;
|
|
369
|
+
exports.createPropertyField = createPropertyField;
|
|
370
|
+
exports.degreesToDms = degreesToDms;
|
|
371
|
+
exports.dmsDecode = dmsDecode;
|
|
372
|
+
exports.dmsEncode = dmsEncode;
|
|
373
|
+
exports.dmsToDegrees = dmsToDegrees;
|
|
374
|
+
exports.getMaterialCache = getMaterialCache;
|
|
375
|
+
exports.isArray = isArray;
|
|
376
|
+
exports.isBase64 = isBase64;
|
|
377
|
+
exports.isBoolean = isBoolean;
|
|
378
|
+
exports.isCesiumConstant = isCesiumConstant;
|
|
379
|
+
exports.isDef = isDef;
|
|
380
|
+
exports.isElement = isElement;
|
|
381
|
+
exports.isFunction = isFunction;
|
|
382
|
+
exports.isNumber = isNumber;
|
|
383
|
+
exports.isObject = isObject;
|
|
384
|
+
exports.isPromise = isPromise;
|
|
385
|
+
exports.isProperty = isProperty;
|
|
386
|
+
exports.isString = isString;
|
|
387
|
+
exports.isWindow = isWindow;
|
|
388
|
+
exports.pickHitGraphic = pickHitGraphic;
|
|
389
|
+
exports.resolvePick = resolvePick;
|
|
390
|
+
exports.throttle = throttle;
|
|
391
|
+
exports.toCartesian3 = toCartesian3;
|
|
392
|
+
exports.toCartographic = toCartographic;
|
|
393
|
+
exports.toCoord = toCoord;
|
|
394
|
+
exports.toProperty = toProperty;
|
|
395
|
+
exports.toPropertyValue = toPropertyValue;
|
|
396
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/is.ts","../src/cesiumUtils.ts","../src/convertCoord.ts","../src/toCoord.ts","../src/convertDMS.ts","../src/material.ts","../src/pick.ts","../src/property.ts","../src/throttle.ts","../src/toCartesian3.ts","../src/toCartographic.ts","../src/utils.ts"],"sourcesContent":["import type { AnyFn } from './types';\n\nconst toString = Object.prototype.toString;\n\nexport function isDef<T = any>(val?: T): val is T {\n return typeof val !== 'undefined';\n}\n\nexport function isBoolean(val: any): val is boolean {\n return typeof val === 'boolean';\n}\n\nexport function isFunction<T extends AnyFn>(val: any): val is T {\n return typeof val === 'function';\n}\n\nexport function isNumber(val: any): val is number {\n return typeof val === 'number';\n}\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isObject(val: any): val is object {\n return toString.call(val) === '[object Object]';\n}\n\nexport function isWindow(val: any): val is Window {\n return typeof window !== 'undefined' && toString.call(val) === '[object Window]';\n}\n\nexport function isPromise<T extends Promise<any>>(val: any): val is T {\n return !!val && (typeof val === 'object' || typeof val === 'function') && typeof (val as any).then === 'function';\n}\n\nexport function isElement<T extends Element>(val: any): val is T {\n return !!(val && val.nodeName && val.nodeType === 1);\n}\n\nexport const isArray = Array.isArray;\n\nexport function isBase64(val: string): boolean {\n // eslint-disable-next-line regexp/no-unused-capturing-group, regexp/no-super-linear-backtracking\n const reg = /^\\s*data:([a-z]+\\/[\\d+.a-z-]+(;[a-z-]+=[\\da-z-]+)?)?(;base64)?,([\\s\\w!$%&'()*+,./:;=?@~-]*?)\\s*$/i;\n return reg.test(val);\n}\n\nexport function assertError(condition: boolean, error: any) {\n if (condition) {\n throw new Error(error);\n }\n}\n","import type { MaybeProperty } from './property';\nimport { defined } from 'cesium';\nimport { isFunction } from './is';\n\n/**\n * Determines if two Cesium objects are equal.\n *\n * This function not only judges whether the instances are equal,\n * but also judges the equals method in the example.\n *\n * @param left The first Cesium object\n * @param right The second Cesium object\n * @returns Returns true if the two Cesium objects are equal, otherwise false\n */\nexport function cesiumEquals(left: any, right: any): boolean {\n return left === right || (isFunction(left?.equals) && left.equals(right)) || (isFunction(right?.equals) && right.equals(left));\n}\n\n/**\n * Determines if the Cesium property is a constant.\n *\n * @param value Cesium property\n */\nexport function isCesiumConstant(value: MaybeProperty): boolean {\n return !defined(value) || !!value.isConstant;\n}\n","import type { Cartesian2, Cartesian3, Scene } from 'cesium';\nimport { Ellipsoid } from 'cesium';\n\n/**\n * Convert canvas coordinates to Cartesian coordinates\n *\n * @param canvasCoord Canvas coordinates\n * @param scene Cesium.Scene instance\n * @param mode optional values are 'pickPosition' | 'globePick' | 'auto' | 'noHeight' @default 'auto'\n *\n * `pickPosition`: Use scene.pickPosition for conversion, which can be used for picking models, oblique photography, etc.\n * However, if depth detection is not enabled (globe.depthTestAgainstTerrain=false), picking terrain or inaccurate issues may occur\n *\n * `globePick`: Use camera.getPickRay for conversion, which cannot be used for picking models or oblique photography,\n * but can be used for picking terrain. If terrain does not exist, the picked elevation is 0\n *\n * `auto`: Automatically determine which picking content to return\n *\n * Calculation speed comparison: globePick > auto >= pickPosition\n */\nexport function canvasCoordToCartesian(\n canvasCoord: Cartesian2,\n scene: Scene,\n mode: 'pickPosition' | 'globePick' | 'auto' = 'auto',\n): Cartesian3 | undefined {\n if (mode === 'pickPosition') {\n return scene.pickPosition(canvasCoord);\n }\n else if (mode === 'globePick') {\n const ray = scene.camera.getPickRay(canvasCoord);\n return ray && scene.globe.pick(ray, scene);\n }\n else {\n // depth test\n if (scene.globe.depthTestAgainstTerrain) {\n return scene.pickPosition(canvasCoord);\n }\n const position1 = scene.pickPosition(canvasCoord);\n const ray = scene.camera.getPickRay(canvasCoord);\n const position2 = ray && scene.globe.pick(ray, scene);\n if (!position1) {\n return position2;\n }\n const height1 = (position1 && Ellipsoid.WGS84.cartesianToCartographic(position1).height) ?? 0;\n const height2 = (position2 && Ellipsoid.WGS84.cartesianToCartographic(position2).height) ?? 0;\n return height1 < height2 ? position1 : position2;\n }\n}\n\n/**\n * Convert Cartesian coordinates to canvas coordinates\n *\n * @param position Cartesian coordinates\n * @param scene Cesium.Scene instance\n */\nexport function cartesianToCanvasCoord(position: Cartesian3, scene: Scene): Cartesian2 {\n return scene.cartesianToCanvasCoordinates(position);\n}\n","import type { CommonCoord, CoordArray, CoordArray_ALT, CoordObject, CoordObject_ALT } from './types';\nimport { Cartesian3, Cartographic, Ellipsoid, Math } from 'cesium';\n\ninterface ToCoordOptions<T extends 'Array' | 'Object', Alt extends boolean> {\n /**\n * Return type\n * @default 'Array'\n */\n type?: T;\n\n /**\n * Whether to return altitude information\n */\n alt?: Alt;\n\n}\n\nexport type ToCoordReturn<T extends 'Array' | 'Object', Alt extends boolean> =\n T extends 'Array' ?\n Alt extends true ?\n CoordArray_ALT :\n CoordArray\n : Alt extends true ?\n CoordObject_ALT\n : CoordObject;\n\n/**\n * Converts coordinates to an array or object in the specified format.\n *\n * @param position The coordinate to be converted, which can be a Cartesian3, Cartographic, array, or object.\n * @param options Conversion options, including conversion type and whether to include altitude information.\n * @returns The converted coordinate, which may be an array or object. If the input position is empty, undefined is returned.\n *\n * @template T Conversion type, optional values are 'Array' or 'Object', @default 'Array'.\n * @template Alt Whether to include altitude information, default is false\n */\nexport function toCoord<T extends 'Array' | 'Object' = 'Array', Alt extends boolean = false>(\n position?: CommonCoord,\n options: ToCoordOptions<T, Alt> = {},\n): ToCoordReturn<T, Alt> | undefined {\n if (!position) {\n return undefined;\n }\n\n const { type = 'Array', alt = false } = options;\n\n let longitude: number, latitude: number, height: number | undefined;\n\n if (position instanceof Cartesian3) {\n const cartographic = Ellipsoid.WGS84.cartesianToCartographic(position);\n longitude = Math.toDegrees(cartographic.longitude);\n latitude = Math.toDegrees(cartographic.latitude);\n height = cartographic.height;\n }\n else if (position instanceof Cartographic) {\n const cartographic = position;\n longitude = Math.toDegrees(cartographic.longitude);\n latitude = Math.toDegrees(cartographic.latitude);\n height = cartographic.height;\n }\n else if (Array.isArray(position)) {\n longitude = Math.toDegrees(position[0]);\n latitude = Math.toDegrees(position[1]);\n height = position[2];\n }\n else {\n longitude = (position.longitude);\n latitude = (position.latitude);\n height = (position as any).height;\n }\n\n if (type === 'Array') {\n return alt ? [longitude, latitude, height] : [longitude, latitude] as any;\n }\n else {\n return alt ? { longitude, latitude, height } : { longitude, latitude } as any;\n }\n}\n","import type { CommonCoord, CoordArray_ALT } from './types';\nimport { toCoord } from './toCoord';\n\nexport type DMSCoord = [longitude: string, latitude: string, height?: number];\n\n/**\n * Convert degrees to DMS (Degrees Minutes Seconds) format string\n *\n * @param degrees The angle value\n * @param precision The number of decimal places to retain for the seconds, defaults to 3\n * @returns A DMS formatted string in the format: degrees° minutes′ seconds″\n */\nexport function dmsEncode(degrees: number, precision = 3): string {\n const str = `${degrees}`;\n let i = str.indexOf('.');\n const d = i < 0 ? str : str.slice(0, Math.max(0, i));\n let m = '0';\n let s = '0';\n if (i > 0) {\n m = `0${str.slice(Math.max(0, i))}`;\n m = `${+m * 60}`;\n i = m.indexOf('.');\n if (i > 0) {\n s = `0${m.slice(Math.max(0, i))}`;\n m = m.slice(0, Math.max(0, i));\n s = `${+s * 60}`;\n i = s.indexOf('.');\n s = s.slice(0, Math.max(0, i + 4));\n s = (+s).toFixed(precision);\n }\n }\n return `${Math.abs(+d)}°${+m}′${+s}″`;\n}\n\n/**\n * Decode a DMS (Degrees Minutes Seconds) formatted string to a decimal angle value\n *\n * @param dmsCode DMS formatted string, e.g. \"120°30′45″N\"\n * @returns The decoded decimal angle value, or 0 if decoding fails\n */\nexport function dmsDecode(dmsCode: string) {\n const [dd, msStr] = dmsCode.split('°') ?? [];\n const [mm, sStr] = msStr?.split('′') ?? [];\n const ss = sStr?.split('″')[0];\n\n const d = Number(dd) || 0;\n const m = (Number(mm) || 0) / 60;\n const s = (Number(ss) || 0) / 60 / 60;\n const degrees = d + m + s;\n if (degrees === 0) {\n return 0;\n }\n else {\n let res = degrees;\n // South, West are negative numbers\n if (['W', 'w', 'S', 's'].includes(dmsCode[dmsCode.length - 1]!)) {\n res = -res;\n }\n return res;\n }\n}\n\n/**\n * Convert latitude and longitude coordinates to degrees-minutes-seconds format\n *\n * @param position The latitude and longitude coordinates\n * @param precision The number of decimal places to retain for 'seconds', default is 3\n * @returns Returns the coordinates in degrees-minutes-seconds format, or undefined if the conversion fails\n */\nexport function degreesToDms(position: CommonCoord, precision = 3): DMSCoord | undefined {\n const coord = toCoord(position, { alt: true });\n if (!coord) {\n return;\n }\n const [longitude, latitude, height] = coord;\n const x = dmsEncode(longitude, precision);\n const y = dmsEncode(latitude, precision);\n return [`${x}${longitude > 0 ? 'E' : 'W'}`, `${y}${latitude > 0 ? 'N' : 'S'}`, height];\n}\n\n/**\n * Convert DMS (Degrees Minutes Seconds) format to decimal degrees for latitude and longitude coordinates\n *\n * @param dms The latitude or longitude coordinate in DMS format\n * @returns Returns the coordinate in decimal degrees format, or undefined if the conversion fails\n */\nexport function dmsToDegrees(dms: DMSCoord): CoordArray_ALT | undefined {\n const [x, y, height] = dms;\n const longitude = dmsDecode(x);\n const latitude = dmsDecode(y);\n return [longitude, latitude, (Number(height)) || 0];\n}\n","import type { Event, JulianDate, MaterialProperty, TextureMagnificationFilter, TextureMinificationFilter } from 'cesium';\n\nimport { Material } from 'cesium';\n\n/**\n * Cesium.Material.fabric参数\n */\nexport interface CesiumMaterialFabricOptions<U> {\n /**\n * 用于声明 fabric 对象最终会生成什么材质,如果是官方内置的,直接用官方内置的,否则则创建自定义的材质并缓存。\n */\n type: string;\n /**\n * 可再塞进去一层子级的 fabric,构成复合材质\n */\n materials?: Material;\n /**\n * glsl代码\n */\n source?: string;\n components?: {\n diffuse?: string;\n alpha?: string;\n };\n /**\n * 传glsl代码的变量\n */\n uniforms?: U & Record<string, any>;\n}\n\n/**\n * Cesium.Material参数\n */\nexport interface CesiumMaterialConstructorOptions<U> {\n /**\n * 严格模式\n */\n strict?: boolean;\n /**\n * translucent\n */\n translucent?: boolean | ((...params: any[]) => any);\n /**\n * 缩小滤镜\n */\n minificationFilter?: TextureMinificationFilter;\n /**\n * 放大滤镜\n */\n magnificationFilter?: TextureMagnificationFilter;\n /**\n * 矩阵配置\n */\n fabric: CesiumMaterialFabricOptions<U>;\n}\n\n/**\n * 仅作为`Cesium.Material`的类型修复\n */\nexport class CesiumMaterial<U> extends Material {\n constructor(options: CesiumMaterialConstructorOptions<U>) {\n super(options);\n }\n\n /**\n * 矩阵配置\n */\n declare fabric: CesiumMaterialFabricOptions<U>;\n}\n\n/**\n * 仅作为`Cesium.MaterialProperty`的类型修复\n */\nexport interface CesiumMaterialProperty<V> extends MaterialProperty {\n get isConstant(): boolean;\n\n get definitionChanged(): Event<(scope: this, field: string, value: any, previous: any) => void>;\n\n getType: (time: JulianDate) => string;\n\n getValue: (time: JulianDate, result?: V) => V;\n\n equals: (other?: any) => boolean;\n}\n\n/**\n * Get material from cache, alias of `Material._materialCache.getMaterial`\n */\nexport function getMaterialCache<T extends Material = CesiumMaterial<any>>(type: string): T | undefined {\n return (Material as any)._materialCache.getMaterial(type);\n}\n\n/**\n * Add material to Cesium's material cache, alias of `Material._materialCache.addMaterial`\n */\nexport function addMaterialCache(type: string, material: CesiumMaterialConstructorOptions<any>): void {\n return (Material as any)._materialCache.addMaterial(type, material);\n}\n","/**\n * Analyze the result of Cesium's `scene.pick` and convert it to an array format\n */\nexport function resolvePick(pick: any = {}): any[] {\n const { primitive, id, primitiveCollection, collection } = pick;\n const entityCollection = (id && id.entityCollection) || null;\n const dataSource = (entityCollection && entityCollection.owner) || null;\n const ids = Array.isArray(id) ? id : [id].filter(Boolean); // When aggregating entities, ensure id is an array and filter out falsy values\n return [\n ...ids,\n primitive,\n primitiveCollection,\n collection,\n entityCollection,\n dataSource,\n ].filter(e => !!e);\n}\n\n/**\n * Determine if the given array of graphics is hit by Cesium's `scene.pick`\n *\n * @param pick The `scene.pick` object used for matching\n * @param graphic An array of graphics to check for hits\n */\nexport function pickHitGraphic(pick: any, graphic: any | any[]): boolean {\n if (!Array.isArray(graphic) || !graphic.length) {\n return false;\n }\n const elements = resolvePick(pick);\n if (!elements.length) {\n return false;\n }\n return elements.some(element => graphic.includes(element));\n}\n","import type { Event, JulianDate, Property } from 'cesium';\nimport { CallbackProperty, ConstantProperty, defined } from 'cesium';\nimport { isFunction } from './is';\n\nexport type MaybeProperty<T = any> = T | { getValue: (time?: JulianDate) => T };\n\nexport type MaybePropertyOrGetter<T = any> = MaybeProperty<T> | (() => T);\n\n/**\n * Is Cesium.Property\n * @param value - The target object\n */\nexport function isProperty(value: any): value is Property {\n return value && isFunction(value.getValue);\n}\n\n/**\n * Converts a value that may be a Property into its target value, @see {toProperty} for the reverse operation\n * ```typescript\n * toPropertyValue('val') //=> 'val'\n * toPropertyValue(new ConstantProperty('val')) //=> 'val'\n * toPropertyValue(new CallbackProperty(()=>'val')) //=> 'val'\n * ```\n *\n * @param value - The value to convert\n */\nexport function toPropertyValue<T = unknown>(value: MaybeProperty<T>, time?: JulianDate): T {\n return isProperty(value) ? value.getValue(time as any) : value;\n}\n\nexport type PropertyCallback<T = any> = (time: JulianDate, result?: T) => T;\n\n/**\n * Converts a value that may be a Property into a Property object, @see {toPropertyValue} for the reverse operation\n *\n * @param value - The property value or getter to convert, can be undefined or null\n * @param isConstant - The second parameter for converting to CallbackProperty\n * @returns Returns the converted Property object, if value is undefined or null, returns undefined\n */\nexport function toProperty<T>(value?: MaybePropertyOrGetter<T>, isConstant = false): Property {\n return isProperty(value)\n ? value\n : isFunction(value)\n ? (new CallbackProperty(value, isConstant) as any)\n : new ConstantProperty(value);\n}\n\n/**\n * Create a Cesium property key\n *\n * @param scope The host object\n * @param field The property name\n * @param maybeProperty Optional property or getter\n * @param readonly Whether the property is read-only\n */\nexport function createPropertyField<T>(\n scope: any,\n field: string,\n maybeProperty?: MaybePropertyOrGetter<T>,\n readonly?: boolean,\n) {\n let removeOwnerListener: VoidFunction | undefined;\n // 自身内部变化时也触发载体的`definitionChanged`\n // Trigger the carrier's `definitionChanged` when its own internal state changes\n const ownerBinding = (value: any) => {\n removeOwnerListener?.();\n if (defined(value?.definitionChanged)) {\n removeOwnerListener = value?.definitionChanged?.addEventListener(() => {\n scope.definitionChanged.raiseEvent(scope, field, value, value);\n });\n }\n };\n\n const privateField = `_${field}`;\n const property = toProperty(maybeProperty);\n scope[privateField] = property;\n ownerBinding(property);\n\n if (readonly) {\n Object.defineProperty(scope, field, {\n get() {\n return scope[privateField];\n },\n });\n }\n else {\n Object.defineProperty(scope, field, {\n get() {\n return scope[privateField];\n },\n set(value) {\n const previous = scope[privateField];\n if (scope[privateField] !== value) {\n scope[privateField] = value;\n ownerBinding(value);\n if (defined(scope.definitionChanged)) {\n scope.definitionChanged.raiseEvent(scope, field, value, previous);\n }\n }\n },\n });\n }\n}\n\nexport interface CreateCesiumAttributeOptions {\n readonly?: boolean;\n toProperty?: boolean;\n /**\n * The event name that triggers the change\n * @default 'definitionChanged'\n */\n changedEventKey?: string;\n\n shallowClone?: boolean;\n}\n\nexport function createCesiumAttribute<Scope extends object>(\n scope: Scope,\n key: keyof Scope,\n value: any,\n options: CreateCesiumAttributeOptions = {},\n) {\n const allowToProperty = !!options.toProperty;\n const shallowClone = !!options.shallowClone;\n const changedEventKey = options.changedEventKey || 'definitionChanged';\n const changedEvent = Reflect.get(scope, changedEventKey) as Event;\n const privateKey = `_${String(key)}`;\n const attribute = allowToProperty ? toProperty(value) : value;\n Reflect.set(scope, privateKey, attribute);\n\n const obj: any = {\n get() {\n const value = Reflect.get(scope, privateKey);\n if (shallowClone) {\n return Array.isArray(value) ? [...value] : { ...value };\n }\n else {\n return value;\n }\n },\n };\n\n let previousListener: VoidFunction | undefined;\n\n const serial = (property: Property, previous?: any) => {\n previousListener?.();\n previousListener = property?.definitionChanged?.addEventListener(() => {\n changedEvent?.raiseEvent.bind(changedEvent)(scope, key, property, previous);\n });\n };\n\n if (!options.readonly) {\n // 初始化是父子级绑定监听\n if (allowToProperty && isProperty(value)) {\n serial(value);\n }\n\n obj.set = (value: any) => {\n if (allowToProperty && !isProperty(value)) {\n throw new Error(`The value of ${String(key)} must be a Cesium.Property object`);\n }\n const previous = Reflect.get(scope, privateKey);\n\n if (previous !== value) {\n Reflect.set(scope, privateKey, value);\n changedEvent?.raiseEvent.bind(changedEvent)(scope, key, value, previous);\n if (allowToProperty) {\n // 重新绑定监听\n serial(value);\n }\n }\n };\n }\n\n Object.defineProperty(scope, key, obj);\n}\n\nexport interface CreateCesiumPropertyOptions {\n readonly?: boolean;\n /**\n * The event name that triggers the change\n * @default 'definitionChanged'\n */\n changedEventKey?: string;\n}\nexport function createCesiumProperty<Scope extends object>(\n scope: Scope,\n key: keyof Scope,\n value: any,\n options: CreateCesiumPropertyOptions = {},\n) {\n return createCesiumAttribute(scope, key, value, { ...options, toProperty: true });\n}\n","import { promiseTimeout } from '@vueuse/shared';\n\nexport type ThrottleCallback<T extends any[]> = (...rest: T) => void;\n\n/**\n * Throttle function, which limits the frequency of execution of the function\n *\n * @param callback raw function\n * @param delay Throttled delay duration (ms)\n * @param trailing Trigger callback function after last call @default true\n * @param leading Trigger the callback function immediately on the first call @default false\n * @returns Throttle function\n */\nexport function throttle<T extends any[]>(\n callback: ThrottleCallback<T>,\n delay = 100,\n trailing = true,\n leading = false,\n): ThrottleCallback<T> {\n const restList: T[] = [];\n let tracked = false;\n const trigger = async () => {\n await promiseTimeout(delay);\n tracked = false;\n if (leading) {\n try {\n callback(...restList[0]);\n }\n catch (error) {\n console.error(error);\n }\n }\n if (trailing && (!leading || restList.length > 1)) {\n try {\n callback(...restList[restList.length - 1]!);\n }\n catch (error) {\n console.error(error);\n }\n }\n restList.length = 0;\n };\n\n return (...rest: T) => {\n if (restList.length < 2) {\n restList.push(rest);\n }\n else {\n restList[1] = rest;\n }\n\n if (!tracked) {\n tracked = true;\n trigger();\n }\n };\n}\n","import type { CommonCoord } from './types';\nimport { Cartesian3, Cartographic, Ellipsoid } from 'cesium';\n\n/**\n * Converts position to a coordinate point in the Cartesian coordinate system\n *\n * @param position Position information, which can be a Cartesian coordinate point (Cartesian3), a geographic coordinate point (Cartographic), an array, or an object containing WGS84 latitude, longitude, and height information\n * @returns The converted Cartesian coordinate point. If the input parameter is invalid, undefined is returned\n */\nexport function toCartesian3(position?: CommonCoord): Cartesian3 | undefined {\n if (!position) {\n return undefined;\n }\n if (position instanceof Cartesian3) {\n return position.clone();\n }\n else if (position instanceof Cartographic) {\n return Ellipsoid.WGS84.cartographicToCartesian(position);\n }\n else if (Array.isArray(position)) {\n return Cartesian3.fromDegrees(position[0], position[1], position[2]);\n }\n else {\n return Cartesian3.fromDegrees(position.longitude, position.latitude, (position as any).height);\n }\n}\n","import type { CommonCoord } from './types';\nimport { Cartesian3, Cartographic, Ellipsoid } from 'cesium';\n\n/**\n * Converts a position to a Cartographic coordinate point\n *\n * @param position Position information, which can be a Cartesian3 coordinate point, a Cartographic coordinate point, an array, or an object containing WGS84 longitude, latitude, and height information\n * @returns The converted Cartographic coordinate point, or undefined if the input parameter is invalid\n */\nexport function toCartographic(position?: CommonCoord): Cartographic | undefined {\n if (!position) {\n return undefined;\n }\n if (position instanceof Cartesian3) {\n return Ellipsoid.WGS84.cartesianToCartographic(position);\n }\n else if (position instanceof Cartographic) {\n return position.clone();\n }\n else if (Array.isArray(position)) {\n return Cartographic.fromDegrees(position[0], position[1], position[2]);\n }\n else {\n return Cartographic.fromDegrees(position.longitude, position.latitude, (position as any).height);\n }\n}\n","export interface ArrayDifferenceRetrun<T> {\n added: T[];\n removed: T[];\n}\n\n/**\n * 计算两个数组的差异,返回新增和删除的元素\n */\nexport function arrayDifference<T>(\n list: T[],\n oldList: T[] | undefined,\n): ArrayDifferenceRetrun<T> {\n const oldListSet = new Set(oldList);\n const added: T[] = list.filter(obj => !oldListSet.has(obj));\n const newListSet = new Set(list);\n const removed = oldList?.filter(obj => !newListSet.has(obj)) ?? [];\n return { added, removed };\n}\n"],"names":["defined","Ellipsoid","Cartesian3","Math","Cartographic","Material","CallbackProperty","ConstantProperty","value","promiseTimeout"],"mappings":"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"}
|