@hzab/map-combine 0.3.0-beta → 0.3.0-beta1

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 CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  fix: reactpoint 添加高德地图引擎并添加相应点线面绘制
4
4
  feat: 高德地图支持 ReactPoint
5
+ feat: 增加 loadPromise 参数,用于地图异步加载判断是否加载完成
6
+ fix: 解决 ReactPoint 点击事件无法触发的问题
5
7
 
6
8
  # @hzab/map-combine0.2.8
7
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/map-combine",
3
- "version": "0.3.0-beta",
3
+ "version": "0.3.0-beta1",
4
4
  "description": "地图组件",
5
5
  "main": "src",
6
6
  "scripts": {
@@ -22,11 +22,11 @@
22
22
  "author": "CaiYansong",
23
23
  "license": "ISC",
24
24
  "devDependencies": {
25
- "ol": "^7.4.0",
26
25
  "@amap/amap-jsapi-loader": "^1.0.1",
27
26
  "@hzab/permissions": "0.1.1",
28
27
  "@hzab/webpack-config": "^0.2.1",
29
28
  "@turf/turf": "6.5",
29
+ "@types/amap-js-api": "^1.4.16",
30
30
  "@types/react": "^17.0.62",
31
31
  "@types/react-dom": "^17.0.20",
32
32
  "antd": "^4.14.0",
@@ -36,6 +36,7 @@
36
36
  "lil-gui": "^0.19.2",
37
37
  "mobx": "^6.7.0",
38
38
  "mobx-react": "^7.6.0",
39
+ "ol": "^7.4.0",
39
40
  "react": "^17.0.2",
40
41
  "react-dom": "^17.0.2",
41
42
  "react-router-dom": "^6.14.1",
@@ -56,5 +57,6 @@
56
57
  "**.{js,jsx,ts,tsx,css,scss,less,json,html}": [
57
58
  "prettier --write"
58
59
  ]
59
- }
60
+ },
61
+ "dependencies": {}
60
62
  }
package/src/amap/AMap.ts CHANGED
@@ -40,7 +40,6 @@ export interface IFlyToViewerOpt {
40
40
  }
41
41
 
42
42
  export class AMap extends MapCombine {
43
- loadPromise;
44
43
  viewer: any;
45
44
  container: HTMLDivElement;
46
45
  option;
@@ -139,11 +138,11 @@ export class AMap extends MapCombine {
139
138
  : undefined,
140
139
  });
141
140
  this.viewer.on("complete", () => {
142
- resolve(this.viewer);
141
+ resolve(this);
143
142
  });
144
143
 
145
144
  this._initParamsEvent(this.viewer);
146
- return this.viewer;
145
+ return this;
147
146
  })
148
147
  .catch(reject);
149
148
  });
@@ -24,8 +24,15 @@ export function bindEvent(map: AMap) {
24
24
  event.trigger("pointer-up");
25
25
  });
26
26
 
