@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 +2 -0
- package/package.json +13 -4
- package/src/amap/AMap.ts +8 -3
- package/src/amap/AMapEvent.ts +8 -1
- package/src/amap/AMapPolygon.ts +195 -196
- package/src/amap/AMapPolyline.ts +185 -186
- package/src/basic/MapCombine.ts +2 -0
- package/src/basic/ReactPoint.tsx +363 -362
- package/src/cesium/CesiumEvent.ts +4 -0
- package/src/cesium/CesiumMap.ts +341 -342
- package/src/cesium/CesiumTile3D.ts +2 -6
- package/src/mine/MineEvent.ts +38 -25
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hzab/map-combine",
|
|
3
|
-
"version": "0.
|
|
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
|
-
"
|
|
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
|
|
147
|
+
resolve(this);
|
|
143
148
|
});
|
|
144
149
|
|
|
145
150
|
this._initParamsEvent(this.viewer);
|
|
146
|
-
return this
|
|
151
|
+
return this;
|
|
147
152
|
})
|
|
148
153
|
.catch(reject);
|
|
149
154
|
});
|
package/src/amap/AMapEvent.ts
CHANGED
|
@@ -24,8 +24,15 @@ export function bindEvent(map: AMap) {
|
|
|
24
24
|
event.trigger("pointer-up");
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
-
|
|
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", () => {
|
package/src/amap/AMapPolygon.ts
CHANGED
|
@@ -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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
aMapPolygonEditor.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
graphical.on("
|
|
45
|
-
graphical.on("
|
|
46
|
-
graphical.on("
|
|
47
|
-
graphical.on("
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
target
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
aMapPolygonEditor.
|
|
91
|
-
aMapPolygonEditor.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
target.
|
|
114
|
-
target.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
polygon.
|
|
154
|
-
polygon.event.trigger("
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
aMapPolygonEditor.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
aMapPolygonEditor.
|
|
183
|
-
|
|
184
|
-
event.off("
|
|
185
|
-
polygon.event.off("
|
|
186
|
-
polygon.event.off("
|
|
187
|
-
polygon.event.off("
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
event.on("
|
|
192
|
-
polygon.event.on("
|
|
193
|
-
polygon.event.on("
|
|
194
|
-
polygon.event.on("
|
|
195
|
-
|
|
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
|
+
}
|