@aibee/crc-bmap 0.0.94 → 0.0.95
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/example/src/main.ts +376 -331
- package/lib/bmap.cjs.min.js +3 -3
- package/lib/bmap.cjs.min.js.map +4 -4
- package/lib/bmap.esm.js +234 -150
- package/lib/bmap.esm.js.map +4 -4
- package/lib/bmap.esm.min.js +3 -3
- package/lib/bmap.esm.min.js.map +4 -4
- package/lib/bmap.min.js +3 -3
- package/lib/bmap.min.js.map +4 -4
- package/lib/src/api/floor.d.ts +15 -0
- package/lib/src/api/index.d.ts +1 -0
- package/lib/src/bmap.d.ts +13 -19
- package/lib/src/elements/floor.d.ts +1 -0
- package/lib/src/elements/poi.d.ts +1 -0
- package/lib/src/index.d.ts +1 -0
- package/lib/src/plugins/base.d.ts +1 -1
- package/lib/src/plugins/index.d.ts +1 -0
- package/lib/src/plugins/split-load/index.d.ts +1 -0
- package/lib/src/plugins/split-load/split-load.d.ts +14 -0
- package/lib/src/types/index.d.ts +7 -0
- package/lib/src/utils/coordinate.d.ts +2 -2
- package/lib/src/utils/event-name.d.ts +1 -1
- package/lib/src/utils/index.d.ts +1 -0
- package/lib/src/utils/obj-utils.d.ts +6 -0
- package/package.json +1 -1
package/example/src/main.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
BMap,
|
|
3
|
+
Graphic,
|
|
4
|
+
GraphicInfo,
|
|
5
|
+
Overlay,
|
|
6
|
+
SelectBox,
|
|
7
|
+
SplitLoad,
|
|
8
|
+
} from "../../src";
|
|
9
|
+
import Stats from "three/examples/jsm/libs/stats.module.js";
|
|
10
|
+
import * as THREE from "three";
|
|
11
|
+
import { Navigation } from "../../src/plugins/navigation/navigation";
|
|
5
12
|
// import data from './a.json'
|
|
6
13
|
// data.data.forEach(item => {
|
|
7
14
|
// item.info = JSON.parse(item.info)
|
|
@@ -9,24 +16,24 @@ import { Navigation } from '../../src/plugins/navigation/navigation'
|
|
|
9
16
|
// })
|
|
10
17
|
|
|
11
18
|
// 创建性能监视器
|
|
12
|
-
let stats = new Stats()
|
|
19
|
+
let stats = new Stats();
|
|
13
20
|
|
|
14
21
|
// 设置监视器面板,传入面板id(0: fps, 1: ms, 2: mb)
|
|
15
|
-
stats.showPanel(0)
|
|
22
|
+
stats.showPanel(0);
|
|
16
23
|
|
|
17
24
|
// 设置监视器位置
|
|
18
|
-
stats.dom.style.position =
|
|
19
|
-
stats.dom.style.left =
|
|
20
|
-
stats.dom.style.top =
|
|
21
|
-
stats.dom.style.zIndex = "100"
|
|
25
|
+
stats.dom.style.position = "absolute";
|
|
26
|
+
stats.dom.style.left = "10vh";
|
|
27
|
+
stats.dom.style.top = "10vh";
|
|
28
|
+
stats.dom.style.zIndex = "100";
|
|
22
29
|
|
|
23
30
|
// 将监视器添加到页面中
|
|
24
|
-
document.body.appendChild(stats.dom)
|
|
31
|
+
document.body.appendChild(stats.dom);
|
|
25
32
|
|
|
26
33
|
// var geometry = new THREE.BoxGeometry(1, 1, 1);
|
|
27
34
|
// var material = new THREE.MeshBasicMaterial();
|
|
28
35
|
// var cube = new THREE.Mesh(geometry, material);
|
|
29
|
-
const scene = new THREE.Scene()
|
|
36
|
+
const scene = new THREE.Scene();
|
|
30
37
|
|
|
31
38
|
// scene.add(cube);
|
|
32
39
|
// geometry.attributes.verticesNeedUpdate = true;
|
|
@@ -38,38 +45,47 @@ const scene = new THREE.Scene()
|
|
|
38
45
|
// geometry.colors[0] = color1; // 设置第一个顶点的颜色
|
|
39
46
|
// geometry.colors[1] = color2; // 设置第二个顶点的颜色
|
|
40
47
|
|
|
41
|
-
|
|
42
48
|
function render() {
|
|
43
49
|
// 更新帧数
|
|
44
|
-
stats.update()
|
|
45
|
-
requestAnimationFrame(render)
|
|
50
|
+
stats.update();
|
|
51
|
+
requestAnimationFrame(render);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
render()
|
|
54
|
+
render();
|
|
49
55
|
|
|
50
|
-
const bmap = new BMap(document.getElementById(
|
|
56
|
+
const bmap = new BMap(document.getElementById("app")!, {
|
|
51
57
|
apiInfo: {
|
|
52
58
|
headers: {
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
Authorization:
|
|
60
|
+
localStorage.getItem("Authorization_token") ||
|
|
61
|
+
"Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzNzIwYjNhOGU3MGM0NGU3YTdkYzdiMTE4NDNhZjFhMyIsInN1YiI6IllVV0VJWEkiLCJpc3MiOiJtaXhjIiwiaWF0IjoxNzAwNzI2NTA4fQ.su7smca9cVeMQ9u-NyT_3NKa6kYfoLIGsOtNZLOnXXI",
|
|
62
|
+
},
|
|
55
63
|
},
|
|
56
|
-
resizeObserver: true
|
|
64
|
+
resizeObserver: true,
|
|
57
65
|
});
|
|
58
66
|
|
|
59
67
|
(async () => {
|
|
60
|
-
bmap.loadEquipment()
|
|
61
|
-
const navigation = new Navigation(bmap)
|
|
62
|
-
bmap.use(navigation)
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
bmap.loadEquipment();
|
|
69
|
+
const navigation = new Navigation(bmap);
|
|
70
|
+
bmap.use(navigation);
|
|
71
|
+
const splitLoad = new SplitLoad(bmap);
|
|
72
|
+
bmap.use(splitLoad);
|
|
73
|
+
splitLoad.changeFloor({
|
|
65
74
|
brand: "crc",
|
|
66
75
|
project: "0202A501",
|
|
67
|
-
|
|
68
|
-
building: "A",
|
|
69
|
-
floor: "LG",
|
|
76
|
+
floor: "B1",
|
|
70
77
|
ts: "2024-04-09",
|
|
71
|
-
resource_type_list: [1, 2, 3, 4, 6].join(",")
|
|
72
78
|
});
|
|
79
|
+
// 加载图元数据
|
|
80
|
+
// await bmap.load({
|
|
81
|
+
// brand: "crc",
|
|
82
|
+
// project: "0202A501",
|
|
83
|
+
// phase: "themixctd01",
|
|
84
|
+
// building: "A",
|
|
85
|
+
// floor: "LG",
|
|
86
|
+
// ts: "2024-04-09",
|
|
87
|
+
// resource_type_list: [1, 2, 3, 4, 6].join(",")
|
|
88
|
+
// });
|
|
73
89
|
// const floorKey = bmap.getFloorKey({
|
|
74
90
|
// brand: "crc",
|
|
75
91
|
// project: "0202A501",
|
|
@@ -81,16 +97,16 @@ const bmap = new BMap(document.getElementById('app')!, {
|
|
|
81
97
|
// });
|
|
82
98
|
// const curFloorData = bmap.floorDataMap.set(floorKey, data.data as any);
|
|
83
99
|
// 切换楼层
|
|
84
|
-
bmap.switchFloor({
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
})
|
|
93
|
-
bmap.changeMapType("3d")
|
|
100
|
+
// bmap.switchFloor({
|
|
101
|
+
// brand: "crc",
|
|
102
|
+
// project: "0202A501",
|
|
103
|
+
// phase: "themixctd01",
|
|
104
|
+
// building: "A",
|
|
105
|
+
// floor: "LG",
|
|
106
|
+
// ts: "2024-04-09",
|
|
107
|
+
// resource_type_list: [1, 2, 3, 4, 6].join(",")
|
|
108
|
+
// })
|
|
109
|
+
bmap.changeMapType("3d");
|
|
94
110
|
// const poi = bmap.createGraphicPoi(bmap.getGraphicByNodeId("3e72f56e")!, {
|
|
95
111
|
// texts: [{ text: "文字" }],
|
|
96
112
|
// icon: "https://robot-vr-public.cdn.bcebos.com/navigation_images/614c4cb0a949526cf91aa42f5e6cb2c9.svg",
|
|
@@ -99,9 +115,9 @@ const bmap = new BMap(document.getElementById('app')!, {
|
|
|
99
115
|
// icon_border: { width: 2, color: "#000000" }
|
|
100
116
|
// })
|
|
101
117
|
// poi!.options.background = "#000000"
|
|
102
|
-
bmap.context.addEventListener("select-graphic", (...args) => {
|
|
103
|
-
console.log(args)
|
|
104
|
-
})
|
|
118
|
+
bmap.context.addEventListener("select-graphic", (...args) => {
|
|
119
|
+
console.log(args);
|
|
120
|
+
});
|
|
105
121
|
// bmap.getGraphicByNodeId("700fae09")!.options.strokeWidth = 2;
|
|
106
122
|
// bmap.getGraphicByNodeId("b0846107")!.options.strokeWidth = 0.5;
|
|
107
123
|
// bmap.getGraphicByNodeId("654cf0a2")!.options.fillColor = '#45E583';
|
|
@@ -113,87 +129,88 @@ const bmap = new BMap(document.getElementById('app')!, {
|
|
|
113
129
|
// graphic.options.height = 0.1
|
|
114
130
|
// }
|
|
115
131
|
// })
|
|
116
|
-
|
|
132
|
+
|
|
117
133
|
// bmap.getGraphicByNodeId("996d97a6")!.options.stroke = false;
|
|
118
134
|
// bmap.getGraphicByNodeId("996d97a6")!.options.height = 0.001;
|
|
119
135
|
// bmap.getGraphicByNodeId("996d97a6")!.options.strokeColor = "#000000";
|
|
120
136
|
// bmap.getGraphicByNodeId("996d97a6")!.options.strokeOpacity = 1;
|
|
121
|
-
|
|
122
|
-
})();
|
|
137
|
+
})();
|
|
123
138
|
|
|
124
|
-
const graphicId = "9338ca4b"
|
|
139
|
+
const graphicId = "9338ca4b";
|
|
125
140
|
|
|
126
141
|
// 图元点击
|
|
127
|
-
bmap.context.addEventListener(
|
|
128
|
-
console.log(
|
|
142
|
+
bmap.context.addEventListener("graphic-click", (data) => {
|
|
143
|
+
console.log("graphic-click", data.graphics);
|
|
129
144
|
// const div = document.createElement("div")
|
|
130
145
|
// div.style.cssText = "position: fixed; top: 25%; left: 25%; bottom: 25%; right: 25%; background: red; z-index: 99;"
|
|
131
146
|
// div.addEventListener("click", () => {
|
|
132
147
|
// document.body.removeChild(div)
|
|
133
148
|
// })
|
|
134
149
|
// document.body.appendChild(div)
|
|
135
|
-
data.graphics[0] && bmap.translateElementToCenter(data.graphics[0], 200)
|
|
150
|
+
data.graphics[0] && bmap.translateElementToCenter(data.graphics[0], 200);
|
|
136
151
|
});
|
|
137
152
|
|
|
138
153
|
// 图元选中
|
|
139
|
-
bmap.context.addEventListener(
|
|
140
|
-
console.log(
|
|
141
|
-
data.graphics.forEach(item => item.options.fillColor =
|
|
154
|
+
bmap.context.addEventListener("select-graphic", (data) => {
|
|
155
|
+
console.log("select-graphic", data.graphics);
|
|
156
|
+
data.graphics.forEach((item) => (item.options.fillColor = "#ff0000"));
|
|
142
157
|
});
|
|
143
158
|
|
|
144
159
|
// poi点击
|
|
145
|
-
bmap.context.addEventListener(
|
|
146
|
-
console.log(
|
|
147
|
-
bmap.translateElementToCenter(data.pois[0], 500)
|
|
160
|
+
bmap.context.addEventListener("poi-click", (data) => {
|
|
161
|
+
console.log("poi-click", data.pois);
|
|
162
|
+
bmap.translateElementToCenter(data.pois[0], 500);
|
|
148
163
|
});
|
|
149
164
|
|
|
150
165
|
(window as any).bmap = bmap;
|
|
151
166
|
|
|
152
|
-
|
|
153
167
|
/**
|
|
154
168
|
* 显示比例尺
|
|
155
169
|
*/
|
|
156
|
-
const ratioDiv = document.createElement("div")
|
|
157
|
-
ratioDiv.style.cssText =
|
|
170
|
+
const ratioDiv = document.createElement("div");
|
|
171
|
+
ratioDiv.style.cssText =
|
|
172
|
+
"position: absolute; bottom: 10vh; left: 10vw; z-index: 2; background: blue; color: red;";
|
|
158
173
|
ratioDiv.textContent = "100M";
|
|
159
|
-
document.body.appendChild(ratioDiv)
|
|
160
|
-
bmap.context.addEventListener(
|
|
174
|
+
document.body.appendChild(ratioDiv);
|
|
175
|
+
bmap.context.addEventListener("change-ratio", ({ px }) => {
|
|
161
176
|
// px 一百米对应的像素点
|
|
162
177
|
let m = 100;
|
|
163
|
-
let scale = 1
|
|
178
|
+
let scale = 1;
|
|
164
179
|
// 让px保持在50-100中间的一个米的整数
|
|
165
|
-
if (px < 50) {
|
|
166
|
-
scale = Math.ceil(100 / px)
|
|
167
|
-
px *= scale
|
|
168
|
-
m *= scale
|
|
180
|
+
if (px < 50) {
|
|
181
|
+
scale = Math.ceil(100 / px);
|
|
182
|
+
px *= scale;
|
|
183
|
+
m *= scale;
|
|
169
184
|
} else if (px > 100) {
|
|
170
|
-
scale = Math.floor(px / 100)
|
|
185
|
+
scale = Math.floor(px / 100);
|
|
171
186
|
while (m % scale != 0) {
|
|
172
187
|
scale--;
|
|
173
188
|
}
|
|
174
|
-
px /= scale
|
|
175
|
-
m /= scale
|
|
189
|
+
px /= scale;
|
|
190
|
+
m /= scale;
|
|
176
191
|
}
|
|
177
192
|
ratioDiv.style.width = `${px}px`;
|
|
178
|
-
ratioDiv.textContent = `${m}
|
|
179
|
-
})
|
|
193
|
+
ratioDiv.textContent = `${m}米`;
|
|
194
|
+
});
|
|
180
195
|
|
|
181
196
|
/**
|
|
182
197
|
* 按钮操作
|
|
183
198
|
*/
|
|
184
199
|
// 修改容器大小
|
|
185
|
-
document
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
})
|
|
200
|
+
document
|
|
201
|
+
.getElementById("changeContainerSize")
|
|
202
|
+
?.addEventListener("click", () => {
|
|
203
|
+
// 获取legacyId 和 图元 的map
|
|
204
|
+
// const graphic = bmap.getGraphicByNodeId("45f9ff75")!
|
|
205
|
+
// const poi = bmap.createGraphicPoi(graphic, {
|
|
206
|
+
// texts: [
|
|
207
|
+
// { text: "店铺名称" }
|
|
208
|
+
// ]
|
|
209
|
+
// })
|
|
210
|
+
document.getElementById("app1")!.style.width = "500px";
|
|
211
|
+
});
|
|
195
212
|
// 添加poi
|
|
196
|
-
document.getElementById("createPoi")?.addEventListener(
|
|
213
|
+
document.getElementById("createPoi")?.addEventListener("click", () => {
|
|
197
214
|
// 获取legacyId 和 图元 的map
|
|
198
215
|
// const graphic = bmap.getGraphicByNodeId("45f9ff75")!
|
|
199
216
|
// const poi = bmap.createGraphicPoi(graphic, {
|
|
@@ -201,74 +218,71 @@ document.getElementById("createPoi")?.addEventListener('click', () => {
|
|
|
201
218
|
// { text: "店铺名称" }
|
|
202
219
|
// ]
|
|
203
220
|
// })
|
|
204
|
-
const graphics: Graphic[] = bmap.getFloorAllGraphics()
|
|
221
|
+
const graphics: Graphic[] = bmap.getFloorAllGraphics();
|
|
205
222
|
// bmap.context.control.zoomSpeed = 2
|
|
206
|
-
graphics.forEach(graphic => {
|
|
223
|
+
graphics.forEach((graphic) => {
|
|
207
224
|
// 在图元上添加poi
|
|
208
225
|
const poi = bmap.createGraphicPoi(graphic, {
|
|
209
|
-
texts: [{ text: "店铺名称", styles: { fontWeight: "bold" } }]
|
|
210
|
-
})
|
|
211
|
-
})
|
|
226
|
+
texts: [{ text: "店铺名称", styles: { fontWeight: "bold" } }],
|
|
227
|
+
});
|
|
228
|
+
});
|
|
212
229
|
// return
|
|
213
230
|
// 监听放大缩小的变化
|
|
214
|
-
bmap.addEventListener("zoom-change", ({ basicZoom, cameraZoom }) => {
|
|
215
|
-
const zoomScale = cameraZoom / basicZoom
|
|
231
|
+
bmap.addEventListener("zoom-change", ({ basicZoom, cameraZoom }) => {
|
|
232
|
+
const zoomScale = cameraZoom / basicZoom;
|
|
216
233
|
// console.log(zoomScale, basicZoom, cameraZoom)
|
|
217
|
-
bmap.getPois().forEach(poi => {
|
|
234
|
+
bmap.getPois().forEach((poi) => {
|
|
218
235
|
if (zoomScale > 2) {
|
|
219
236
|
poi!.options.texts = [
|
|
220
237
|
{ text: "店铺名称" },
|
|
221
238
|
{ text: "店铺名称" },
|
|
222
239
|
{ text: "店铺名称" },
|
|
223
240
|
{ text: "店铺名称" },
|
|
224
|
-
]
|
|
241
|
+
];
|
|
225
242
|
} else if (zoomScale > 1.6) {
|
|
226
243
|
poi!.options.texts = [
|
|
227
244
|
{ text: "店铺名称" },
|
|
228
245
|
{ text: "店铺名称" },
|
|
229
246
|
{ text: "店铺名称" },
|
|
230
|
-
]
|
|
231
|
-
} else if (zoomScale > 1.3) {
|
|
232
|
-
poi!.options.texts = [
|
|
233
|
-
{ text: "店铺名称" },
|
|
234
|
-
{ text: "店铺名称" },
|
|
235
|
-
]
|
|
247
|
+
];
|
|
248
|
+
} else if (zoomScale > 1.3) {
|
|
249
|
+
poi!.options.texts = [{ text: "店铺名称" }, { text: "店铺名称" }];
|
|
236
250
|
} else {
|
|
237
|
-
poi!.options.texts = [
|
|
238
|
-
{ text: "店铺名称" },
|
|
239
|
-
]
|
|
251
|
+
poi!.options.texts = [{ text: "店铺名称" }];
|
|
240
252
|
}
|
|
241
|
-
})
|
|
242
|
-
})
|
|
243
|
-
})
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
});
|
|
244
256
|
// 删除poi
|
|
245
|
-
document.getElementById("removePoi")?.addEventListener(
|
|
246
|
-
bmap.removePoiById(graphicId)
|
|
247
|
-
})
|
|
257
|
+
document.getElementById("removePoi")?.addEventListener("click", () => {
|
|
258
|
+
bmap.removePoiById(graphicId);
|
|
259
|
+
});
|
|
248
260
|
// 删除在创建
|
|
249
|
-
document
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
bmap.
|
|
256
|
-
|
|
257
|
-
|
|
261
|
+
document
|
|
262
|
+
.getElementById("deleteAnCreateGraphic")
|
|
263
|
+
?.addEventListener("click", () => {
|
|
264
|
+
const graphic = bmap.getGraphicByNodeId(graphicId)!;
|
|
265
|
+
console.log(graphic);
|
|
266
|
+
const options = graphic.options;
|
|
267
|
+
bmap.deleteGraphic(graphic);
|
|
268
|
+
setTimeout(() => {
|
|
269
|
+
bmap.createGraphicByOptions(options);
|
|
270
|
+
}, 1000);
|
|
271
|
+
});
|
|
258
272
|
// 获取全部图元
|
|
259
|
-
document.getElementById("getAllGraphics")?.addEventListener(
|
|
260
|
-
console.log(bmap.getFloorAllGraphics())
|
|
261
|
-
})
|
|
273
|
+
document.getElementById("getAllGraphics")?.addEventListener("click", () => {
|
|
274
|
+
console.log(bmap.getFloorAllGraphics());
|
|
275
|
+
});
|
|
262
276
|
// 添加选中块儿
|
|
263
|
-
document.getElementById("addSelectBox")?.addEventListener(
|
|
264
|
-
const selectBox = new SelectBox(bmap.context)
|
|
265
|
-
selectBox.selectGraphic(bmap.getGraphicByNodeId(graphicId)!)
|
|
277
|
+
document.getElementById("addSelectBox")?.addEventListener("click", () => {
|
|
278
|
+
const selectBox = new SelectBox(bmap.context);
|
|
279
|
+
selectBox.selectGraphic(bmap.getGraphicByNodeId(graphicId)!);
|
|
266
280
|
setTimeout(() => {
|
|
267
|
-
selectBox.setEnable(false)
|
|
268
|
-
}, 1000)
|
|
269
|
-
})
|
|
281
|
+
selectBox.setEnable(false);
|
|
282
|
+
}, 1000);
|
|
283
|
+
});
|
|
270
284
|
// 切换楼层
|
|
271
|
-
document.getElementById("switchFloor")?.addEventListener(
|
|
285
|
+
document.getElementById("switchFloor")?.addEventListener("click", async () => {
|
|
272
286
|
await bmap.load({
|
|
273
287
|
brand: "crc",
|
|
274
288
|
project: "0202A501",
|
|
@@ -276,8 +290,7 @@ document.getElementById("switchFloor")?.addEventListener('click', async () => {
|
|
|
276
290
|
building: "A",
|
|
277
291
|
floor: "L1",
|
|
278
292
|
ts: "2024-01-12",
|
|
279
|
-
resource_type_list: [1, 2, 3, 4, 6].join(",")
|
|
280
|
-
|
|
293
|
+
resource_type_list: [1, 2, 3, 4, 6].join(","),
|
|
281
294
|
});
|
|
282
295
|
// 切换楼层
|
|
283
296
|
bmap.switchFloor({
|
|
@@ -287,200 +300,226 @@ document.getElementById("switchFloor")?.addEventListener('click', async () => {
|
|
|
287
300
|
building: "A",
|
|
288
301
|
floor: "L1",
|
|
289
302
|
ts: "2024-01-12",
|
|
290
|
-
resource_type_list: [1, 2, 3, 4, 6].join(",")
|
|
291
|
-
})
|
|
292
|
-
})
|
|
303
|
+
resource_type_list: [1, 2, 3, 4, 6].join(","),
|
|
304
|
+
});
|
|
305
|
+
});
|
|
293
306
|
// hover显示覆盖物
|
|
294
|
-
document
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
const overlay = new Overlay(bmap.context, { autoUpdate: false });
|
|
327
|
-
overlay.addEventListener(
|
|
328
|
-
"update-position",
|
|
329
|
-
({ x, y, height }: { x: number; y: number; height: number }) => {
|
|
330
|
-
overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${
|
|
331
|
-
-height + y - 20
|
|
332
|
-
}px - 100%), 0)`;
|
|
307
|
+
document
|
|
308
|
+
.getElementById("hoverShowOverlay")
|
|
309
|
+
?.addEventListener("click", async () => {
|
|
310
|
+
const overlaysMap = new Map<Graphic, Overlay>();
|
|
311
|
+
const overlayState = new Map<
|
|
312
|
+
Overlay,
|
|
313
|
+
{ graphicHover: boolean; divHover: boolean }
|
|
314
|
+
>();
|
|
315
|
+
bmap.context.addEventListener("hover", ({ graphics }) => {
|
|
316
|
+
// console.log("hover", graphics)
|
|
317
|
+
// overlaysMap.forEach(item => item.dispose())
|
|
318
|
+
// graphics.forEach(graphic => {
|
|
319
|
+
// const overlay = new Overlay(bmap.context)
|
|
320
|
+
// overlay.bindElement(graphic)
|
|
321
|
+
// const div = document.createElement("div")
|
|
322
|
+
// div.style.cssText = "width: 100px; height: 100px; background: red;transform: translate(-50%, -100%);"
|
|
323
|
+
// div.textContent = "显示一段文本"
|
|
324
|
+
// })
|
|
325
|
+
// 没有hover的元素要删除
|
|
326
|
+
overlaysMap.forEach((overlay, graphic) => {
|
|
327
|
+
if (!graphics.includes(graphic)) {
|
|
328
|
+
// overlay.dispose();
|
|
329
|
+
// overlaysMap.delete(graphic)
|
|
330
|
+
overlayState.get(overlay)!.graphicHover = false;
|
|
331
|
+
window.requestAnimationFrame(() => {
|
|
332
|
+
// 鼠标即不在div上也不再graphic上就销毁这个overlay
|
|
333
|
+
if (!overlayState.get(overlay)!.divHover) {
|
|
334
|
+
overlay.dispose();
|
|
335
|
+
overlaysMap.delete(graphic);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
333
338
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
div.style.cssText = "width: 100px; height: 100px; background: red;point-event: none; "
|
|
339
|
-
div.textContent = "显示一段文本"
|
|
340
|
-
overlay.div.addEventListener("mouseover", () => {
|
|
341
|
-
console.log("进入额")
|
|
342
|
-
overlayState.get(overlay)!.divHover = true
|
|
343
|
-
console.log(overlayState.get(overlay))
|
|
344
|
-
})
|
|
345
|
-
overlay.div.addEventListener("mouseout", () => {
|
|
346
|
-
console.log("移除了")
|
|
347
|
-
overlayState.get(overlay)!.divHover = false
|
|
348
|
-
if (!overlayState.get(overlay)!.graphicHover) {
|
|
349
|
-
overlay.dispose();
|
|
350
|
-
overlaysMap.delete(graphic)
|
|
339
|
+
});
|
|
340
|
+
graphics.forEach((graphic) => {
|
|
341
|
+
if (overlaysMap.has(graphic)) {
|
|
342
|
+
return;
|
|
351
343
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
})
|
|
359
|
-
|
|
344
|
+
const overlay = new Overlay(bmap.context, { autoUpdate: false });
|
|
345
|
+
overlay.addEventListener(
|
|
346
|
+
"update-position",
|
|
347
|
+
({ x, y, height }: { x: number; y: number; height: number }) => {
|
|
348
|
+
overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${
|
|
349
|
+
-height + y - 20
|
|
350
|
+
}px - 100%), 0)`;
|
|
351
|
+
}
|
|
352
|
+
);
|
|
353
|
+
overlay.bindElement(graphic);
|
|
354
|
+
const div = document.createElement("div");
|
|
355
|
+
// console.log(overlay)
|
|
356
|
+
div.style.cssText =
|
|
357
|
+
"width: 100px; height: 100px; background: red;point-event: none; ";
|
|
358
|
+
div.textContent = "显示一段文本";
|
|
359
|
+
overlay.div.addEventListener("mouseover", () => {
|
|
360
|
+
console.log("进入额");
|
|
361
|
+
overlayState.get(overlay)!.divHover = true;
|
|
362
|
+
console.log(overlayState.get(overlay));
|
|
363
|
+
});
|
|
364
|
+
overlay.div.addEventListener("mouseout", () => {
|
|
365
|
+
console.log("移除了");
|
|
366
|
+
overlayState.get(overlay)!.divHover = false;
|
|
367
|
+
if (!overlayState.get(overlay)!.graphicHover) {
|
|
368
|
+
overlay.dispose();
|
|
369
|
+
overlaysMap.delete(graphic);
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
overlay.div.appendChild(div);
|
|
373
|
+
overlaysMap.set(graphic, overlay);
|
|
374
|
+
overlayState.set(overlay, { graphicHover: true, divHover: false });
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
document.getElementById("changeGraphicColor")?.addEventListener("click", () => {
|
|
360
379
|
graphic.options.fillColor = "#000fff";
|
|
361
|
-
})
|
|
362
|
-
document
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
})
|
|
382
|
-
document
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
})
|
|
388
|
-
document
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
})
|
|
394
|
-
document
|
|
395
|
-
|
|
396
|
-
|
|
380
|
+
});
|
|
381
|
+
document
|
|
382
|
+
.getElementById("changeGraphicOpacity")
|
|
383
|
+
?.addEventListener("click", () => {
|
|
384
|
+
graphic.options.fillOpacity = 0.5;
|
|
385
|
+
});
|
|
386
|
+
document
|
|
387
|
+
.getElementById("changeGraphicBorder")
|
|
388
|
+
?.addEventListener("click", () => {
|
|
389
|
+
graphic.options.strokeColor = "#00ff00";
|
|
390
|
+
});
|
|
391
|
+
document
|
|
392
|
+
.getElementById("changeGraphicBorderOpacity")
|
|
393
|
+
?.addEventListener("click", () => {
|
|
394
|
+
graphic.options.strokeOpacity = 0.5;
|
|
395
|
+
});
|
|
396
|
+
document
|
|
397
|
+
.getElementById("changeGraphicHighlight")
|
|
398
|
+
?.addEventListener("click", () => {
|
|
399
|
+
// TODO 获取图源的资源id 在graphicLayer 和 poiLayer 中判断不是这些资源id的都改小透明度,是的透明度都设置成1
|
|
400
|
+
});
|
|
401
|
+
document
|
|
402
|
+
.getElementById("changeGraphicAirHeight")
|
|
403
|
+
?.addEventListener("click", () => {
|
|
404
|
+
graphic.options.airHeight = 10;
|
|
405
|
+
// TODO 获取图源的资源id 然后获取poi 还需要修改对应poi的高度 airHeight + height
|
|
406
|
+
});
|
|
407
|
+
document
|
|
408
|
+
.getElementById("changeGraphicHeight")
|
|
409
|
+
?.addEventListener("click", () => {
|
|
410
|
+
graphic.options.height = 20;
|
|
411
|
+
// TODO 获取图源的资源id 然后获取poi 还需要修改对应poi的高度 airHeight + height
|
|
412
|
+
});
|
|
413
|
+
document
|
|
414
|
+
.getElementById("changeGraphicVisible")
|
|
415
|
+
?.addEventListener("click", () => {
|
|
416
|
+
graphic.options.visible = false;
|
|
417
|
+
});
|
|
418
|
+
document.getElementById("changePoiIcon")?.addEventListener("click", () => {
|
|
419
|
+
poi.options.icon =
|
|
420
|
+
"https://prod-deployment.oss-cn-hangzhou.aliyuncs.com/dd932d4d105e453ea93dd1787dcae6eb_icon-%E5%A4%A7%E5%B1%8F.svg";
|
|
421
|
+
});
|
|
422
|
+
document.getElementById("changePoiText")?.addEventListener("click", () => {
|
|
423
|
+
poi.options.text = "修改后文本";
|
|
424
|
+
});
|
|
425
|
+
document.getElementById("changePoiVisible")?.addEventListener("click", () => {
|
|
426
|
+
bmap.context.currentFloor?.poiLayer.removePoi(poi);
|
|
427
|
+
});
|
|
428
|
+
document.getElementById("changeLightColor")?.addEventListener("click", () => {
|
|
429
|
+
bmap.context.changeAmbientLightColor(0xcccccc);
|
|
430
|
+
});
|
|
397
431
|
// document.getElementById("changeShadowLightColor")?.addEventListener('click', () => {
|
|
398
432
|
// bmap.context.shadow.changeLightColor(0x111000)
|
|
399
433
|
// })
|
|
400
|
-
document.getElementById("openMouseDrag")?.addEventListener(
|
|
401
|
-
bmap.context.control.enablePan = true
|
|
402
|
-
})
|
|
403
|
-
document.getElementById("closeMouseDrag")?.addEventListener(
|
|
404
|
-
bmap.context.control.enablePan = false
|
|
405
|
-
})
|
|
406
|
-
document.getElementById("openMouseZoom")?.addEventListener(
|
|
407
|
-
bmap.context.control.enableZoom = true
|
|
408
|
-
})
|
|
409
|
-
document.getElementById("closeMouseZoom")?.addEventListener(
|
|
410
|
-
bmap.context.control.enableZoom = false
|
|
411
|
-
})
|
|
412
|
-
document.getElementById("reduceMap")?.addEventListener(
|
|
413
|
-
bmap.reduceMap(0.5, 100)
|
|
414
|
-
})
|
|
415
|
-
document.getElementById("enlargeMap")?.addEventListener(
|
|
416
|
-
bmap.enlargeMap(0.3, 0)
|
|
417
|
-
})
|
|
418
|
-
document.getElementById("centerView")?.addEventListener(
|
|
419
|
-
bmap.resize()
|
|
420
|
-
bmap.resetView()
|
|
421
|
-
})
|
|
422
|
-
document.getElementById("centerGraphic")?.addEventListener(
|
|
423
|
-
bmap.context.fitCameraToObject(graphic)
|
|
424
|
-
})
|
|
425
|
-
document.getElementById("change2d")?.addEventListener(
|
|
426
|
-
bmap.changeMapType(
|
|
427
|
-
})
|
|
428
|
-
document.getElementById("change3d")?.addEventListener(
|
|
429
|
-
bmap.changeMapType(
|
|
430
|
-
})
|
|
431
|
-
document
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
447
|
-
document.getElementById("
|
|
448
|
-
bmap.context.
|
|
449
|
-
bmap.context.
|
|
450
|
-
})
|
|
451
|
-
document.getElementById("
|
|
434
|
+
document.getElementById("openMouseDrag")?.addEventListener("click", () => {
|
|
435
|
+
bmap.context.control.enablePan = true;
|
|
436
|
+
});
|
|
437
|
+
document.getElementById("closeMouseDrag")?.addEventListener("click", () => {
|
|
438
|
+
bmap.context.control.enablePan = false;
|
|
439
|
+
});
|
|
440
|
+
document.getElementById("openMouseZoom")?.addEventListener("click", () => {
|
|
441
|
+
bmap.context.control.enableZoom = true;
|
|
442
|
+
});
|
|
443
|
+
document.getElementById("closeMouseZoom")?.addEventListener("click", () => {
|
|
444
|
+
bmap.context.control.enableZoom = false;
|
|
445
|
+
});
|
|
446
|
+
document.getElementById("reduceMap")?.addEventListener("click", () => {
|
|
447
|
+
bmap.reduceMap(0.5, 100);
|
|
448
|
+
});
|
|
449
|
+
document.getElementById("enlargeMap")?.addEventListener("click", () => {
|
|
450
|
+
bmap.enlargeMap(0.3, 0);
|
|
451
|
+
});
|
|
452
|
+
document.getElementById("centerView")?.addEventListener("click", () => {
|
|
453
|
+
bmap.resize();
|
|
454
|
+
bmap.resetView();
|
|
455
|
+
});
|
|
456
|
+
document.getElementById("centerGraphic")?.addEventListener("click", () => {
|
|
457
|
+
bmap.context.fitCameraToObject(graphic);
|
|
458
|
+
});
|
|
459
|
+
document.getElementById("change2d")?.addEventListener("click", () => {
|
|
460
|
+
bmap.changeMapType("2d");
|
|
461
|
+
});
|
|
462
|
+
document.getElementById("change3d")?.addEventListener("click", () => {
|
|
463
|
+
bmap.changeMapType("3d");
|
|
464
|
+
});
|
|
465
|
+
document
|
|
466
|
+
.getElementById("configurePolarShortcutKeys")
|
|
467
|
+
?.addEventListener("click", () => {
|
|
468
|
+
bmap.configurePolarShortcutKeys(["ControlLeft", "MetaLeft", "KeyC"]);
|
|
469
|
+
});
|
|
470
|
+
document
|
|
471
|
+
.getElementById("configureAzimuthShortcutKeys")
|
|
472
|
+
?.addEventListener("click", () => {
|
|
473
|
+
bmap.configureAzimuthalShortcutKeys(["KeyV"]);
|
|
474
|
+
});
|
|
475
|
+
document.getElementById("changeAzimuth")?.addEventListener("click", () => {
|
|
476
|
+
bmap.rotateMap();
|
|
477
|
+
});
|
|
478
|
+
const fn = (data) => {
|
|
479
|
+
console.log(data.graphics, data.pois);
|
|
480
|
+
};
|
|
481
|
+
document.getElementById("openHover")?.addEventListener("click", () => {
|
|
482
|
+
bmap.context.addEventListener("pointer-over", fn);
|
|
483
|
+
bmap.context.addEventListener("pointer-move", fn);
|
|
484
|
+
});
|
|
485
|
+
document.getElementById("closeHover")?.addEventListener("click", () => {
|
|
486
|
+
bmap.context.removeEventListener("pointer-over", fn);
|
|
487
|
+
bmap.context.removeEventListener("pointer-move", fn);
|
|
488
|
+
});
|
|
489
|
+
document.getElementById("mousePickup")?.addEventListener("click", () => {
|
|
452
490
|
// TODO
|
|
453
|
-
})
|
|
454
|
-
document.getElementById("mouseMulPickup")?.addEventListener(
|
|
491
|
+
});
|
|
492
|
+
document.getElementById("mouseMulPickup")?.addEventListener("click", () => {
|
|
455
493
|
// TODO
|
|
456
|
-
})
|
|
457
|
-
document.getElementById("overlayText")?.addEventListener(
|
|
458
|
-
const overlay = new Overlay(bmap.context)
|
|
459
|
-
overlay.bindElement(graphic)
|
|
460
|
-
overlay.div.textContent = "显示覆盖物文本"
|
|
494
|
+
});
|
|
495
|
+
document.getElementById("overlayText")?.addEventListener("click", () => {
|
|
496
|
+
const overlay = new Overlay(bmap.context);
|
|
497
|
+
overlay.bindElement(graphic);
|
|
498
|
+
overlay.div.textContent = "显示覆盖物文本";
|
|
461
499
|
document.getElementById("hideOverlayText")?.addEventListener("click", () => {
|
|
462
|
-
overlay.dispose()
|
|
463
|
-
})
|
|
464
|
-
})
|
|
465
|
-
document.getElementById("clickOverlayText")?.addEventListener(
|
|
466
|
-
bmap.context.addEventListener(
|
|
467
|
-
console.log(graphics, position)
|
|
500
|
+
overlay.dispose();
|
|
501
|
+
});
|
|
502
|
+
});
|
|
503
|
+
document.getElementById("clickOverlayText")?.addEventListener("click", () => {
|
|
504
|
+
bmap.context.addEventListener("graphic-click", ({ graphics, position }) => {
|
|
505
|
+
console.log(graphics, position);
|
|
468
506
|
if (position) {
|
|
469
|
-
const overlay = new Overlay(bmap.context)
|
|
470
|
-
overlay.position.copy(position)
|
|
471
|
-
overlay.div.textContent = "点击显示覆盖物文本"
|
|
507
|
+
const overlay = new Overlay(bmap.context);
|
|
508
|
+
overlay.position.copy(position);
|
|
509
|
+
overlay.div.textContent = "点击显示覆盖物文本";
|
|
472
510
|
}
|
|
473
|
-
})
|
|
474
|
-
})
|
|
475
|
-
document.getElementById("overlayImage")?.addEventListener(
|
|
476
|
-
const overlay = new Overlay(bmap.context)
|
|
477
|
-
overlay.bindElement(graphic)
|
|
478
|
-
const img = document.createElement("img")
|
|
479
|
-
img.src =
|
|
480
|
-
|
|
481
|
-
overlay.div.
|
|
482
|
-
|
|
483
|
-
|
|
511
|
+
});
|
|
512
|
+
});
|
|
513
|
+
document.getElementById("overlayImage")?.addEventListener("click", () => {
|
|
514
|
+
const overlay = new Overlay(bmap.context);
|
|
515
|
+
overlay.bindElement(graphic);
|
|
516
|
+
const img = document.createElement("img");
|
|
517
|
+
img.src =
|
|
518
|
+
"https://robot-vr-public.cdn.bcebos.com/navigation_images/8c591818844be70fd93bd5817c7d3d50.png";
|
|
519
|
+
overlay.div.style.transform = "translate3d(-50%, -50%, 0)";
|
|
520
|
+
overlay.div.appendChild(img);
|
|
521
|
+
});
|
|
522
|
+
document.getElementById("heatmap")?.addEventListener("click", () => {
|
|
484
523
|
bmap.addHeatmap({
|
|
485
524
|
data: [
|
|
486
525
|
{ x: -100, y: 100, value: 1 },
|
|
@@ -489,25 +528,31 @@ document.getElementById("heatmap")?.addEventListener('click', () => {
|
|
|
489
528
|
{ x: -100, y: -100, value: 25 },
|
|
490
529
|
],
|
|
491
530
|
max: 100,
|
|
492
|
-
min: 1
|
|
493
|
-
})
|
|
494
|
-
})
|
|
495
|
-
document
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
bmap.
|
|
510
|
-
|
|
531
|
+
min: 1,
|
|
532
|
+
});
|
|
533
|
+
});
|
|
534
|
+
document
|
|
535
|
+
.getElementById("measureDistance")
|
|
536
|
+
?.addEventListener("click", async () => {
|
|
537
|
+
bmap.context.currentFloor?.addGround(graphic);
|
|
538
|
+
const distance = await bmap.measureDistance();
|
|
539
|
+
console.log("测量距离是" + distance + "米");
|
|
540
|
+
});
|
|
541
|
+
document
|
|
542
|
+
.getElementById("cancelMeasureDistance")
|
|
543
|
+
?.addEventListener("click", async () => {
|
|
544
|
+
bmap.cancelDistance();
|
|
545
|
+
});
|
|
546
|
+
document.getElementById("measureArea")?.addEventListener("click", async () => {
|
|
547
|
+
bmap.context.currentFloor?.addGround(graphic);
|
|
548
|
+
const distance = await bmap.measureArea();
|
|
549
|
+
console.log("测量面积是" + distance + "平方米");
|
|
550
|
+
});
|
|
551
|
+
document
|
|
552
|
+
.getElementById("cancelMeasureArea")
|
|
553
|
+
?.addEventListener("click", async () => {
|
|
554
|
+
bmap.cancelArea();
|
|
555
|
+
});
|
|
511
556
|
|
|
512
557
|
// TODO - 「<键」顺时针旋转,「>键」逆时针旋转
|
|
513
558
|
// TODO - 配置坐标定点旋转快捷键的接口
|
|
@@ -523,11 +568,11 @@ document.getElementById("cancelMeasureArea")?.addEventListener('click', async ()
|
|
|
523
568
|
// TODO 可以设置字体背景颜色、字体背景描边颜色
|
|
524
569
|
// poi.options.textBackgroundColor = "#000fff"
|
|
525
570
|
// poi.options.textBackgroundStrokeColor = "#000fff"
|
|
526
|
-
|
|
571
|
+
|
|
527
572
|
// TODO 连线覆盖物
|
|
528
573
|
// const overlay = new LinkOverlay(bmap.context)
|
|
529
|
-
|
|
530
|
-
|
|
574
|
+
// overlay.position.copy(position)
|
|
575
|
+
// overlay.div.appendChild()
|
|
531
576
|
// TODO 弹窗覆盖物
|
|
532
577
|
// const overlay = new ModalOverlay(bmap.context)
|
|
533
578
|
// overlay.position.copy(position)
|
|
@@ -549,7 +594,7 @@ document.getElementById("cancelMeasureArea")?.addEventListener('click', async ()
|
|
|
549
594
|
// bmap.switchFloor("B1")
|
|
550
595
|
// TODO 加载地图
|
|
551
596
|
// await bmap.load({ project, phase, building, floor });
|
|
552
|
-
// TODO 资源数据渲染地图的调用
|
|
597
|
+
// TODO 资源数据渲染地图的调用
|
|
553
598
|
// 传入资源图层类型ID,向后台请求数据,铺位:10001, 库房:10002,广告位:10003
|
|
554
599
|
// showResourceLayerByLayerType
|
|
555
600
|
// TODO 加载主题
|