27
- viewer.on("mousemove", () => {
27
+ // 解决 ReactPoint 点击事件无法触发的问题
28
+ container.addEventListener("click", (e) => {
29
+ event.trigger("left-click");
30
+ });
31
+
32
+ viewer.on("mousemove", (e) => {
28
33
  event.trigger("pointer-move");
34
+ event.canvas = [e.pixel.x, e.pixel.y];
35
+ event.geography = [e.lnglat.lng, e.lnglat.lat];
29
36
  });
30
37
 
31
38
  viewer.on("mapmove", () => {
@@ -1,196 +1,195 @@
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
- console.log("onPointerIn", status);
17
- status == 2 && polygon.event.trigger("pointer-in");
18
- },
19
- onPointerOut() {
20
- status == 2 && polygon.event.trigger("pointer-out");
21
- },
22
- onLClick() {
23
- status == 2 && polygon.event.trigger("left-click");
24
- },
25
- onRClick(e) {
26
- event.canvas = [e.pixel.x, e.pixel.y];
27
- if (polygon.menu) {
28
- map.menu.show(polygon.menu);
29
- }
30
- status == 2 && polygon.event.trigger("right-click");
31
- },
32
- onDbClick() {
33
- polygon.editable &&
34
- status == 2 &&
35
- setTimeout(() => {
36
- aMapPolygonEditor.setTarget(target);
37
- aMapPolygonEditor.open();
38
- polygon.event.trigger("start-edit");
39
- });
40
- },
41
- };
42
-
43
- const bindEvent = (graphical) => {
44
- graphical.on("click", _event.onLClick);
45
- graphical.on("rightclick", _event.onRClick);
46
- graphical.on("dblclick", _event.onDbClick);
47
- graphical.on("mouseover", _event.onPointerIn);
48
- graphical.on("mouseout", _event.onPointerOut);
49
- };
50
-
51
- aMapPolygonEditor = new LbsAMap.PolygonEditor(viewer, undefined, {
52
- createOptions: {
53
- strokeColor: polygon.stroke,
54
- strokeWeight: polygon.lineWidth,
55
- fillOpacity: 0.4,
56
- fillColor: polygon.fill,
57
- strokeStyle: polygon.dash ? "dashed" : "solid",
58
- strokeDasharray: [10, 10],
59
- },
60
- editOptions: {
61
- strokeColor: polygon.stroke,
62
- strokeWeight: polygon.lineWidth,
63
- fillOpacity: 0.4,
64
- fillColor: polygon.fill,
65
- strokeStyle: polygon.dash ? "dashed" : "solid",
66
- strokeDasharray: [10, 10],
67
- },
68
- });
69
-
70
- aMapPolygonEditor.on("add", (e) => {
71
- status = 3;
72
- target = e.target;
73
- bindEvent(target);
74
- // polygon.event.trigger("data-loaded");
75
- });
76
- if (polygon.coordinates) {
77
- status = 2;
78
- target = new LbsAMap.Polygon({
79
- path: polygon.coordinates,
80
- strokeColor: polygon.stroke,
81
- strokeWeight: polygon.lineWidth,
82
- fillOpacity: 0.4,
83
- fillColor: polygon.fill,
84
- strokeStyle: polygon.dash ? "dashed" : "solid",
85
- strokeDasharray: [10, 10],
86
- });
87
- viewer.add(target);
88
- bindEvent(target);
89
- } else {
90
- aMapPolygonEditor.close();
91
- aMapPolygonEditor.setTarget();
92
- aMapPolygonEditor.open();
93
- }
94
- const onUpdate = (e: Set<string>) => {
95
- if (skip) {
96
- skip--;
97
- return;
98
- }
99
-
100
- e.forEach((key) => {
101
- switch (key) {
102
- case "show":
103
- if (polygon.show) {
104
- target.show();
105
- } else {
106
- target.hide();
107
- }
108
- break;
109
- case "editable":
110
- break;
111
- case "coordinates":
112
- if (polygon.coordinates) {
113
- target.setPath(polygon.coordinates);
114
- target.setzIndex(polygon.coordinates[2]);
115
- target.show();
116
- status = 2;
117
- } else {
118
- target.hide();
119
- status = 0;
120
- }
121
- break;
122
-
123
- case "lineWidth":
124
- target.setOptions({
125
- strokeWeight: polygon.lineWidth,
126
- });
127
- break;
128
- case "fill":
129
- target.setOptions({
130
- fillColor: polygon.fill,
131
- });
132
- break;
133
- case "stroke":
134
- target.setOptions({
135
- strokeColor: polygon.stroke,
136
- });
137
- break;
138
- case "dash":
139
- target.setOptions({
140
- strokeStyle: polygon.dash ? "dashed" : "solid",
141
- });
142
- break;
143
- default:
144
- throw new Error(`${key} 还不支持修改`);
145
- }
146
- });
147
- };
148
- const onDbClick = () => {
149
- switch (status) {
150
- case 1:
151
- status = 2;
152
- skip++;
153
- polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
154
- polygon.event.trigger("data-loaded");
155
- polygon.event.trigger("pointer-in");
156
- break;
157
- case 3:
158
- polygon.event.trigger("stop-edit");
159
- aMapPolygonEditor.setTarget();
160
- aMapPolygonEditor.close();
161
- break;
162
- }
163
- };
164
- const onStartEdit = () => {
165
- switch (status) {
166
- case 2:
167
- status = 3;
168
- break;
169
- }
170
- };
171
-
172
- const onStopEdit = () => {
173
- if (status == 3) {
174
- status = 2;
175
- skip++;
176
- polygon.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
177
- }
178
- };
179
-
180
- const onDestroy = () => {
181
- viewer.remove(target);
182
- aMapPolygonEditor.close();
183
- aMapPolygonEditor.setTarget();
184
- event.off("double-click", onDbClick);
185
- polygon.event.off("update", onUpdate);
186
- polygon.event.off("start-edit", onStartEdit);
187
- polygon.event.off("stop-edit", onStopEdit);
188
- polygon.event.off("destroy", onDestroy);
189
- };
190
-
191
- event.on("double-click", onDbClick);
192
- polygon.event.on("update", onUpdate);
193
- polygon.event.on("start-edit", onStartEdit);
194
- polygon.event.on("stop-edit", onStopEdit);
195
- polygon.event.on("destroy", onDestroy);
196
- }
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
+ }