@hzab/map-combine 0.4.2-alpha.0 → 0.4.2-alpha.11

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 (37) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +5 -5
  3. package/src/amap/AMap.ts +313 -306
  4. package/src/amap/AMapEvent.ts +110 -54
  5. package/src/amap/AMapPoint.ts +140 -143
  6. package/src/amap/AMapPolygon.ts +214 -195
  7. package/src/amap/AMapPolyline.ts +199 -185
  8. package/src/basic/BasicBusiness.ts +5 -5
  9. package/src/basic/BasicModel.ts +49 -0
  10. package/src/basic/MapCombine.ts +4 -0
  11. package/src/basic/MapElement.ts +2 -1
  12. package/src/basic/MapEvent.ts +5 -0
  13. package/src/basic/Point.ts +1 -0
  14. package/src/basic/PointAggregation.tsx +23 -11
  15. package/src/basic/ReactPopup.tsx +3 -0
  16. package/src/cesium/CesiumEvent.ts +97 -84
  17. package/src/cesium/CesiumMap.ts +355 -347
  18. package/src/cesium/CesiumModel.ts +64 -0
  19. package/src/cesium/CesiumPoint.ts +3 -0
  20. package/src/cesium/CesiumPolygon.ts +2 -0
  21. package/src/cesium/CesiumPolyline.ts +185 -47
  22. package/src/cesium/CesiumTile3D.ts +222 -225
  23. package/src/mine/MineEvent.ts +70 -46
  24. package/src/mine/MineMap.ts +52 -1
  25. package/src/mine/MinePoint.ts +7 -1
  26. package/src/mine/MinePolygon.ts +6 -1
  27. package/src/mine/MinePolyline.ts +6 -1
  28. package/src/openlayer/OpenlayerEvent.ts +109 -87
  29. package/src/openlayer/OpenlayerMap.ts +287 -287
  30. package/src/openlayer/OpenlayerPoint.ts +6 -1
  31. package/src/openlayer/OpenlayerPolygon.ts +34 -24
  32. package/src/openlayer/OpenlayerPolyline.ts +10 -3
  33. package/src/utils/color.ts +49 -0
  34. package/src/utils/index.ts +3 -0
  35. package/src/utils/points-viewer.ts +27 -1
  36. package/src/utils/turfjs-utils.ts +52 -0
  37. package/src/utils/types.d.ts +12 -0
