@aibee/crc-bmap 0.0.3-gamma

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.
Files changed (42) hide show
  1. package/README.md +1 -0
  2. package/example/index.css +22 -0
  3. package/example/index.html +54 -0
  4. package/example/src/main.ts +315 -0
  5. package/example/vite.config.ts +28 -0
  6. package/lib/bmap.cjs.min.js +2 -0
  7. package/lib/bmap.cjs.min.js.map +7 -0
  8. package/lib/bmap.esm.js +1957 -0
  9. package/lib/bmap.esm.js.map +7 -0
  10. package/lib/bmap.esm.min.js +2 -0
  11. package/lib/bmap.esm.min.js.map +7 -0
  12. package/lib/bmap.min.js +2 -0
  13. package/lib/bmap.min.js.map +7 -0
  14. package/lib/src/bmap.d.ts +93 -0
  15. package/lib/src/config.d.ts +21 -0
  16. package/lib/src/context.d.ts +105 -0
  17. package/lib/src/elements/base-svg.d.ts +16 -0
  18. package/lib/src/elements/floor.d.ts +25 -0
  19. package/lib/src/elements/graphic.d.ts +46 -0
  20. package/lib/src/elements/heatmap.d.ts +42 -0
  21. package/lib/src/elements/index.d.ts +8 -0
  22. package/lib/src/elements/overlay.d.ts +18 -0
  23. package/lib/src/elements/poi.d.ts +34 -0
  24. package/lib/src/elements/shadow.d.ts +14 -0
  25. package/lib/src/elements/svg-line.d.ts +28 -0
  26. package/lib/src/elements/svg-polygon.d.ts +33 -0
  27. package/lib/src/index.d.ts +4 -0
  28. package/lib/src/layer/graphic-layer.d.ts +16 -0
  29. package/lib/src/layer/index.d.ts +3 -0
  30. package/lib/src/layer/layer.d.ts +7 -0
  31. package/lib/src/layer/poi-layer.d.ts +24 -0
  32. package/lib/src/utils/coordinate.d.ts +19 -0
  33. package/lib/src/utils/dispose.d.ts +2 -0
  34. package/lib/src/utils/index.d.ts +9 -0
  35. package/lib/src/utils/init-helper.d.ts +10 -0
  36. package/lib/src/utils/promise.d.ts +7 -0
  37. package/lib/src/utils/proxy.d.ts +6 -0
  38. package/lib/src/utils/rules.d.ts +1 -0
  39. package/lib/src/utils/svg.d.ts +22 -0
  40. package/lib/src/utils/texture.d.ts +9 -0
  41. package/lib/src/utils/timer.d.ts +20 -0
  42. package/package.json +44 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # BMap
