@hzab/map-combine 0.0.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/CHANGELOG.md +2 -0
- package/README.md +67 -0
- package/package.json +56 -0
- package/src/assets/Thumbs.db +0 -0
- package/src/assets/add.png +0 -0
- package/src/assets/point.png +0 -0
- package/src/basic/ContextMenu.tsx +49 -0
- package/src/basic/MapCombine.ts +67 -0
- package/src/basic/MapElement.ts +32 -0
- package/src/basic/MapEvent.ts +18 -0
- package/src/basic/Point.ts +176 -0
- package/src/basic/PointAggregation.tsx +189 -0
- package/src/basic/Polygon.ts +180 -0
- package/src/basic/Polyline.ts +194 -0
- package/src/basic/ReactPoint.tsx +357 -0
- package/src/basic/ReactPopup.tsx +34 -0
- package/src/basic/Tile3D.ts +99 -0
- package/src/cesium/CesiumEvent.ts +86 -0
- package/src/cesium/CesiumMap.ts +167 -0
- package/src/cesium/CesiumPoint.ts +137 -0
- package/src/cesium/CesiumPolygon.ts +368 -0
- package/src/cesium/CesiumPolyline.ts +382 -0
- package/src/cesium/CesiumTile3D.ts +100 -0
- package/src/mine/MineEvent.ts +29 -0
- package/src/mine/MineMap.ts +90 -0
- package/src/mine/MinePoint.ts +139 -0
- package/src/mine/MinePolygon.ts +388 -0
- package/src/mine/MinePolyline.ts +359 -0
- package/src/mine/MineTile3D.ts +32 -0
- package/src/openlayer/OpenlayerEvent.ts +75 -0
- package/src/openlayer/OpenlayerMap.ts +149 -0
- package/src/openlayer/OpenlayerPoint.ts +177 -0
- package/src/openlayer/OpenlayerPolygon.ts +300 -0
- package/src/openlayer/OpenlayerPolyline.ts +289 -0
- package/src/utils/Image.ts +46 -0
- package/src/utils/PolygonEditor.ts +159 -0
- package/src/utils/PolylineEditor.ts +149 -0
- package/src/utils/Projection.ts +46 -0
- package/src/utils/index.ts +131 -0
- package/src/utils/static.ts +7 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** 判断对象是否包含指定键 */
|
|
2
|
+
export function objHasKeys(obj: any, keys: string[]) {
|
|
3
|
+
return keys.some((k) => {
|
|
4
|
+
return obj[k] !== undefined;
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
/** 设置对象属性,属性变化时触发回调函数 */
|
|
8
|
+
export function setValue<T>(obj: any, key: string, val: T, onChange: () => void) {
|
|
9
|
+
if (obj[key] !== val) {
|
|
10
|
+
obj[key] = val;
|
|
11
|
+
onChange();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class OneDimensional {
|
|
16
|
+
k: number;
|
|
17
|
+
b: number;
|
|
18
|
+
/** 一维数据映射器 */
|
|
19
|
+
constructor(from: [number, number], to: [number, number] = [0, 1]) {
|
|
20
|
+
const d = from[1] - from[0];
|
|
21
|
+
this.k = (to[1] - to[0]) / d;
|
|
22
|
+
this.b = (to[0] * from[1] - to[1] * from[0]) / d;
|
|
23
|
+
|
|
24
|
+
if (from[0] === from[1]) {
|
|
25
|
+
this.backward = () => from[0];
|
|
26
|
+
this.forward = () => to[0];
|
|
27
|
+
}
|
|
28
|
+
if (to[0] === to[1]) {
|
|
29
|
+
this.forward = () => to[0];
|
|
30
|
+
this.backward = () => from[0];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** 从from映射到to */
|
|
35
|
+
forward(x: number) {
|
|
36
|
+
return this.k * x + this.b;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** 从to映射到from */
|
|
40
|
+
backward(y: number) {
|
|
41
|
+
return (y - this.b) / this.k;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class TwoDimensional {
|
|
46
|
+
xMap: OneDimensional;
|
|
47
|
+
yMap: OneDimensional;
|
|
48
|
+
constructor(
|
|
49
|
+
from: [[number, number], [number, number]],
|
|
50
|
+
to: [[number, number], [number, number]] = [
|
|
51
|
+
[0, 1],
|
|
52
|
+
[0, 1],
|
|
53
|
+
],
|
|
54
|
+
) {
|
|
55
|
+
this.xMap = new OneDimensional(from[0], to[0]);
|
|
56
|
+
this.yMap = new OneDimensional(from[1], to[1]);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** 从from映射到to */
|
|
60
|
+
forward(from: [number, number]) {
|
|
61
|
+
return [this.xMap.forward(from[0]), this.yMap.forward(from[1])];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** 从to映射到from */
|
|
65
|
+
backward(to: [number, number]) {
|
|
66
|
+
return [this.xMap.backward(to[0]), this.yMap.backward(to[1])];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function getRandomColor() {
|
|
71
|
+
return Math.floor(Math.random() * 0x1000000 + 0x1000000)
|
|
72
|
+
.toString(16)
|
|
73
|
+
.replace("1", "#");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function dealColor(color: string): [string, number] {
|
|
77
|
+
const opacity = color.substring(7);
|
|
78
|
+
return [color.substring(0, 7), opacity ? Number.parseInt("0x" + opacity) / 255 : 1];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** 生成唯一标识 */
|
|
82
|
+
export function getUUID() {
|
|
83
|
+
return (Date.now() + Math.random()).toString();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 节流执行函数
|
|
89
|
+
* @param func 目标函数
|
|
90
|
+
* @param time 时间间隔
|
|
91
|
+
* @param immediately 是否立刻执行一次
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
export function throttle<T extends (...args: any) => void>(func: T, time = 0, immediately = false): T {
|
|
95
|
+
let handler = 0;
|
|
96
|
+
let lock = 0;
|
|
97
|
+
if (immediately) {
|
|
98
|
+
return function (...args: any) {
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
if (handler) {
|
|
101
|
+
clearTimeout(handler);
|
|
102
|
+
}
|
|
103
|
+
if (lock < now) {
|
|
104
|
+
func(...args);
|
|
105
|
+
lock = now + time;
|
|
106
|
+
} else {
|
|
107
|
+
handler = window.setTimeout(() => {
|
|
108
|
+
handler = 0;
|
|
109
|
+
func(...args);
|
|
110
|
+
}, lock - now);
|
|
111
|
+
}
|
|
112
|
+
} as T;
|
|
113
|
+
} else {
|
|
114
|
+
return function (...args: any) {
|
|
115
|
+
const now = Date.now();
|
|
116
|
+
if (handler) {
|
|
117
|
+
clearTimeout(handler);
|
|
118
|
+
handler = window.setTimeout(() => {
|
|
119
|
+
handler = 0;
|
|
120
|
+
func(...args);
|
|
121
|
+
}, lock - now);
|
|
122
|
+
} else {
|
|
123
|
+
lock = now + time;
|
|
124
|
+
handler = window.setTimeout(() => {
|
|
125
|
+
handler = 0;
|
|
126
|
+
func(...args);
|
|
127
|
+
}, time);
|
|
128
|
+
}
|
|
129
|
+
} as T;
|
|
130
|
+
}
|
|
131
|
+
}
|