@@ -1,195 +1,214 @@
1
- import { AMap } from "./AMap";
2
- import { Polygon } from "../basic/Polygon";
3
-
4
- export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
5
- const { event, viewer, LbsAMap } = map;
6
-
7
- let status = 0;
8
- let skip = 0;
9
- let target = null;
10
- let aMapPolygonEditor = null;
11
-
12
- const _event = {
13
- cursor: polygon.cursor,
14
- silent: polygon.silent,
15
- onPointerIn() {
16
- status == 2 && polygon.event.trigger("pointer-in");
17
- },
18
- onPointerOut() {
19
- status == 2 && polygon.event.trigger("pointer-out");
20
- },
21
- onLClick() {
22
- status == 2 && polygon.event.trigger("left-click");
23
- },
24
- onRClick(e) {
25
- event.canvas = [e.pixel.x, e.pixel.y];
26
- if (polygon.menu) {
27
- map.menu.show(polygon.menu);
28
- }
29
- status == 2 && polygon.event.trigger("right-click");
30
- },
31
- onDbClick() {
32
- polygon.editable &&
33
- status == 2 &&
34
- setTimeout(() => {
35
- aMapPolygonEditor.setTarget(target);
36
- aMapPolygonEditor.open();
37
- polygon.event.trigger("start-edit");
38
- });
39
- },
40
- };
41
-
42
- const bindEvent = (graphical) => {
43
- graphical.on("click", _event.onLClick);
44
- graphical.on("rightclick", _event.onRClick);
45
- graphical.on("dblclick", _event.onDbClick);
46
- graphical.on("mouseover", _event.onPointerIn);
47
- graphical.on("mouseout", _event.onPointerOut);
48
- };
49
-
50
- aMapPolygonEditor = new LbsAMap.PolygonEditor(viewer, undefined, {
51
- createOptions: {
52
- strokeColor: polygon.stroke,
53
- strokeWeight: polygon.lineWidth,
54
- fillOpacity: 0.4,
55
- fillColor: polygon.fill,
56
- strokeStyle: polygon.dash ? "dashed" : "solid",
57
- strokeDasharray: [10, 10],
58
- },
59
- editOptions: {
60
- strokeColor: polygon.stroke,
61
- strokeWeight: polygon.lineWidth,
62
- fillOpacity: 0.4,
63
- fillColor: polygon.fill,
64
- strokeStyle: polygon.dash ? "dashed" : "solid",
65
- strokeDasharray: [10, 10],
66
- },
67
- });
68
-
69
- aMapPolygonEditor.on("add", (e) => {
70
- status = 3;
71
- target = e.target;
72
- bindEvent(target);
73
- // polygon.event.trigger("data-loaded");
74
- });
75
- if (polygon.coordinates) {
76
- status = 2;
77
- target = new LbsAMap.Polygon({
78
- path: polygon.coordinates,
79
- strokeColor: polygon.stroke,
80
- strokeWeight: polygon.lineWidth,
81
- fillOpacity: 0.4,
82
- fillColor: polygon.fill,
83
- strokeStyle: polygon.dash ? "dashed" : "solid",
84
- strokeDasharray: [10, 10],
85
- });
86
- viewer.add(target);
87
- bindEvent(target);
88
- } else {
89
- aMapPolygonEditor.close();
90
- aMapPolygonEditor.setTarget();
91
- aMapPolygonEditor.open();
92
- }
93
- const onUpdate = (e: Set<string>) => {
94
- if (skip) {
95
- skip--;
96
- return;
97
- }
98
-
99
- e.forEach((key) => {
100
- switch (key) {
101
- case "show":
102
- if (polygon.show) {
103
- target.show();
104
- } else {
105
- target.hide();
106
- }
107
- break;
108
- case "editable":
109
- break;
110
- case "coordinates":
111
- if (polygon.coordinates) {
112
- target.setPath(polygon.coordinates);
113
- target.setzIndex(polygon.coordinates[2]);
114
- target.show();
115
- status = 2;
116
- } else {
117
- target.hide();
118
- status = 0;
119
- }
120
- break;
121
-
122
- case "lineWidth":
123
- target.setOptions({
124
- strokeWeight: polygon.lineWidth,
125
- });
126
- break;
127
- case "fill":
128
- target.setOptions({
129
- fillColor: polygon.fill,
130
- });
131
- break;
132
- case "stroke":
133
- target.setOptions({
134
- strokeColor: polygon.stroke,
135
- });
136
- break;
137
- case "dash":
138
- target.setOptions({
139
- strokeStyle: polygon.dash ? "dashed" : "solid",
140
- });
141
- break;
142
- default:
143
- throw new Error(`${key} 还不支持修改`);
144
- }
145
- });
146
- };
147
- const onDbClick = () => {
148
- switch (status) {
149
- case 1:
150
- status = 2;
151
- skip++;
152
- polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
153
- polygon.event.trigger("data-loaded");
154
- polygon.event.trigger("pointer-in");
155
- break;
156
- case 3:
157
- polygon.event.trigger("stop-edit");
158
- aMapPolygonEditor.setTarget();
159
- aMapPolygonEditor.close();
160
- break;
161
- }
162
- };
163
- const onStartEdit = () => {
164
- switch (status) {
165
- case 2:
166
- status = 3;
167
- break;
168
- }
169
- };
170
-
171
- const onStopEdit = () => {
172
- if (status == 3) {
173
- status = 2;
174
- skip++;
175
- polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
176
- }
177
- };
178
-
179
- const onDestroy = () => {
180
- viewer.remove(target);
181
- aMapPolygonEditor.close();
182
- aMapPolygonEditor.setTarget();
183
- event.off("double-click", onDbClick);
184
- polygon.event.off("update", onUpdate);
185
- polygon.event.off("start-edit", onStartEdit);
186
- polygon.event.off("stop-edit", onStopEdit);
187
- polygon.event.off("destroy", onDestroy);
188
- };
189
-
190
- event.on("double-click", onDbClick);
191
- polygon.event.on("update", onUpdate);
192
- polygon.event.on("start-edit", onStartEdit);
193
- polygon.event.on("stop-edit", onStopEdit);
194
- polygon.event.on("destroy", onDestroy);
195
- }
1
+ import { AMap } from "./AMap";
2
+ import { Polygon } from "../basic/Polygon";
3
+
4
+ import { parseHexColor } from "../utils/color";
5
+
6
+ export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
7
+ const { event, viewer, LbsAMap } = map;
8
+ const { color: strokeColor, opacity: strokeOpacity } = parseHexColor(polygon.stroke);
9
+ const { color: fillColor, opacity: fillOpacity } = parseHexColor(polygon.fill);
10
+
11
+ let status = 0;
12
+ let skip = 0;
13
+ let target = null;
14
+ let aMapPolygonEditor = null;
15
+
16
+ const _event = {
17
+ cursor: polygon.cursor,
18
+ silent: polygon.silent,
19
+ onPointerIn() {
20
+ status == 2 && polygon.event.trigger("pointer-in");
21
+ },
22
+ onPointerOut() {
23
+ status == 2 && polygon.event.trigger("pointer-out");
24
+ },
25
+ onLClick() {
26
+ status == 2 && polygon.event.trigger("left-click");
27
+ },
28
+ onRClick(e) {
29
+ event.canvas = [e.pixel.x, e.pixel.y];
30
+ if (polygon.menu) {
31
+ map.menu.show(polygon.menu);
32
+ }
33
+ status == 2 && polygon.event.trigger("right-click");
34
+ },
35
+ onDbClick() {
36
+ polygon.editable &&
37
+ status == 2 &&
38
+ setTimeout(() => {
39
+ aMapPolygonEditor.setTarget(target);
40
+ aMapPolygonEditor.open();
41
+ polygon.event.trigger("start-edit");
42
+ });
43
+ },
44
+ };
45
+
46
+ const bindEvent = (graphical) => {
47
+ graphical.on("click", _event.onLClick);
48
+ graphical.on("rightclick", _event.onRClick);
49
+ graphical.on("dblclick", _event.onDbClick);
50
+ graphical.on("mouseover", _event.onPointerIn);
51
+ graphical.on("mouseout", _event.onPointerOut);
52
+ };
53
+
54
+ aMapPolygonEditor = new LbsAMap.PolygonEditor(viewer, undefined, {
55
+ createOptions: {
56
+ strokeColor: strokeColor,
57
+ strokeOpacity: strokeOpacity,
58
+ strokeWeight: polygon.lineWidth,
59
+ fillColor: fillColor,
60
+ fillOpacity: fillOpacity,
61
+ strokeStyle: polygon.dash ? "dashed" : "solid",
62
+ strokeDasharray: [10, 10],
63
+ },
64
+ editOptions: {
65
+ strokeColor: strokeColor,
66
+ strokeOpacity: strokeOpacity,
67
+ strokeWeight: polygon.lineWidth,
68
+ fillColor: fillColor,
69
+ fillOpacity: fillOpacity,
70
+ strokeStyle: polygon.dash ? "dashed" : "solid",
71
+ strokeDasharray: [10, 10],
72
+ },
73
+ });
74
+
75
+ aMapPolygonEditor.on("add", (e) => {
76
+ status = 3;
77
+ target = e.target;
78
+ bindEvent(target);
79
+ // polygon.event.trigger("data-loaded");
80
+ });
81
+ if (polygon.coordinates) {
82
+ status = 2;
83
+ target = new LbsAMap.Polygon({
84
+ path: polygon.coordinates,
85
+ strokeColor: strokeColor,
86
+ strokeOpacity: strokeOpacity,
87
+ strokeWeight: polygon.lineWidth,
88
+ fillColor: fillColor,
89
+ fillOpacity: fillOpacity,
90
+ strokeStyle: polygon.dash ? "dashed" : "solid",
91
+ strokeDasharray: [10, 10],
92
+ zIndex: polygon.coordinates[0]?.[2] ?? polygon.height,
93
+ bubble: true,
94
+ extData: {
95
+ userdata: polygon.userdata,
96
+ cursor: polygon.cursor,
97
+ silent: polygon.silent,
98
+ target: polygon,
99
+ },
100
+ });
101
+ viewer.add(target);
102
+ bindEvent(target);
103
+ } else {
104
+ aMapPolygonEditor.close();
105
+ aMapPolygonEditor.setTarget();
106
+ aMapPolygonEditor.open();
107
+ }
108
+ const onUpdate = (e: Set<string>) => {
109
+ if (skip) {
110
+ skip--;
111
+ return;
112
+ }
113
+
114
+ e.forEach((key) => {
115
+ switch (key) {
116
+ case "show":
117
+ if (polygon.show) {
118
+ target.show();
119
+ } else {
120
+ target.hide();
121
+ }
122
+ break;
123
+ case "editable":
124
+ break;
125
+ case "coordinates":
126
+ if (polygon.coordinates) {
127
+ target.setPath(polygon.coordinates);
128
+ target.setzIndex(polygon.coordinates[0]?.[2] ?? polygon.height);
129
+ target.show();
130
+ status = 2;
131
+ } else {
132
+ target.hide();
133
+ status = 0;
134
+ }
135
+ break;
136
+
137
+ case "lineWidth":
138
+ target.setOptions({
139
+ strokeWeight: polygon.lineWidth,
140
+ });
141
+ break;
142
+ case "fill":
143
+ const { color: fillColor, opacity: fillOpacity } = parseHexColor(polygon.fill);
144
+ target.setOptions({
145
+ fillColor: fillColor,
146
+ fillOpacity: fillOpacity,
147
+ });
148
+ break;
149
+ case "stroke":
150
+ const { color: strokeColor, opacity: strokeOpacity } = parseHexColor(polygon.stroke);
151
+ target.setOptions({
152
+ strokeColor: strokeColor,
153
+ strokeOpacity: strokeOpacity,
154
+ });
155
+ break;
156
+ case "dash":
157
+ target.setOptions({
158
+ strokeStyle: polygon.dash ? "dashed" : "solid",
159
+ });
160
+ break;
161
+ default:
162
+ throw new Error(`${key} 还不支持修改`);
163
+ }
164
+ });
165
+ };
166
+ const onDbClick = () => {
167
+ switch (status) {
168
+ case 1:
169
+ status = 2;
170
+ skip++;
171
+ polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
172
+ polygon.event.trigger("data-loaded");
173
+ polygon.event.trigger("pointer-in");
174
+ break;
175
+ case 3:
176
+ polygon.event.trigger("stop-edit");
177
+ aMapPolygonEditor.setTarget();
178
+ aMapPolygonEditor.close();
179
+ break;
180
+ }
181
+ };
182
+ const onStartEdit = () => {
183
+ switch (status) {
184
+ case 2:
185
+ status = 3;
186
+ break;
187
+ }
188
+ };
189
+
190
+ const onStopEdit = () => {
191
+ if (status == 3) {
192
+ status = 2;
193
+ skip++;
194
+ polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
195
+ }
196
+ };
197
+
198
+ const onDestroy = () => {
199
+ viewer.remove(target);
200
+ aMapPolygonEditor.close();
201
+ aMapPolygonEditor.setTarget();
202
+ event.off("double-click", onDbClick);
203
+ polygon.event.off("update", onUpdate);
204
+ polygon.event.off("start-edit", onStartEdit);
205
+ polygon.event.off("stop-edit", onStopEdit);
206
+ polygon.event.off("destroy", onDestroy);
207
+ };
208
+
209
+ event.on("double-click", onDbClick);
210
+ polygon.event.on("update", onUpdate);
211
+ polygon.event.on("start-edit", onStartEdit);
212
+ polygon.event.on("stop-edit", onStopEdit);
213
+ polygon.event.on("destroy", onDestroy);
214
+ }