@hzab/map-combine 0.3.0-beta → 1.0.0-alpha.0

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,12 +1,19 @@
1
1
  {
2
2
  "name": "@hzab/map-combine",
3
- "version": "0.3.0-beta",
3
+ "version": "1.0.0-alpha.0",
4
4
  "description": "地图组件",
5
5
  "main": "src",
6
6
  "scripts": {
7
7
  "dev": "npm run prepare && webpack serve -c ./config/webpack.config.js --env local",
8
8
  "build": "webpack -c ./config/webpack.config.js --env production",
9
- "publish-beta": "npm publish --beta",
9
+ "version:alpha": "npm version prerelease --preid=alpha",
10
+ "publish:alpha": "npm publish --tag alpha",
11
+ "version:beta": "npm version prerelease --preid=beta",
12
+ "publish:beta": "npm publish --tag beta",
13
+ "version:patch": "npm version patch",
14
+ "version:minior": "npm version minor",
15
+ "version:major": "npm version major",
16
+ "publish:stable": "npm publish --access public",
10
17
  "publish-patch": "npm version patch && npm publish --access public",
11
18
  "publish-minor": "npm version minor && npm publish --access public",
12
19
  "publish-major": "npm version major && npm publish --access public",
@@ -22,11 +29,11 @@
22
29
  "author": "CaiYansong",
23
30
  "license": "ISC",
24
31
  "devDependencies": {
25
- "ol": "^7.4.0",
26
32
  "@amap/amap-jsapi-loader": "^1.0.1",
27
33
  "@hzab/permissions": "0.1.1",
28
34
  "@hzab/webpack-config": "^0.2.1",
29
35
  "@turf/turf": "6.5",
36
+ "@types/amap-js-api": "^1.4.16",
30
37
  "@types/react": "^17.0.62",
31
38
  "@types/react-dom": "^17.0.20",
32
39
  "antd": "^4.14.0",
@@ -36,6 +43,7 @@
36
43
  "lil-gui": "^0.19.2",
37
44
  "mobx": "^6.7.0",
38
45
  "mobx-react": "^7.6.0",
46
+ "ol": "^7.4.0",
39
47
  "react": "^17.0.2",
40
48
  "react-dom": "^17.0.2",
41
49
  "react-router-dom": "^6.14.1",
@@ -56,5 +64,6 @@
56
64
  "**.{js,jsx,ts,tsx,css,scss,less,json,html}": [
57
65
  "prettier --write"
58
66
  ]
59
- }
67
+ },
68
+ "dependencies": {}
60
69
  }
package/src/amap/AMap.ts CHANGED
@@ -26,6 +26,10 @@ export interface IAMapOption {
26
26
  securityJsCode: string;
27
27
  /** 加载的插件列表 */
28
28
  plugins?: [string];
29
+ /** loader 配置参数 */
30
+ loaderOpt?: Object;
31
+ /** 地图初始化 配置参数 */
32
+ mapOpt?: Object;
29
33
  }
30
34
 
31
35
  export interface IFlyToViewerOpt {
@@ -40,7 +44,6 @@ export interface IFlyToViewerOpt {
40
44
  }
41
45
 
42
46
  export class AMap extends MapCombine {
43
- loadPromise;
44
47
  viewer: any;
45
48
  container: HTMLDivElement;
46
49
  option;
@@ -109,6 +112,7 @@ export class AMap extends MapCombine {
109
112
 
110
113
  this.loadPromise = new Promise((resolve, reject) => {
111
114
  AMapLoader({
115
+ ...opt.loaderOpt,
112
116
  key,
113
117
  securityJsCode,
114
118
  plugins,
@@ -117,6 +121,7 @@ export class AMap extends MapCombine {
117
121
  this.LbsAMap = LbsAMap;
118
122
  let _urls = Array.isArray(url) ? url : [url];
119
123
  this.viewer = new LbsAMap.Map(container, {
124
+ ...opt.mapOpt,
120
125
  zoom: zoom || 14,
121
126
  center: center || [120.160217, 30.243861],
122
127
  doubleClickZoom: false,
@@ -139,11 +144,11 @@ export class AMap extends MapCombine {
139
144
  : undefined,
140
145
  });
141
146
  this.viewer.on("complete", () => {
142
- resolve(this.viewer);
147
+ resolve(this);
143
148
  });
144
149
 
145
150
  this._initParamsEvent(this.viewer);
146
- return this.viewer;
151
+ return this;
147
152
  })
148
153
  .catch(reject);
149
154
  });
@@ -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
+ }