@@ -0,0 +1,22 @@
1
+ body {
2
+ margin: 0;
3
+ padding: 0;
4
+ overflow: hidden;
5
+ background-color: red;
6
+ }
7
+
8
+ #app {
9
+ width: 80vw;
10
+ height: 80vh;
11
+ position: fixed;
12
+ top: 10vh;
13
+ left: 10vw;
14
+ z-index: 0;
15
+ }
16
+
17
+ #button-group {
18
+ position: fixed;
19
+ top: 10px;
20
+ left: 10px;
21
+ z-index: 1;
22
+ }
@@ -0,0 +1,54 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>BMap Example</title>
7
+ <link rel="stylesheet" href="./index.css">
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <div id="button-group">
12
+ <button id="changeGraphicColor">修改图元颜色</button>
13
+ <button id="changeGraphicOpacity">修改图元透明度</button>
14
+ <button id="changeGraphicBorder">修改图元描边颜色</button>
15
+ <button id="changeGraphicBorderOpacity">修改图元描边透明度</button>
16
+ <button id="changeGraphicHighlight" disabled>修改图元高亮(未实现)</button>
17
+ <button id="changeGraphicAirHeight">修改图元悬空高度</button>
18
+ <button id="changeGraphicHeight">修改图元高度</button>
19
+ <button id="changeGraphicVisible">隐藏图元接口</button>
20
+ <button id="changePoiIcon">修改信息点icon</button>
21
+ <button id="changePoiText">修改信息点文本</button>
22
+ <button id="changePoiVisible">隐藏信息点</button>
23
+ <button id="changeLightColor">修改光颜色</button>
24
+ <!-- <button id="changeShadowLightColor">修改阴影光颜色</button> -->
25
+ <button id="openMouseDrag">开启鼠标拖拽</button>
26
+ <button id="closeMouseDrag">关闭鼠标拖拽</button>
27
+ <button id="openMouseZoom">开启鼠标缩放</button>
28
+ <button id="closeMouseZoom">关闭鼠标缩放</button>
29
+ <button id="reduceMap">缩小地图</button>
30
+ <button id="enlargeMap">放大地图</button>
31
+ <button id="centerView">居中视图</button>
32
+ <button id="centerGraphic">居中图元</button>
33
+ <button id="change2d">切换2d</button>
34
+ <button id="change3d">切换3d</button>
35
+ <button id="configurePolarShortcutKeys">配置坐标定点 2D/3D线性切换的快捷键</button>
36
+ <button id="configureAzimuthShortcutKeys">配置坐标定点旋转快捷键</button>
37
+ <button id="changeAzimuth">地图旋转</button>
38
+ <button id="openHover">启用鼠标hover显示</button>
39
+ <button id="closeHover">关闭鼠标hover显示</button>
40
+ <button id="mousePickup" disabled>鼠标点击拾取</button>
41
+ <button id="mouseMulPickup" disabled>鼠标多选拾取</button>
42
+ <button id="overlayText">显示覆盖物文本</button>
43
+ <button id="clickOverlayText">点击地图显示覆盖物文本</button>
44
+ <button id="hideOverlayText">删除覆盖物文本</button>
45
+ <button id="overlayImage">显示覆盖物图片</button>
46
+ <button id="heatmap">热力图数据</button>
47
+ <button id="measureDistance">测量距离</button>
48
+ <button id="cancelMeasureDistance">取消测量距离</button>
49
+ <button id="measureArea">测量面积</button>
50
+ <button id="cancelMeasureArea">取消测量面积</button>
51
+ </div>
52
+ <script type="module" src="/src/main.ts"></script>
53
+ </body>
54
+ </html>
@@ -0,0 +1,315 @@
1
+ import { BMap, Overlay } from '../../src'
2
+
3
+ const bmap = new BMap(document.getElementById('app')!);
4
+ (async () => {
5
+ await bmap.load({
6
+ brand: "crc",
7
+ project: "0202A501",
8
+ phase: "175",
9
+ building: "85",
10
+ floor: "B1",
11
+ ts: "2023-11-15"
12
+ });
13
+ bmap.switchFloor("B1")
14
+ })();
15
+ bmap.context.addEventListener('graphic-click', (data) => {
16
+ console.log('graphic-click', data.graphics)
17
+ });
18
+
19
+ bmap.context.addEventListener('poi-click', (data) => {
20
+ console.log('poi-click', data.pois)
21
+ bmap.translateElementToCenter(data.pois[0], 500)
22
+ });
23
+
24
+ (window as any).bmap = bmap;
25
+
26
+
27
+ /**
28
+ * 显示比例尺
29
+ */
30
+ const ratioDiv = document.createElement("div")
31
+ ratioDiv.style.cssText = "position: absolute; bottom: 10vh; left: 10vw; z-index: 2; background: blue; color: red;"
32
+ ratioDiv.textContent = "100M";
33
+ document.body.appendChild(ratioDiv)
34
+ bmap.context.addEventListener('change-ratio', ({ px }) => {
35
+ // px 一百米对应的像素点
36
+ let m = 100;
37
+ let scale = 1
38
+ // 让px保持在50-100中间的一个米的整数
39
+ if (px < 50) {
40
+ scale = Math.ceil(100 / px)
41
+ px *= scale
42
+ m *= scale
43
+ } else if (px > 100) {
44
+ scale = Math.floor(px / 100)
45
+ while (m % scale != 0) {
46
+ scale--;
47
+ }
48
+ px /= scale
49
+ m /= scale
50
+ }
51
+ ratioDiv.style.width = `${px}px`;
52
+ ratioDiv.textContent = `${m}米`
53
+ })
54
+
55
+ /**
56
+ * 按钮操作
57
+ */
58
+ document.getElementById("changeGraphicColor")?.addEventListener('click', () => {
59
+ graphic.options.fillColor = "#000fff";
60
+ })
61
+ document.getElementById("changeGraphicOpacity")?.addEventListener('click', () => {
62
+ graphic.options.fillOpacity = 0.5;
63
+ })
64
+ document.getElementById("changeGraphicBorder")?.addEventListener('click', () => {
65
+ graphic.options.strokeColor = "#00ff00";
66
+ })
67
+ document.getElementById("changeGraphicBorderOpacity")?.addEventListener('click', () => {
68
+ graphic.options.strokeOpacity = 0.5;
69
+ })
70
+ document.getElementById("changeGraphicHighlight")?.addEventListener('click', () => {
71
+ // TODO 获取图源的资源id 在graphicLayer 和 poiLayer 中判断不是这些资源id的都改小透明度,是的透明度都设置成1
72
+ })
73
+ document.getElementById("changeGraphicAirHeight")?.addEventListener('click', () => {
74
+ graphic.options.airHeight = 10
75
+ // TODO 获取图源的资源id 然后获取poi 还需要修改对应poi的高度 airHeight + height
76
+ })
77
+ document.getElementById("changeGraphicHeight")?.addEventListener('click', () => {
78
+ graphic.options.height = 20
79
+ // TODO 获取图源的资源id 然后获取poi 还需要修改对应poi的高度 airHeight + height
80
+ })
81
+ document.getElementById("changeGraphicVisible")?.addEventListener('click', () => {
82
+ graphic.options.visible = false
83
+ })
84
+ document.getElementById("changePoiIcon")?.addEventListener('click', () => {
85
+ poi.options.icon = 'https://prod-deployment.oss-cn-hangzhou.aliyuncs.com/dd932d4d105e453ea93dd1787dcae6eb_icon-%E5%A4%A7%E5%B1%8F.svg'
86
+ })
87
+ document.getElementById("changePoiText")?.addEventListener('click', () => {
88
+ poi.options.text = '修改后文本'
89
+ })
90
+ document.getElementById("changePoiVisible")?.addEventListener('click', () => {
91
+ bmap.context.currentFloor?.poiLayer.removePoi(poi)
92
+ })
93
+ document.getElementById("changeLightColor")?.addEventListener('click', () => {
94
+ bmap.context.changeAmbientLightColor(0xcccccc)
95
+ })
96
+ // document.getElementById("changeShadowLightColor")?.addEventListener('click', () => {
97
+ // bmap.context.shadow.changeLightColor(0x111000)
98
+ // })
99
+ document.getElementById("openMouseDrag")?.addEventListener('click', () => {
100
+ bmap.context.control.enablePan = true
101
+ })
102
+ document.getElementById("closeMouseDrag")?.addEventListener('click', () => {
103
+ bmap.context.control.enablePan = false
104
+ })
105
+ document.getElementById("openMouseZoom")?.addEventListener('click', () => {
106
+ bmap.context.control.enableZoom = true
107
+ })
108
+ document.getElementById("closeMouseZoom")?.addEventListener('click', () => {
109
+ bmap.context.control.enableZoom = false
110
+ })
111
+ document.getElementById("reduceMap")?.addEventListener('click', () => {
112
+ bmap.reduceMap(0.5, 100)
113
+ })
114
+ document.getElementById("enlargeMap")?.addEventListener('click', () => {
115
+ bmap.enlargeMap(0.3, 0)
116
+ })
117
+ document.getElementById("centerView")?.addEventListener('click', () => {
118
+ // TODO 这里应该是地面
119
+ bmap.context.fitCameraToObject(graphic)
120
+ })
121
+ document.getElementById("centerGraphic")?.addEventListener('click', () => {
122
+ bmap.context.fitCameraToObject(graphic)
123
+ })
124
+ document.getElementById("change2d")?.addEventListener('click', () => {
125
+ bmap.changeMapType('2d')
126
+ })
127
+ document.getElementById("change3d")?.addEventListener('click', () => {
128
+ bmap.changeMapType('3d')
129
+ })
130
+ document.getElementById("configurePolarShortcutKeys")?.addEventListener('click', () => {
131
+ bmap.configurePolarShortcutKeys(['ControlLeft', 'MetaLeft', 'KeyC'])
132
+ })
133
+ document.getElementById("configureAzimuthShortcutKeys")?.addEventListener('click', () => {
134
+ bmap.configureAzimuthalShortcutKeys(['KeyV'])
135
+ })
136
+ document.getElementById("changeAzimuth")?.addEventListener('click', () => {
137
+ bmap.rotateMap()
138
+ })
139
+ const fn = (data) => {
140
+ console.log(data.graphics, data.pois)
141
+ }
142
+ document.getElementById("openHover")?.addEventListener('click', () => {
143
+ bmap.context.addEventListener("pointer-over", fn)
144
+ bmap.context.addEventListener("pointer-move", fn)
145
+ })
146
+ document.getElementById("closeHover")?.addEventListener('click', () => {
147
+ bmap.context.removeEventListener("pointer-over", fn)
148
+ bmap.context.removeEventListener("pointer-move", fn)
149
+ })
150
+ document.getElementById("mousePickup")?.addEventListener('click', () => {
151
+ // TODO
152
+ })
153
+ document.getElementById("mouseMulPickup")?.addEventListener('click', () => {
154
+ // TODO
155
+ })
156
+ document.getElementById("overlayText")?.addEventListener('click', () => {
157
+ const overlay = new Overlay(bmap.context)
158
+ overlay.bindElement(graphic)
159
+ overlay.div.textContent = "显示覆盖物文本"
160
+ document.getElementById("hideOverlayText")?.addEventListener("click", () => {
161
+ overlay.dispose()
162
+ })
163
+ })
164
+ document.getElementById("clickOverlayText")?.addEventListener('click', () => {
165
+ bmap.context.addEventListener('graphic-click', ({ graphics, position }) => {
166
+ console.log(graphics, position)
167
+ if (position) {
168
+ const overlay = new Overlay(bmap.context)
169
+ overlay.position.copy(position)
170
+ overlay.div.textContent = "点击显示覆盖物文本"
171
+ }
172
+ })
173
+ })
174
+ document.getElementById("overlayImage")?.addEventListener('click', () => {
175
+ const overlay = new Overlay(bmap.context)
176
+ overlay.bindElement(graphic)
177
+ const img = document.createElement("img")
178
+ img.src = "https://robot-vr-public.cdn.bcebos.com/navigation_images/8c591818844be70fd93bd5817c7d3d50.png"
179
+ overlay.div.style.transform = 'translate3d(-50%, -50%, 0)'
180
+ overlay.div.appendChild(img)
181
+ })
182
+ document.getElementById("heatmap")?.addEventListener('click', () => {
183
+ bmap.addHeatmap({
184
+ data: [
185
+ { x: -100, y: 100, value: 1 },
186
+ { x: 100, y: 100, value: 100 },
187
+ { x: 100, y: -100, value: 50 },
188
+ { x: -100, y: -100, value: 25 },
189
+ ],
190
+ max: 100,
191
+ min: 1
192
+ })
193
+ })
194
+ document.getElementById("measureDistance")?.addEventListener('click', async () => {
195
+ bmap.context.currentFloor?.addGround(graphic)
196
+ const distance = await bmap.measureDistance()
197
+ console.log("测量距离是" + distance + "米")
198
+ })
199
+ document.getElementById("cancelMeasureDistance")?.addEventListener('click', async () => {
200
+ bmap.cancelDistance()
201
+ })
202
+ document.getElementById("measureArea")?.addEventListener('click', async () => {
203
+ bmap.context.currentFloor?.addGround(graphic)
204
+ const distance = await bmap.measureArea()
205
+ console.log("测量面积是" + distance + "平方米")
206
+ })
207
+ document.getElementById("cancelMeasureArea")?.addEventListener('click', async () => {
208
+ bmap.cancelArea()
209
+ })
210
+
211
+ // TODO - 「<键」顺时针旋转,「>键」逆时针旋转
212
+ // TODO - 配置坐标定点旋转快捷键的接口
213
+ // - 选中某图元,可以当前图元为中心进行旋转
214
+ // bmap.setRotateTarget(element: Object3D)
215
+ // TODO 选中某图元,可以当前图元为中心进行2D/3D切换
216
+ // bmap.setChangeTarget(element: Object3D)
217
+ // TODO 居中视图
218
+ // bmap.context.fitCameraToView()
219
+ // TODO 修改poi的字体颜色和字体大小
220
+ // poi.options.color = "#fff000"
221
+ // poi.options.fontSize = 100
222
+ // TODO 可以设置字体背景颜色、字体背景描边颜色
223
+ // poi.options.textBackgroundColor = "#000fff"
224
+ // poi.options.textBackgroundStrokeColor = "#000fff"
225
+
226
+ // TODO 连线覆盖物
227
+ // const overlay = new LinkOverlay(bmap.context)
228
+ // overlay.position.copy(position)
229
+ // overlay.div.appendChild()
230
+ // TODO 弹窗覆盖物
231
+ // const overlay = new ModalOverlay(bmap.context)
232
+ // overlay.position.copy(position)
233
+ // overlay.div.appendChild()
234
+ // TODO 数据可视化图表
235
+ // const overlay = new EchartsOverlay(bmap.context, width, height)
236
+ // overlay.position.copy(position)
237
+ // overlay.setEchartsOptions({...})
238
+ // TODO 显示图层弹窗
239
+ // bmap.showLayerPanel(bool)
240
+ // bmap.switchLayer(layer)
241
+ // TODO 显示比例尺
242
+ // bmap.showScale(bool)
243
+ // TODO 定位
244
+ // const position = bmap.getCurrentPosition()
245
+ // TODO 路线规划
246
+ // const route = bmap.getRoute(start, end)
247
+ // TODO 切换楼层
248
+ // bmap.switchFloor("B1")
249
+ // TODO 加载地图
250
+ // await bmap.load({ project, phase, building, floor });
251
+ // TODO 资源数据渲染地图的调用
252
+ // 传入资源图层类型ID,向后台请求数据,铺位:10001, 库房:10002,广告位:10003
253
+ // showResourceLayerByLayerType
254
+ // TODO 加载主题
255
+ /**
256
+ * interface Theme {
257
+ id: number, // 主题样式
258
+ globalThemeConfig: {
259
+ lightConfig: {
260
+ hemisphereLight: [0xffffff, 0xeeeeee, 1], // 半球光
261
+ ambientLight: [0xffffff] // 环境光
262
+ },
263
+ backgroundConfig: {
264
+ fillColor: string, // 背景色
265
+ fillOpacity: number, // 填充透明度
266
+ },
267
+ polygonStyleConfig: {
268
+ strokeColor: string,
269
+ strokeOpacity: number,
270
+ fillColor: string,
271
+ fillOpacity: number,
272
+ selectedColor: string,
273
+ },
274
+ pointStyleConfig: {
275
+ poiFontSize: number,
276
+ poiFontColor: string,
277
+ poiIconSize: number,
278
+ },
279
+ floorFillColor: string, // 地面颜色
280
+ floorShadow: boolean, // 地面阴影
281
+ },
282
+ businessThemeConfig: [{
283
+ rule: 'userData.category_name = "母婴"',
284
+ polygonStyleConfig: {
285
+ strokeColor: string | null,
286
+ strokeOpacity: number | null,
287
+ fillColor: string | null,
288
+ fillOpacity: number | null,
289
+ selectedColor: string | null,
290
+ },
291
+ pointStyleConfig: {
292
+ poiFontSize: number | null,
293
+ poiFontColor: string | null,
294
+ poiIconSize: number | null,
295
+ },
296
+ }, {
297
+ rule: 'layerType = "铺位"',
298
+ polygonStyleConfig: {
299
+ strokeColor: string | null,
300
+ strokeOpacity: number | null,
301
+ fillColor: string | null,
302
+ fillOpacity: number | null,
303
+ selectedColor: string | null,
304
+ },
305
+ pointStyleConfig: {
306
+ poiFontSize: number | null,
307
+ poiFontColor: string | null,
308
+ poiIconSize: number | null,
309
+ },
310
+ }]
311
+ }
312
+
313
+ bmap.loadThemeById(themeid)
314
+ */
315
+ // bmap.loadThemeById(themeid)
@@ -0,0 +1,28 @@
1
+ import { defineConfig } from 'vite'
2
+ import path from 'path'
3
+
4
+ // https://vitejs.dev/config/
5
+ export default defineConfig({
6
+ base: '/',
7
+ build: {
8
+ rollupOptions: {
9
+ input: {
10
+ main: './index.html'
11
+ },
12
+ }
13
+ },
14
+ resolve: {
15
+ alias: {
16
+ '@': path.resolve('src')
17
+ }
18
+ },
19
+ server: {
20
+ proxy: {
21
+ '/api': {
22
+ target: "https://middlewaretest.aibee.cn",
23
+ changeOrigin: true,
24
+ rewrite: (path) => path.replace(/^\/api/, '')
25
+ }
26
+ }
27
+ }
28
+ })
@@ -0,0 +1,2 @@
1
+ "use strict";var Y=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames,yt=Object.getOwnPropertySymbols;var bt=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable;var P=Math.pow,et=(o,n,t)=>n in o?Y(o,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[n]=t,wt=(o,n)=>{for(var t in n||(n={}))bt.call(n,t)&&et(o,t,n[t]);if(yt)for(var t of yt(n))It.call(n,t)&&et(o,t,n[t]);return o};var jt=(o,n)=>{for(var t in n)Y(o,t,{get:n[t],enumerable:!0})},$t=(o,n,t,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Bt(n))!bt.call(o,i)&&i!==t&&Y(o,i,{get:()=>n[i],enumerable:!(e=Vt(n,i))||e.enumerable});return o};var Kt=o=>$t(Y({},"__esModule",{value:!0}),o);var s=(o,n,t)=>(et(o,typeof n!="symbol"?n+"":n,t),t);var z=(o,n,t)=>new Promise((e,i)=>{var r=l=>{try{c(t.next(l))}catch(h){i(h)}},a=l=>{try{c(t.throw(l))}catch(h){i(h)}},c=l=>l.done?e(l.value):Promise.resolve(l.value).then(r,a);c((t=t.apply(o,n)).next())});var _t={};jt(_t,{BMap:()=>ft,Floor:()=>U,Graphic:()=>L,HeatmapElement:()=>X,Overlay:()=>K,Poi:()=>S,Shadow:()=>$,SvgLine:()=>W,SvgPolygon:()=>_,Timer:()=>V,clearCanvas:()=>mt,clearTextTexture:()=>pt,createCanvas:()=>Ct,createCircle:()=>O,createLine:()=>j,createSvg:()=>ut,createSvgElement:()=>Z,defaultConfig:()=>Mt,dispose:()=>w,getCenter:()=>dt,getConfig:()=>gt,getTextureByText:()=>Xt,hasChinese:()=>ht,initCamera:()=>ot,initCanvas:()=>Pt,initControl:()=>st,initDirectionalLight:()=>ct,initLight:()=>rt,initRenderer:()=>nt,initScene:()=>it,initShape:()=>at,proxyOptions:()=>B,setCirclePosition:()=>C,setLineStartEnd:()=>y,timeoutPromise:()=>I,vector3ToDevice:()=>x});module.exports=Kt(_t);var kt=require("three");var V=class{constructor(){s(this,"tasks",{requestAnimation:new Set,timeout:new Set,interval:new Set})}requestAnimationFrame(n){let t=window.requestAnimationFrame(()=>{this.tasks.requestAnimation.delete(t),n()});return this.tasks.requestAnimation.add(t),t}cancelAnimationFrame(n){this.tasks.requestAnimation.delete(n),window.cancelAnimationFrame(n)}setTimeout(n,t){let e=window.setTimeout(()=>{this.tasks.timeout.delete(e),n()},t);return this.tasks.timeout.add(e),e}clearTimeout(n){this.tasks.timeout.delete(n),window.clearTimeout(n)}setInterval(n,t){let e=window.setInterval(()=>{this.tasks.interval.delete(e),n()},t);return this.tasks.interval.add(e),e}clearInterval(n){this.tasks.interval.delete(n),window.clearInterval(n)}dispose(){this.tasks.requestAnimation.forEach(n=>{window.cancelAnimationFrame(n)}),this.tasks.requestAnimation.clear(),this.tasks.timeout.forEach(n=>{window.clearTimeout(n)}),this.tasks.timeout.clear(),this.tasks.interval.forEach(n=>{window.clearInterval(n)}),this.tasks.interval.clear()}};var d=require("three"),Et=require("three/examples/jsm/controls/MapControls");function it(){let o=new d.Scene;return o.background=new d.Color(16777215),o}function nt(){let o=new d.WebGLRenderer({antialias:!0});return o.setClearColor(16777215),o.setPixelRatio(window.devicePixelRatio),o.shadowMap.enabled=!0,o.shadowMap.autoUpdate=!0,o.shadowMap.type=d.PCFSoftShadowMap,o}function ot(o,n){let t=new d.OrthographicCamera(-o/2,o/2,n/2,-n/2,-1e3,5e3);return t.up.set(0,0,1),t.position.set(0,0,100),t.lookAt(0,0,0),t}function rt(){let o=new d.Group,n=new d.HemisphereLight(16777215,15658734,1);n.intensity=1,n.position.set(0,0,10),n.up.set(0,0,1),o.add(n);let t=new d.AmbientLight(16777215);return o.add(t),o}function st(o,n){let t=new Et.MapControls(o,n);return t.enableDamping=!1,t.maxPolarAngle=0,t.minPolarAngle=0,t.maxAzimuthAngle=0,t.minAzimuthAngle=0,t}function at(o){let n=new d.Shape;if(Array.isArray(o[0])){n.moveTo(...o[0]);for(let t=1;t<o.length;t++)n.lineTo(...o[t])}return n}function ct(o=16777215,n=1){let t=new d.DirectionalLight(o,n);return t.castShadow=!0,t.shadow.radius=8,t.shadow.mapSize.set(64,64),t.shadow.camera.left=-200,t.shadow.camera.right=200,t.shadow.camera.top=200,t.shadow.camera.bottom=-200,t}function w(o,n){var t;if(n&&o.children&&o.children.length&&o.children.forEach(e=>{w(e,n)}),o.isMesh){let e=o;e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(i=>{i.dispose()}):e.material.dispose())}o.isLight&&((t=o.dispose)==null||t.call(o))}function ht(o){return/[\u4E00-\u9FA5]+/g.test(o)}var G=require("three");var q=new Map;function Pt(){let o=document.createElement("canvas");o.width=1024,o.height=64;let n=o.getContext("2d",{willReadFrequently:!0});return n.font="54px sans-serif",n.textBaseline="hanging",n.lineWidth=12,n.fillStyle="rgba(0,0,0,1)",n.strokeStyle="white",{canvas:o,ctx:n}}var lt,D;function Ct(){if(!lt){let{canvas:o,ctx:n}=Pt();lt=o,D=n}}function Xt(o){if(q.has(o))return q.get(o);Ct(),D.clearRect(0,0,1024,64);let n=ht(o)?4:8;D.strokeText(o,2,n),D.fillText(o,2,n);let t=Math.ceil(D.measureText(o).width);t=t%2===0?t:t+1,t+=2;let e=D.getImageData(0,0,t,64),i=new G.DataTexture(Uint8Array.from(e.data),t,64,G.RGBAFormat);return i.flipY=!0,i.minFilter=G.LinearFilter,i.magFilter=G.LinearFilter,q.set(o,i),i}function pt(){q.clear()}function mt(){D=null,lt=null}var A=require("@turf/turf");function x(o,n,t,e){let i=o.clone().project(n),r=t/2,a=e/2,c=Math.round(i.x*r+r),l=Math.round(-i.y*a+a);return{x:c,y:l}}function dt(o){let n=(0,A.featureCollection)(o.map(e=>(0,A.point)(e)));return(0,A.center)(n).geometry.coordinates}function B(o,n){return new Proxy(o,{get:(t,e,i)=>Reflect.get(t,e,i),set:(t,e,i,r)=>{let a=Reflect.set(t,e,i,r);return n.dispatchEvent({type:`change-${e}`,value:i}),a}})}function I(o,n){return Promise.race([o,new Promise((t,e)=>{setTimeout(()=>e(new Error("Promise timeout")),n)})])}function Z(o){return document.createElementNS("http://www.w3.org/2000/svg",o)}function ut(o,n){let t=Z("svg");return t.setAttribute("width",o),t.setAttribute("height",n),t.style.cssText="position: absolute; left: 0; top: 0; pointer-events: none;",t}function O(o="2",n){let t=Z("circle");return t.setAttribute("r",o),t.setAttribute("fill",n),t}function j(o){let n=Z("line");return n.setAttribute("stroke",o),n}function C(o,n,t){o.setAttribute("cx",`${n}`),o.setAttribute("cy",`${t}`)}function y(o,n,t){n&&(o.setAttribute("x1",`${n.x}`),o.setAttribute("y1",`${n.y}`)),t&&(o.setAttribute("x2",`${t.x}`),o.setAttribute("y2",`${t.y}`))}var p=require("three"),T=require("@tweenjs/tween.js");var Q=class extends p.EventDispatcher{constructor(t,e){super();this.container=t;this.config=e;s(this,"scene",it());s(this,"renderer",nt());s(this,"camera");s(this,"control");s(this,"lights",rt());s(this,"timer",new V);s(this,"tweenGroup",new T.Group);s(this,"currentFloor");s(this,"basicRatio");s(this,"onWindowResize",()=>{let{container:t,camera:e,renderer:i}=this,{clientWidth:r,clientHeight:a}=t;e.left=-r/2,e.right=r/2,e.top=a/2,e.bottom=-a/2,e.updateProjectionMatrix(),i.setSize(window.innerWidth,window.innerHeight)});s(this,"onClick",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY);e.length&&this.dispatchEvent({type:"graphic-click",graphics:e,position:i});let r=this.getPoisByDeviceXy(t.clientX,t.clientY);r.length&&this.dispatchEvent({type:"poi-click",pois:r})});s(this,"onPointerover",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),r=this.getPoisByDeviceXy(t.clientX,t.clientY);this.dispatchEvent({type:"pointer-over",graphics:e,pois:r,position:i})});s(this,"onPointermove",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),r=this.getPoisByDeviceXy(t.clientX,t.clientY);this.dispatchEvent({type:"pointer-move",graphics:e,pois:r,position:i})});s(this,"onPointerleave",()=>{this.dispatchEvent({type:"pointer-level"})});this.container.style.position="relative",this.container.style.overflow="hidden",this.init(),this.registryEvent()}init(){let{clientWidth:t,clientHeight:e}=this.container;this.camera=ot(t,e),this.renderer.setSize(t,e),this.control=st(this.camera,this.renderer.domElement),this.container.appendChild(this.renderer.domElement),this.scene.add(this.lights),this.basicRatio=this.getRatio(),this.control.addEventListener("change",()=>{var r;let i=this.control.getPolarAngle();(r=this.currentFloor)==null||r.setShadowOpacity(i/this.config.control.maxPolar),this.dispatchEvent({type:"change-ratio",px:(this.basicRatio||0)*this.camera.zoom})})}getRatio(t=new p.Vector3(0,0,0),e=new p.Vector3(100,0,0)){let{clientWidth:i,clientHeight:r}=this.container,a=x(t,this.camera,i,r),c=x(e,this.camera,i,r);return Math.ceil(Math.sqrt(P(c.x-a.x,2)+P(c.y-a.y,2)))}changeAmbientLightColor(t){this.lights.children.forEach(e=>{e instanceof p.AmbientLight&&(e.color=new p.Color(t))})}switchFloor(t){var i;this.currentFloor&&(this.scene.remove(t),t.dispose()),this.currentFloor=t,this.scene.add(t);let e=(i=t.ground)==null?void 0:i.getCenter();e&&(this.lights.position.x=e.x,this.lights.position.y=e.y)}getGraphicsByDeviceXy(t,e){var c;let i=new p.Vector2;i.x=t/this.container.clientWidth*2-1,i.y=e/this.container.clientHeight*-2+1;let r=new p.Raycaster;return r.setFromCamera(i,this.camera),((c=this.currentFloor)==null?void 0:c.graphicLayer.getGraphicByRaycaster(r))||{graphics:[],position:null}}getPoisByDeviceXy(t,e){var r;return((r=this.currentFloor)==null?void 0:r.poiLayer.getPoiByDeviceXy(t,e))||[]}registryEvent(){window.addEventListener("resize",this.onWindowResize),this.container.addEventListener("click",this.onClick),this.container.addEventListener("pointerover",this.onPointerover),this.container.addEventListener("pointermove",this.onPointermove),this.container.addEventListener("pointerleave",this.onPointerleave)}unRegistryEvent(){window.removeEventListener("resize",this.onWindowResize),this.container.removeEventListener("click",this.onClick),this.container.removeEventListener("pointerover",this.onPointerover),this.container.removeEventListener("pointermove",this.onPointermove),this.container.removeEventListener("pointerleave",this.onPointerleave)}setPolarAngle(t,e=500){return I(new Promise(i=>{let r={polar:this.control.getPolarAngle()},a={polar:t},c=new T.Tween(r,this.tweenGroup).to(a,e).onUpdate(()=>{this.control.maxPolarAngle=r.polar,this.control.minPolarAngle=r.polar,this.control.update()}).onComplete(()=>{this.control.enabled=!0,this.tweenGroup.remove(c),i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}getCameraLookAt(){return new p.Vector3().subVectors(this.control.target,this.camera.position)}setZoom(t,e,i=500){return I(new Promise(r=>{let a={zoom:this.camera.zoom,target:this.control.target.clone()},c=this.getCameraLookAt(),l=new T.Tween(a,this.tweenGroup).to({zoom:t,target:e},i).onUpdate(()=>{this.camera.position.copy(a.target.clone().sub(c)),this.control.target.copy(a.target),this.camera.zoom=a.zoom,this.control.update()}).onComplete(()=>{this.tweenGroup.remove(l),this.control.enabled=!0,r(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),i+500)}fitCameraToObject(t,e=[20,20,20,20],i=500){let[r,a,c,l]=e,{clientWidth:h,clientHeight:u}=this.container,b=new p.Box3().setFromObject(t),{max:v,min:E}=b,H=x(v,this.camera,h,u),vt=x(E,this.camera,h,u),xt=new p.Box2().setFromPoints([new p.Vector2(H.x,H.y),new p.Vector2(vt.x,vt.y)]).getSize(new p.Vector2),Ft=(h-a-l)/xt.x,Rt=(u-r-c)/xt.y,Ht=Math.min(Ft,Rt),zt=new p.Vector3((v.x+E.x)/2,(v.y+E.y)/2,v.z);return this.setZoom(Ht*this.camera.zoom,zt,i)}fitCameraToGround(t=[20,20,20,20],e=500){var r;let i=(r=this.currentFloor)==null?void 0:r.ground;return i?this.fitCameraToObject(i,t,e):Promise.resolve(!1)}setCameraPosition(t,e){return I(new Promise(i=>{let r=this.camera.position.clone(),a=this.getCameraLookAt(),c=new T.Tween(r,this.tweenGroup).to(t,e).onUpdate(()=>{this.camera.position.copy(r),this.control.target.copy(t.clone().add(a))}).onComplete(()=>{this.tweenGroup.remove(c),this.control.update(),this.control.enabled=!0,i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}render(){this.renderer.render(this.scene,this.camera),this.dispatchEvent({type:"update"}),this.timer.requestAnimationFrame(()=>{this.render()}),this.tweenGroup.update()}dispose(){this.tweenGroup.getAll().forEach(t=>t.stop()),this.tweenGroup.removeAll(),this.unRegistryEvent(),this.container.removeChild(this.renderer.domElement),this.timer.dispose(),this.renderer.dispose(),this.lights.children.forEach(t=>t.dispose()),w(this.scene)}};var Lt=require("lodash"),Mt={apiDomain:"",apiInfo:{},heatMap:{radius:50,gradient:{0:"#8F9FCD",.5:"#6284FF",1:"#F95D5D"}},useFloorCache:!0,control:{maxPolar:1.2},svg:{circle:{radius:"2",fill:"#EFF4FB"},line:{stroke:"#EFF4FB"}}};function gt(o){return(0,Lt.merge)({},Mt,o)}var m=require("three");var Dt=require("lodash");var Ut={id:"",height:.1,airHeight:0,area:0,group:"",fillColor:"#EFF4FB",strokeColor:"#ffffff",fillOpacity:1,strokeOpacity:1,doors:[],locked:!1,visible:!0,geometry:{type:"polygon",cds:[],curveCpt:[],curveIndex:[]},layerType:"",zIndex:0},L=class extends m.Object3D{constructor(t,e){super();this.context=t;s(this,"geometry");s(this,"material");s(this,"mesh");s(this,"line");s(this,"options");this.options=B((0,Dt.merge)({},Ut,e),this),this.init(),this.visible=this.options.visible,this.addEventListener("change-fillColor",({value:i})=>{this.material.color=new m.Color(i)}),this.addEventListener("change-fillOpacity",({value:i})=>{this.material.opacity=i}),this.addEventListener("change-height",({value:i})=>{this.dispose(),this.init()}),this.addEventListener("change-strokeColor",({value:i})=>{this.line.material.color=new m.Color(i)}),this.addEventListener("change-strokeOpacity",({value:i})=>{this.line.material.opacity=i}),this.addEventListener("change-airHeight",({value:i})=>{this.position.z=i}),this.addEventListener("change-visible",({value:i})=>{this.visible=i})}getCenter(){let t=new m.Vector3,e=new m.Box3;return e.setFromObject(this),e.getCenter(t),t}init(){this.geometry=this.initGeometry(),this.material=this.initMaterial(),this.mesh=this.initMesh(),this.mesh.position.z=this.options.airHeight,this.mesh.castShadow=!0,this.add(this.mesh),this.line=this.createBorder(),this.add(this.line)}initGeometry(){let t=at(this.options.geometry.cds[0]);return new m.ExtrudeGeometry(t,{steps:1,bevelEnabled:!1,depth:this.options.height,curveSegments:4})}initMaterial(){return new m.MeshStandardMaterial({color:this.options.fillColor,roughness:1,transparent:!0,opacity:this.options.fillOpacity,depthWrite:!0})}initLineMaterial(){return new m.LineBasicMaterial({color:this.options.strokeColor,opacity:this.options.strokeOpacity,transparent:!0,depthWrite:!0})}initMesh(){return new m.Mesh(this.geometry,this.material)}createBorder(){let t=this.initLineMaterial(),e=new m.EdgesGeometry(this.geometry);return new m.LineSegments(e,t)}raycast(t){if(!this.visible)return!1;let e=t.intersectObject(this.mesh);return e[0]?e[0].point:!1}dispose(){w(this),this.clear()}};var g=require("three");var $=class extends g.Object3D{constructor(){super();s(this,"directionalLight");s(this,"plane");s(this,"basicOpacity",.39);this.directionalLight=this.initLight(),this.plane=this.initPlane()}initLight(){let t=ct(16777215,.23);t.position.set(0,0,100);let e=new g.DirectionalLightHelper(t,100),i=new g.BoxGeometry(10,10,10),r=new g.MeshBasicMaterial({color:16773120}),a=new g.Mesh(i,r);return a.position.set(0,0,100),this.add(t),this.add(e),this.add(a),t}changeLightColor(t){this.directionalLight.color=new g.Color(t)}initPlane(){let t=new g.PlaneGeometry(2e3,2e3),e=new g.ShadowMaterial({transparent:!0,opacity:0,color:16773120}),i=new g.Mesh(t,e);return i.receiveShadow=!0,i.position.z=-1,this.add(i),i}setTarget(t){this.directionalLight.target=t}transformOpacity(t){return t*this.basicOpacity}setOpacity(t){this.plane.material.opacity=1}dispose(){w(this,!0)}};var Gt=require("three"),At=require("lodash");var N=require("three");var K=class extends N.EventDispatcher{constructor(t){super();this.context=t;s(this,"div");s(this,"element");s(this,"position",new N.Vector3);s(this,"onUpdate",()=>{let t=this.getPosition(),{clientWidth:e,clientHeight:i}=this.context.container,{x:r,y:a}=x(t,this.context.camera,e,i);this.div.style.left=`${r}px`,this.div.style.top=`${a}px`});this.registryEvent(),this.div=this.initDiv(),this.context.container.appendChild(this.div)}initDiv(){let t=document.createElement("div");return t.style.position="absolute",t}bindElement(t){this.element=t}unBindElement(){this.element=void 0}setVisible(t,e="block"){this.div.style.display=t?e:"none"}getPosition(){return this.element?this.element.position.clone().setFromMatrixPosition(this.element.matrixWorld):this.position}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){this.unRegistryEvent(),this.unBindElement(),this.context.container.removeChild(this.div),this.div=null}};var Wt={text:"",level:1,collision_enable:!0},S=class extends Gt.Object3D{constructor(t,e){super();this.context=t;s(this,"span");s(this,"img");s(this,"overlay");s(this,"options");s(this,"_changePosition",()=>{this.overlay.div.style.transform=`translate3d(-50%, ${this.options.icon?"-100%":"-50%"}, 0)`});this.options=B((0,At.merge)({},Wt,e),this),this.overlay=new K(this.context),this.overlay.bindElement(this),this._changePosition(),this.registryEvent(),this.initDiv(),this.addEventListener("change-icon",({value:i})=>{i?this.img?this.img.setAttribute("src",i):this.overlay.div.appendChild(this.initIcon()):(this.img&&this.overlay.div.removeChild(this.img),this.img=void 0)}),this.addEventListener("change-text",({value:i})=>{this.span.textContent=i})}initDiv(){let t=this.overlay.div;return t.appendChild(this.initText()),this.options.icon&&t.appendChild(this.initIcon()),t.style.fontSize="12px",t.style.display="flex",t.style.flexDirection="column",t.style.justifyContent="center",t.style.alignItems="center",t.style.pointerEvents="none",t}initText(){let t=document.createElement("span");return t.style.whiteSpace="nowrap",t.textContent=this.options.text,this.span=t,t}initIcon(){var e,i;let t=document.createElement("img");return t.setAttribute("src",this.options.icon),t.style.width=`${((e=this.options.icon_size)==null?void 0:e[0])||32}px`,t.style.height=`${((i=this.options.icon_size)==null?void 0:i[1])||32}px`,this.img=t,t}registryEvent(){this.context.addEventListener("update",this._changePosition)}unRegistryEvent(){this.context.removeEventListener("update",this._changePosition)}setVisible(t){this.overlay.setVisible(t,"flex")}getBox(){return this.overlay.div.getBoundingClientRect()}isContain(t,e){let i=this.getBox();return t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom}dispose(){this.unRegistryEvent(),this.overlay.dispose(),this.span=null,this.img=void 0}};var St=require("three");var Ot=require("three");var k=class extends Ot.Object3D{constructor(t){super();this.context=t}dispose(){w(this),this.clear()}};var J=class extends k{constructor(n){super(n)}createGraphic(n){let t=new L(this.context,n);return this.add(t),t}getGraphicByRaycaster(n){let t=null;return{graphics:this.children.filter(i=>{if(i instanceof L){let r=i.raycast(n);return r&&(t?r.z>t.z&&(t=r):t=r),!!r}}),position:t}}};var tt=class extends k{constructor(t){super(t);s(this,"pois",[]);s(this,"onUpdate",()=>{this.collisionDetection()});this.registryEvent()}createPoi(t){let e=new S(this.context,t);return this.add(e),this.pushPoi(e),e.addEventListener("change-level",()=>this.changePoiLevelOrCollisionEnable(e)),e.addEventListener("change-collision_enable",()=>this.changePoiLevelOrCollisionEnable(e)),e}changePoiLevelOrCollisionEnable(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),this.pushPoi(t))}removePoi(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),this.remove(t),t.dispose())}pushPoi(t){if(!t.options.collision_enable){this.pois.unshift(t);return}if(t.options.level===1){this.pois.push(t);return}for(let e=0;e<this.pois.length;e++){let i=this.pois[e];if(i.options.collision_enable&&i.options.level<=t.options.level){this.pois.splice(e,0,t);return}}this.pois.push(t)}getPoiByDeviceXy(t,e){return this.children.filter(r=>r instanceof S&&r.isContain(t,e))}collisionDetection(){let t=[];this.pois.forEach((e,i)=>{e.setVisible(!0);let{left:r,right:a,top:c,bottom:l}=e.getBox();if(i===0){t.push({left:r,right:a,top:c,bottom:l});return}let h=t.some(u=>{let b=a<u.left||r>u.right,v=c>u.bottom||l<u.top;return b||v});e.setVisible(h)})}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){super.dispose(),this.unRegistryEvent(),this.pois.forEach(t=>t.dispose()),this.pois.length=0}};var f=require("three"),Tt=require("@mars3d/heatmap.js"),M=require("@turf/turf");var X=class extends f.Object3D{constructor(t){super();this.context=t;s(this,"heatmap");s(this,"div");s(this,"plane");this.div=document.createElement("div")}clearHeatmap(){this.div.firstChild&&this.div.removeChild(this.div.firstChild),this.heatmap=void 0}loadData(t){this.clearHeatmap();let{width:e,height:i,leftTop:r,center:a}=this.getBox(t);this.heatmap=(0,Tt.create)(wt({width:e,height:i,container:this.div},this.context.config.heatMap)),this.heatmap.setData(this.transformData(t,r)),this.initPlane(e,i),this.position.set(a[0],a[1],this.position.z)}initPlane(t,e){this.plane&&this.remove(this.plane);let i=new f.PlaneGeometry(t,e),r=new f.Texture(this.div.firstChild);r.needsUpdate=!0;let a=new f.MeshBasicMaterial({transparent:!0,side:f.DoubleSide,map:r});a.needsUpdate=!0,this.plane=new f.Mesh(i,a),this.add(this.plane)}getTransMatrix({x:t,y:e}){return new f.Matrix3().makeScale(1,-1).multiply(new f.Matrix3().makeTranslation(0-t,0-e))}transformData(t,e){let i=this.getTransMatrix(e);return{data:t.data.map(a=>{let c=new f.Vector2(a.x,a.y).applyMatrix3(i);return{x:c.x,y:c.y,value:a.value}}),max:t.max,min:t.min}}getBox(t){let e=(0,M.featureCollection)(t.data.map(h=>(0,M.point)([h.x,h.y]))),i=(0,M.bbox)(e),r=i[2]-i[0],a=i[3]-i[1],c={x:i[0],y:i[3]},l=(0,M.center)(e);return{width:r,height:a,leftTop:c,center:l.geometry.coordinates}}dispose(){this.div=null,this.heatmap=void 0}};var U=class extends St.Object3D{constructor(t){super();this.context=t;s(this,"graphicLayer");s(this,"poiLayer");s(this,"ground");s(this,"shadow",new $);s(this,"heatmap");this.graphicLayer=new J(this.context),this.poiLayer=new tt(this.context),this.add(this.graphicLayer),this.add(this.poiLayer),this.add(this.shadow)}addGround(t){this.ground=t,this.add(t);let e=t.getCenter();this.shadow.position.x=e.x,this.shadow.position.y=e.y,this.shadow.setTarget(t)}addGraphic(t){return this.graphicLayer.createGraphic(t)}addPoi(t){return this.poiLayer.createPoi(t)}addHeatmap(t){var e,i;return this.heatmap||(this.heatmap=new X(this.context),this.add(this.heatmap)),this.heatmap.loadData(t),this.ground&&this.heatmap.position.setZ(((e=this.ground)==null?void 0:e.options.airHeight)+((i=this.ground)==null?void 0:i.options.height)),this.heatmap}removeHeatMap(){this.heatmap&&(this.remove(this.heatmap),this.heatmap.dispose(),this.heatmap=void 0)}setShadowOpacity(t){this.shadow.setOpacity(t)}setShadowVisible(t){this.shadow.visible=t}dispose(){var t,e;this.shadow.dispose(),this.graphicLayer.dispose(),this.poiLayer.dispose(),(t=this.ground)==null||t.dispose(),(e=this.heatmap)==null||e.dispose(),this.clear()}};var R=require("three");var F=class extends R.EventDispatcher{constructor(t){super();this.context=t;s(this,"points",[]);s(this,"svg");s(this,"enable",!0);this.svg=ut(`${t.container.clientWidth}`,`${t.container.clientHeight}`),t.container.appendChild(this.svg)}setEnable(t){this.enable=t,t?this.svg.style.display="block":this.svg.style.display="none"}getIntersectByPointerEvent(t){var l;if(!((l=this.context.currentFloor)!=null&&l.ground))return;let{offsetX:e,offsetY:i}=t,r=new R.Vector2;r.x=e/this.context.container.clientWidth*2-1,r.y=i/this.context.container.clientHeight*-2+1;let a=new R.Raycaster;return a.setFromCamera(r,this.context.camera),a.intersectObjects(this.context.currentFloor.ground.children,!0)[0]}getSvgCoordinate(t){let{camera:e,container:i}=this.context;return x(t,e,i.clientWidth,i.clientHeight)}dispose(){this.context.container.removeChild(this.svg),this.svg=null}};var W=class extends F{constructor(t){super(t);this.context=t;s(this,"circles");s(this,"line");s(this,"onUpdate",()=>{if(this.points[0]){let t=this.getSvgCoordinate(this.points[0]);C(this.circles[0],t.x,t.y),y(this.line,t)}if(this.points[1]){let t=this.getSvgCoordinate(this.points[1]);C(this.circles[1],t.x,t.y),y(this.line,void 0,t)}});s(this,"onPointermove",t=>{this.points.length===1&&(this.line.style.display="block",y(this.line,void 0,{x:t.offsetX,y:t.offsetY}))});s(this,"onPointerleave",()=>{this.points[1]||(this.line.style.display="none")});s(this,"onPointerdown",t=>{if(this.points[1])return;let e=this.getIntersectByPointerEvent(t);if(e!=null&&e.point){let{offsetX:i,offsetY:r}=t,a=this.circles[this.points.length];C(a,i,r),this.points.length||y(this.line,{x:i,y:r},{x:i,y:r}),this.addPoint(e.point)}});let{config:{svg:{circle:e,line:i}}}=t;this.circles=[O(e.radius,e.fill),O(e.radius,e.fill)],this.line=j(i.stroke),this.svg.appendChild(this.circles[0]),this.svg.appendChild(this.circles[1]),this.svg.appendChild(this.line),this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}addPoint(t){if(this.points.push(t),this.points.length>=2){let e=this.calculatedDistance();this.dispatchEvent({type:"distance",distance:e})}}calculatedDistance(){let[{x:t,y:e},{x:i,y:r}]=this.points;return Math.sqrt(P(i-t,2)+P(r-e,2))}dispose(){super.dispose(),this.unRegistryEvent(),this.line=null,this.circles=[]}};var _=class extends F{constructor(t){super(t);s(this,"circles",[]);s(this,"lines",[]);s(this,"isClose",!1);s(this,"onUpdate",()=>{this.points.length&&this.points.forEach((t,e)=>{let i=this.getSvgCoordinate(t);this.circles[e]&&C(this.circles[e],i.x,i.y),e!==0&&y(this.lines[e-1],void 0,i),this.lines[e]&&y(this.lines[e],i)})});s(this,"onPointermove",t=>{!this.lastLine||this.isClose||(this.lastLine.style.display="block",y(this.lastLine,void 0,{x:t.offsetX,y:t.offsetY}))});s(this,"onPointerleave",()=>{this.isClose||(this.lastLine.style.display="none")});s(this,"onPointerdown",t=>{if(this.isClose)return;let e=this.getIntersectByPointerEvent(t);if(e!=null&&e.point){let{offsetX:i,offsetY:r}=t;this.checkAdsorb(i,r)?(this.isClose=!0,this.addPoint(this.points[0])):this.addPoint(e.point);let{circle:{fill:a,radius:c},line:{stroke:l}}=this.context.config.svg;if(!this.isClose){let h=O(c,a);C(h,i,r),this.addCircle(h)}if(this.lines.length&&y(this.lastLine,void 0,{x:i,y:r}),!this.isClose){let h=j(l);y(h,{x:i,y:r},{x:i,y:r}),this.addLine(h)}}});this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}get lastLine(){return this.lines.slice(-1)[0]}addCircle(t){this.circles.push(t),this.svg.appendChild(t)}addLine(t){this.lines.push(t),this.svg.appendChild(t)}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}checkAdsorb(t,e){if(this.points.length<3)return!1;let i=this.circles[0],r=+i.getAttribute("cx"),a=+i.getAttribute("cy");return Math.sqrt(P(t-r,2)+P(e-a,2))<=5}addPoint(t){if(this.points.push(t),this.isClose){let e=this.calculatedArea();this.dispatchEvent({type:"area",area:e})}}calculatedArea(){let t=this.points.map(r=>[r.x,r.y]),e=0,i=t.length;for(let r=0;r<i;r++){let a=(r+1)%i;e+=t[r][0]*t[a][1]-t[a][0]*t[r][1]}return Math.abs(e/2)}dispose(){super.dispose(),this.unRegistryEvent(),this.lines=[],this.circles=[]}};var ft=class extends kt.EventDispatcher{constructor(t,e={}){super();this.container=t;s(this,"config");s(this,"context");s(this,"polarKeys",[]);s(this,"azimuthalKeys",[]);s(this,"svgLine");s(this,"svgPolygon");s(this,"floorDataMap",new Map);s(this,"onKeydown",t=>{this.polarKeys.includes(t.code)&&(this.context.control.maxPolarAngle=1.2,this.context.control.minPolarAngle=0),this.azimuthalKeys.includes(t.code)&&(this.context.control.maxAzimuthAngle=1/0,this.context.control.minAzimuthAngle=1/0)});s(this,"onKeyUp",t=>{if(this.polarKeys.includes(t.code)){let e=this.context.control.getPolarAngle();this.context.control.maxPolarAngle=e,this.context.control.minPolarAngle=e}if(this.azimuthalKeys.includes(t.code)){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e,this.context.control.minAzimuthAngle=e}});this.config=gt(e),this.context=new Q(t,this.config),this.registryEvent(),this.context.render()}loadGraphics(l){return z(this,arguments,function*({brand:t,project:e,phase:i,building:r,floor:a,ts:c}){let{apiDomain:h}=this.config,u=`${h}/api/floor/get?brand=${t}&project=${e}&phase=${i}&building=${r}&floor=${a}&ts=${c}&resource_type_list=`;return yield fetch(u).then(v=>v.json()).then(v=>v.data).then(v=>(v.map(E=>E.info=JSON.parse(E.info)),v))})}loadBuildingGround(a){return z(this,arguments,function*({brand:t,project:e,phase:i,building:r}){let{apiDomain:c}=this.config,l=`${c}/api/range/get?brand=${t}&project=${e}&phase=${i}&building=${r}`;return(yield fetch(l).then(u=>u.json()).then(u=>u.data).then(u=>(u.map(b=>b.info=JSON.parse(b.info)),u)))[0]})}load(l){return z(this,arguments,function*({brand:t,project:e,phase:i,building:r,floor:a,ts:c}){if(this.floorDataMap.get(a))return;let[h,u]=yield Promise.all([this.loadGraphics({brand:t,project:e,phase:i,building:r,floor:a,ts:c}),this.loadBuildingGround({brand:t,project:e,phase:i,building:r})]),b=dt(u.info.geometry.cds[0]);return h.forEach(v=>{v.info.geometry.cds.map(E=>{Array.isArray(E)&&E.forEach(H=>{H[0]-=b[0],H[1]-=b[1]})})}),this.config.useFloorCache||this.floorDataMap.clear(),this.floorDataMap.set(a,h),h})}createFloor(t){let e=new U(this.context),i=t.findIndex(h=>h.info.group==="floor");i===-1&&(i=0);let r=t[i];[...t].splice(i,1);let c=new L(this.context,r.info);return e.addGround(c),{curFloor:e,ground:c,graphics:[]}}switchFloor(t){let e=this.floorDataMap.get(t);if(e){let{curFloor:i}=this.createFloor(e);this.context.switchFloor(i),this.context.fitCameraToGround(void 0,0)}else console.warn("[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42")}addHeatmap(t){var e;return(e=this.context.currentFloor)==null?void 0:e.addHeatmap(t)}removeHeatMap(){var t;(t=this.context.currentFloor)==null||t.removeHeatMap()}translateElementToCenter(t,e=500){let i=t.position.clone().setFromMatrixPosition(t.matrixWorld);return this.context.setCameraPosition(i,e)}getElementDeviceCoordinate(t){let e=t.position.clone(),{clientWidth:i,clientHeight:r}=this.container;return x(e,this.context.camera,i,r)}changeMapType(t,e=500){t==="2d"?this.context.setPolarAngle(0):this.context.setPolarAngle(1.2)}reduceMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i-t,this.context.control.target,e)}enlargeMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i+t,this.context.control.target,e)}registryEvent(){window.addEventListener("keydown",this.onKeydown),window.addEventListener("keyup",this.onKeyUp)}unRegistryEvent(){window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("keyup",this.onKeyUp)}configurePolarShortcutKeys(t){this.polarKeys=t}configureAzimuthalShortcutKeys(t){this.azimuthalKeys=t}rotateMap(t=.1){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e+t,this.context.control.minAzimuthAngle=e+t,this.context.control.update()}measureDistance(){return z(this,null,function*(){return this.cancelDistance(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgLine=new W(this.context);let i=this.svgLine.dispose.bind(this.svgLine);this.svgLine.dispose=function(){i(),e("cancel")},this.svgLine.addEventListener("distance",({distance:r})=>{t(r)})})})}cancelDistance(){this.svgLine&&(this.svgLine.dispose(),this.svgLine=void 0,this.context.control.enableRotate=!0)}measureArea(){return this.cancelArea(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgPolygon=new _(this.context);let i=this.svgPolygon.dispose.bind(this.svgPolygon);this.svgPolygon.dispose=function(){i(),e("cancel")},this.svgPolygon.addEventListener("area",({area:r})=>{t(r)})})}cancelArea(){this.svgPolygon&&(this.svgPolygon.dispose(),this.svgPolygon=void 0,this.context.control.enableRotate=!0)}dispose(){this.context.dispose(),pt(),mt(),this.unRegistryEvent()}};
2
+ //# sourceMappingURL=bmap.cjs.min.js.map