@hzab/map-combine 0.4.2-alpha.0 → 0.4.2-alpha.2
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 +1 -0
- package/package.json +1 -1
- package/src/amap/AMapPoint.ts +149 -143
- package/src/amap/AMapPolygon.ts +196 -195
- package/src/amap/AMapPolyline.ts +186 -185
- package/src/basic/PointAggregation.tsx +23 -11
- package/src/mine/MinePoint.ts +1 -1
- package/src/mine/MinePolygon.ts +2 -1
- package/src/mine/MinePolyline.ts +2 -1
- package/src/openlayer/OpenlayerMap.ts +287 -287
- package/src/openlayer/OpenlayerPolygon.ts +28 -23
- package/src/openlayer/OpenlayerPolyline.ts +2 -2
package/src/amap/AMapPolyline.ts
CHANGED
|
@@ -1,185 +1,186 @@
|
|
|
1
|
-
import { AMap } from "./AMap";
|
|
2
|
-
import { Polyline } from "../basic/Polyline";
|
|
3
|
-
|
|
4
|
-
export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
|
|
5
|
-
const { event, viewer, LbsAMap } = map;
|
|
6
|
-
|
|
7
|
-
let status = 0;
|
|
8
|
-
let skip = 0;
|
|
9
|
-
let target = null;
|
|
10
|
-
let aMapPolylineEditor = null;
|
|
11
|
-
|
|
12
|
-
const _event = {
|
|
13
|
-
cursor: polyline.cursor,
|
|
14
|
-
silent: polyline.silent,
|
|
15
|
-
onPointerIn() {
|
|
16
|
-
status == 2 && polyline.event.trigger("pointer-in");
|
|
17
|
-
},
|
|
18
|
-
onPointerOut() {
|
|
19
|
-
status == 2 && polyline.event.trigger("pointer-out");
|
|
20
|
-
},
|
|
21
|
-
onLClick() {
|
|
22
|
-
status == 2 && polyline.event.trigger("left-click");
|
|
23
|
-
},
|
|
24
|
-
onRClick(e) {
|
|
25
|
-
event.canvas = [e.pixel.x, e.pixel.y];
|
|
26
|
-
if (polyline.menu) {
|
|
27
|
-
map.menu.show(polyline.menu);
|
|
28
|
-
}
|
|
29
|
-
status == 2 && polyline.event.trigger("right-click");
|
|
30
|
-
},
|
|
31
|
-
onDbClick() {
|
|
32
|
-
polyline.editable &&
|
|
33
|
-
status == 2 &&
|
|
34
|
-
setTimeout(() => {
|
|
35
|
-
aMapPolylineEditor.setTarget(target);
|
|
36
|
-
aMapPolylineEditor.open();
|
|
37
|
-
polyline.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
|
-
aMapPolylineEditor = new LbsAMap.PolylineEditor(viewer, undefined, {
|
|
51
|
-
createOptions: {
|
|
52
|
-
strokeColor: polyline.stroke,
|
|
53
|
-
strokeWeight: polyline.lineWidth,
|
|
54
|
-
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
55
|
-
strokeDasharray: [10, 10],
|
|
56
|
-
},
|
|
57
|
-
editOptions: {
|
|
58
|
-
strokeColor: polyline.stroke,
|
|
59
|
-
strokeWeight: polyline.lineWidth,
|
|
60
|
-
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
61
|
-
strokeDasharray: [10, 10],
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
aMapPolylineEditor.on("add", (e) => {
|
|
66
|
-
status = 3;
|
|
67
|
-
target = e.target;
|
|
68
|
-
bindEvent(target);
|
|
69
|
-
// polygon.event.trigger("data-loaded");
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
if (polyline.coordinates) {
|
|
73
|
-
status = 2;
|
|
74
|
-
target = new LbsAMap.Polyline({
|
|
75
|
-
path: polyline.coordinates,
|
|
76
|
-
strokeColor: polyline.stroke,
|
|
77
|
-
strokeWeight: polyline.lineWidth,
|
|
78
|
-
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
79
|
-
strokeDasharray: [10, 10],
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
aMapPolylineEditor.
|
|
86
|
-
aMapPolylineEditor.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
target.
|
|
109
|
-
target.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
polyline.
|
|
144
|
-
polyline.event.trigger("
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
aMapPolylineEditor.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
aMapPolylineEditor.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
polyline.event.off("
|
|
176
|
-
polyline.event.off("
|
|
177
|
-
polyline.event.off("
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
polyline.event.on("
|
|
183
|
-
polyline.event.on("
|
|
184
|
-
polyline.event.on("
|
|
185
|
-
|
|
1
|
+
import { AMap } from "./AMap";
|
|
2
|
+
import { Polyline } from "../basic/Polyline";
|
|
3
|
+
|
|
4
|
+
export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
|
|
5
|
+
const { event, viewer, LbsAMap } = map;
|
|
6
|
+
|
|
7
|
+
let status = 0;
|
|
8
|
+
let skip = 0;
|
|
9
|
+
let target = null;
|
|
10
|
+
let aMapPolylineEditor = null;
|
|
11
|
+
|
|
12
|
+
const _event = {
|
|
13
|
+
cursor: polyline.cursor,
|
|
14
|
+
silent: polyline.silent,
|
|
15
|
+
onPointerIn() {
|
|
16
|
+
status == 2 && polyline.event.trigger("pointer-in");
|
|
17
|
+
},
|
|
18
|
+
onPointerOut() {
|
|
19
|
+
status == 2 && polyline.event.trigger("pointer-out");
|
|
20
|
+
},
|
|
21
|
+
onLClick() {
|
|
22
|
+
status == 2 && polyline.event.trigger("left-click");
|
|
23
|
+
},
|
|
24
|
+
onRClick(e) {
|
|
25
|
+
event.canvas = [e.pixel.x, e.pixel.y];
|
|
26
|
+
if (polyline.menu) {
|
|
27
|
+
map.menu.show(polyline.menu);
|
|
28
|
+
}
|
|
29
|
+
status == 2 && polyline.event.trigger("right-click");
|
|
30
|
+
},
|
|
31
|
+
onDbClick() {
|
|
32
|
+
polyline.editable &&
|
|
33
|
+
status == 2 &&
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
aMapPolylineEditor.setTarget(target);
|
|
36
|
+
aMapPolylineEditor.open();
|
|
37
|
+
polyline.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
|
+
aMapPolylineEditor = new LbsAMap.PolylineEditor(viewer, undefined, {
|
|
51
|
+
createOptions: {
|
|
52
|
+
strokeColor: polyline.stroke,
|
|
53
|
+
strokeWeight: polyline.lineWidth,
|
|
54
|
+
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
55
|
+
strokeDasharray: [10, 10],
|
|
56
|
+
},
|
|
57
|
+
editOptions: {
|
|
58
|
+
strokeColor: polyline.stroke,
|
|
59
|
+
strokeWeight: polyline.lineWidth,
|
|
60
|
+
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
61
|
+
strokeDasharray: [10, 10],
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
aMapPolylineEditor.on("add", (e) => {
|
|
66
|
+
status = 3;
|
|
67
|
+
target = e.target;
|
|
68
|
+
bindEvent(target);
|
|
69
|
+
// polygon.event.trigger("data-loaded");
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (polyline.coordinates) {
|
|
73
|
+
status = 2;
|
|
74
|
+
target = new LbsAMap.Polyline({
|
|
75
|
+
path: polyline.coordinates,
|
|
76
|
+
strokeColor: polyline.stroke,
|
|
77
|
+
strokeWeight: polyline.lineWidth,
|
|
78
|
+
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
79
|
+
strokeDasharray: [10, 10],
|
|
80
|
+
zIndex: polyline.coordinates[0]?.[2] ?? polyline.height,
|
|
81
|
+
});
|
|
82
|
+
viewer.add(target);
|
|
83
|
+
bindEvent(target);
|
|
84
|
+
} else {
|
|
85
|
+
aMapPolylineEditor.close();
|
|
86
|
+
aMapPolylineEditor.setTarget();
|
|
87
|
+
aMapPolylineEditor.open();
|
|
88
|
+
}
|
|
89
|
+
const onUpdate = (e: Set<string>) => {
|
|
90
|
+
if (skip) {
|
|
91
|
+
skip--;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
e.forEach((key) => {
|
|
96
|
+
switch (key) {
|
|
97
|
+
case "show":
|
|
98
|
+
if (polyline.show) {
|
|
99
|
+
target.show();
|
|
100
|
+
} else {
|
|
101
|
+
target.hide();
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case "editable":
|
|
105
|
+
break;
|
|
106
|
+
case "coordinates":
|
|
107
|
+
if (polyline.coordinates) {
|
|
108
|
+
target.setPath(polyline.coordinates);
|
|
109
|
+
target.setzIndex(polyline.coordinates[0]?.[2] ?? polyline.height);
|
|
110
|
+
target.show();
|
|
111
|
+
status = 2;
|
|
112
|
+
} else {
|
|
113
|
+
target.hide();
|
|
114
|
+
status = 0;
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
|
|
118
|
+
case "lineWidth":
|
|
119
|
+
target.setOptions({
|
|
120
|
+
strokeWeight: polyline.lineWidth,
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
case "stroke":
|
|
124
|
+
target.setOptions({
|
|
125
|
+
strokeColor: polyline.stroke,
|
|
126
|
+
});
|
|
127
|
+
break;
|
|
128
|
+
case "dash":
|
|
129
|
+
target.setOptions({
|
|
130
|
+
strokeStyle: polyline.dash ? "dashed" : "solid",
|
|
131
|
+
});
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
throw new Error(`${key} 还不支持修改`);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
const onDbClick = () => {
|
|
139
|
+
switch (status) {
|
|
140
|
+
case 1:
|
|
141
|
+
status = 2;
|
|
142
|
+
skip++;
|
|
143
|
+
polyline.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
|
|
144
|
+
polyline.event.trigger("data-loaded");
|
|
145
|
+
polyline.event.trigger("pointer-in");
|
|
146
|
+
break;
|
|
147
|
+
case 3:
|
|
148
|
+
polyline.event.trigger("stop-edit");
|
|
149
|
+
aMapPolylineEditor.setTarget();
|
|
150
|
+
aMapPolylineEditor.close();
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const onStartEdit = () => {
|
|
155
|
+
switch (status) {
|
|
156
|
+
case 2:
|
|
157
|
+
status = 3;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const onStopEdit = () => {
|
|
163
|
+
if (status == 3) {
|
|
164
|
+
status = 2;
|
|
165
|
+
skip++;
|
|
166
|
+
polyline.coordinates = target.getPath().map((item) => [item.lng, item.lat]);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const onDestroy = () => {
|
|
171
|
+
viewer.remove(target);
|
|
172
|
+
aMapPolylineEditor.close();
|
|
173
|
+
aMapPolylineEditor.setTarget();
|
|
174
|
+
event.off("double-click", onDbClick);
|
|
175
|
+
polyline.event.off("update", onUpdate);
|
|
176
|
+
polyline.event.off("start-edit", onStartEdit);
|
|
177
|
+
polyline.event.off("stop-edit", onStopEdit);
|
|
178
|
+
polyline.event.off("destroy", onDestroy);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
event.on("double-click", onDbClick);
|
|
182
|
+
polyline.event.on("update", onUpdate);
|
|
183
|
+
polyline.event.on("start-edit", onStartEdit);
|
|
184
|
+
polyline.event.on("stop-edit", onStopEdit);
|
|
185
|
+
polyline.event.on("destroy", onDestroy);
|
|
186
|
+
}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
import { ReactElement } from "react";
|
|
2
|
-
import { throttle } from "lodash";
|
|
3
2
|
|
|
4
3
|
import { LATTOONE, LONTOONE } from "../utils/static";
|
|
5
4
|
import { getUUID, setValue } from "../utils";
|
|
6
5
|
import { MapCombine } from "../basic/MapCombine";
|
|
7
6
|
import { ReactPoint } from "./ReactPoint";
|
|
8
7
|
|
|
8
|
+
export interface PointOption {
|
|
9
|
+
coordinates: number[];
|
|
10
|
+
props?: any;
|
|
11
|
+
}
|
|
9
12
|
export interface PointAggregationOption {
|
|
10
13
|
/** 组件名,唯一标识 */
|
|
11
14
|
name: string;
|
|
12
15
|
/** 组件是否显示 */
|
|
13
16
|
show: boolean;
|
|
14
17
|
/** 数据点 */
|
|
15
|
-
datas:
|
|
18
|
+
datas: PointOption[];
|
|
16
19
|
/** 小于该值的等级下会聚合 */
|
|
17
20
|
maxZoomLevel?: number;
|
|
18
21
|
/** 值越大聚合点的间距越小 */
|
|
19
22
|
density?: number;
|
|
20
23
|
/** 点的展示元素 */
|
|
21
|
-
element(datas:
|
|
24
|
+
element(datas: PointOption[], p: number[]): ReactElement;
|
|
22
25
|
/** 坐标处理回调 */
|
|
23
26
|
location(lonlat: number[]): number[];
|
|
24
27
|
}
|
|
@@ -28,10 +31,12 @@ class TileNode {
|
|
|
28
31
|
private _element: any;
|
|
29
32
|
marker: ReactPoint | undefined;
|
|
30
33
|
private _map: MapCombine;
|
|
31
|
-
|
|
34
|
+
option;
|
|
35
|
+
constructor(map: MapCombine, location: number[], element: ReactElement, option = {}) {
|
|
32
36
|
this._map = map;
|
|
33
37
|
this._location = location;
|
|
34
38
|
this._element = element;
|
|
39
|
+
this.option = option;
|
|
35
40
|
}
|
|
36
41
|
test(east: number, south: number, west: number, north: number) {
|
|
37
42
|
if (
|
|
@@ -42,6 +47,7 @@ class TileNode {
|
|
|
42
47
|
) {
|
|
43
48
|
if (!this.marker) {
|
|
44
49
|
const option = {
|
|
50
|
+
...this.option,
|
|
45
51
|
show: true,
|
|
46
52
|
name: getUUID(),
|
|
47
53
|
element: () => this._element,
|
|
@@ -94,6 +100,8 @@ export class PointAggregation {
|
|
|
94
100
|
this._onAfterViewChange = this.onAfterViewChange.bind(this);
|
|
95
101
|
this.onAfterViewChange();
|
|
96
102
|
event.on("view-moveEnd", this._onAfterViewChange);
|
|
103
|
+
// 初始化没有渲染,移动之后才渲染点位
|
|
104
|
+
this._update();
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
private _turnon(zoom: number) {
|
|
@@ -106,10 +114,12 @@ export class PointAggregation {
|
|
|
106
114
|
const grid = new Map();
|
|
107
115
|
const max = Math.pow(2, zoom) * (_option.density ?? 1);
|
|
108
116
|
_option.datas.forEach((data) => {
|
|
109
|
-
const location =
|
|
117
|
+
const location =
|
|
118
|
+
typeof _option.location === "function" ? _option.location(data.coordinates) : data.coordinates;
|
|
110
119
|
const x = Math.floor(LONTOONE.forward(location[0]) * max * 2);
|
|
111
120
|
const y = Math.floor(LATTOONE.forward(location[1]) * max);
|
|
112
121
|
const k = `${x}_${y}`;
|
|
122
|
+
// 对数据进行分组
|
|
113
123
|
const group = grid.get(k);
|
|
114
124
|
if (group) {
|
|
115
125
|
group.push(data);
|
|
@@ -118,10 +128,11 @@ export class PointAggregation {
|
|
|
118
128
|
}
|
|
119
129
|
});
|
|
120
130
|
// 处理聚合点坐标
|
|
121
|
-
grid.forEach((
|
|
122
|
-
const { lon, lat } =
|
|
131
|
+
grid.forEach((group) => {
|
|
132
|
+
const { lon, lat } = group?.reduce(
|
|
123
133
|
(a, b) => {
|
|
124
|
-
const
|
|
134
|
+
const { coordinates } = b;
|
|
135
|
+
const loaction = typeof _option.location === "function" ? _option.location(coordinates) : coordinates;
|
|
125
136
|
a.lon += loaction[0];
|
|
126
137
|
a.lat += loaction[1];
|
|
127
138
|
return a;
|
|
@@ -131,8 +142,8 @@ export class PointAggregation {
|
|
|
131
142
|
cache.push(
|
|
132
143
|
new TileNode(
|
|
133
144
|
this._map,
|
|
134
|
-
[lon /
|
|
135
|
-
_option.element(
|
|
145
|
+
[lon / group.length, lat / group.length],
|
|
146
|
+
_option.element(group, [lon / group.length, lat / group.length]),
|
|
136
147
|
),
|
|
137
148
|
);
|
|
138
149
|
});
|
|
@@ -140,7 +151,7 @@ export class PointAggregation {
|
|
|
140
151
|
} else {
|
|
141
152
|
const cache: TileNode[] = [];
|
|
142
153
|
_option.datas.forEach((e) => {
|
|
143
|
-
const location = _option.location(e);
|
|
154
|
+
const location = _option.location(e.coordinates);
|
|
144
155
|
cache.push(new TileNode(this._map, location, _option.element([e], location)));
|
|
145
156
|
});
|
|
146
157
|
_cache.set(zoom, cache);
|
|
@@ -171,6 +182,7 @@ export class PointAggregation {
|
|
|
171
182
|
|
|
172
183
|
onAfterViewChange(): void {
|
|
173
184
|
const { _map } = this;
|
|
185
|
+
// 限制最大缩放层级
|
|
174
186
|
const zoom = Math.min(Math.round(_map.zoom * 4) / 4, this._option.maxZoomLevel ?? 17);
|
|
175
187
|
if (zoom !== this._current) {
|
|
176
188
|
this._turnoff();
|
package/src/mine/MinePoint.ts
CHANGED
|
@@ -69,7 +69,7 @@ export function drawPoint(map: MineMap, point: Point<unknown>) {
|
|
|
69
69
|
break;
|
|
70
70
|
case "coordinates":
|
|
71
71
|
if (point.coordinates) {
|
|
72
|
-
marker.setLngLat(point.coordinates).setAltitude(point.coordinates[2] ??
|
|
72
|
+
marker.setLngLat(point.coordinates).setAltitude(point.coordinates[2] ?? point.height);
|
|
73
73
|
switch (status) {
|
|
74
74
|
case 0:
|
|
75
75
|
point.show && marker.addTo(map.viewer);
|
package/src/mine/MinePolygon.ts
CHANGED
|
@@ -50,6 +50,7 @@ function getPolygonOption(polygon: Polygon<unknown>) {
|
|
|
50
50
|
"fill-color": color,
|
|
51
51
|
"fill-opacity": opacity,
|
|
52
52
|
},
|
|
53
|
+
zIndex: polygon.coordinates[0]?.[2] ?? polygon.height,
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -148,7 +149,7 @@ function main(map: MineMap, polygon: Polygon<unknown>) {
|
|
|
148
149
|
type: "Feature",
|
|
149
150
|
geometry: {
|
|
150
151
|
type: "Polygon",
|
|
151
|
-
coordinates: [[...coordinates, coordinates[0]]],
|
|
152
|
+
coordinates: [[...coordinates, coordinates[0]].map((it) => [it[0], it[1], it[2] ?? polygon.height])],
|
|
152
153
|
},
|
|
153
154
|
properties: {
|
|
154
155
|
id: polygon.name,
|
package/src/mine/MinePolyline.ts
CHANGED
|
@@ -56,6 +56,7 @@ function getLayerOption(polyline: Polyline<unknown>) {
|
|
|
56
56
|
"line-color": polyline.stroke,
|
|
57
57
|
"line-width": polyline.lineWidth,
|
|
58
58
|
},
|
|
59
|
+
zIndex: polyline.coordinates[0]?.[2] ?? polyline.height,
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -130,7 +131,7 @@ function main(map: MineMap, polyline: Polyline<unknown>) {
|
|
|
130
131
|
type: "Feature",
|
|
131
132
|
geometry: {
|
|
132
133
|
type: "LineString",
|
|
133
|
-
coordinates: coordinates,
|
|
134
|
+
coordinates: coordinates?.map((it) => [it[0], it[1], it[2] ?? polyline.height]),
|
|
134
135
|
},
|
|
135
136
|
properties: {
|
|
136
137
|
id: polyline.name,
|