@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +67 -0
  3. package/package.json +56 -0
  4. package/src/assets/Thumbs.db +0 -0
  5. package/src/assets/add.png +0 -0
  6. package/src/assets/point.png +0 -0
  7. package/src/basic/ContextMenu.tsx +49 -0
  8. package/src/basic/MapCombine.ts +67 -0
  9. package/src/basic/MapElement.ts +32 -0
  10. package/src/basic/MapEvent.ts +18 -0
  11. package/src/basic/Point.ts +176 -0
  12. package/src/basic/PointAggregation.tsx +189 -0
  13. package/src/basic/Polygon.ts +180 -0
  14. package/src/basic/Polyline.ts +194 -0
  15. package/src/basic/ReactPoint.tsx +357 -0
  16. package/src/basic/ReactPopup.tsx +34 -0
  17. package/src/basic/Tile3D.ts +99 -0
  18. package/src/cesium/CesiumEvent.ts +86 -0
  19. package/src/cesium/CesiumMap.ts +167 -0
  20. package/src/cesium/CesiumPoint.ts +137 -0
  21. package/src/cesium/CesiumPolygon.ts +368 -0
  22. package/src/cesium/CesiumPolyline.ts +382 -0
  23. package/src/cesium/CesiumTile3D.ts +100 -0
  24. package/src/mine/MineEvent.ts +29 -0
  25. package/src/mine/MineMap.ts +90 -0
  26. package/src/mine/MinePoint.ts +139 -0
  27. package/src/mine/MinePolygon.ts +388 -0
  28. package/src/mine/MinePolyline.ts +359 -0
  29. package/src/mine/MineTile3D.ts +32 -0
  30. package/src/openlayer/OpenlayerEvent.ts +75 -0
  31. package/src/openlayer/OpenlayerMap.ts +149 -0
  32. package/src/openlayer/OpenlayerPoint.ts +177 -0
  33. package/src/openlayer/OpenlayerPolygon.ts +300 -0
  34. package/src/openlayer/OpenlayerPolyline.ts +289 -0
  35. package/src/utils/Image.ts +46 -0
  36. package/src/utils/PolygonEditor.ts +159 -0
  37. package/src/utils/PolylineEditor.ts +149 -0
  38. package/src/utils/Projection.ts +46 -0
  39. package/src/utils/index.ts +131 -0
  40. 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
+ }
@@ -0,0 +1,7 @@
1
+ import { OneDimensional } from '.'
2
+
3
+ /** 经度归一化函数 */
4
+ export const LONTOONE = new OneDimensional([-180, 180])
5
+
6
+ /** 纬度归一化函数 */
7
+ export const LATTOONE = new OneDimensional([-85.0511287798066, 85.0511287798066])