@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/lib/bmap.esm.js CHANGED
@@ -492,11 +492,16 @@ var Events = class {
492
492
  };
493
493
 
494
494
  // src/utils/event-name.ts
495
- var EventName = /* @__PURE__ */ ((EventName2) => {
496
- EventName2["SWITCH_FLOOR_BEFORE"] = "switch_floor_before";
497
- EventName2["SWITCH_FLOOR_AFTER"] = "switch_floor_after";
498
- return EventName2;
499
- })(EventName || {});
495
+ var HooksName = /* @__PURE__ */ ((HooksName2) => {
496
+ HooksName2["SWITCH_FLOOR_BEFORE"] = "switch_floor_before";
497
+ HooksName2["SWITCH_FLOOR_AFTER"] = "switch_floor_after";
498
+ return HooksName2;
499
+ })(HooksName || {});
500
+
501
+ // src/utils/obj-utils.ts
502
+ function generatorKeyByObj(obj) {
503
+ return Object.keys(obj).sort().map((key) => `${key}=${obj[key]}`).join("&");
504
+ }
500
505
 
501
506
  // src/context.ts
502
507
  import {
@@ -1286,10 +1291,14 @@ var Poi = class extends EventDispatcher2 {
1286
1291
  position = new Vector35();
1287
1292
  userData = {};
1288
1293
  showTextStatus = true;
1294
+ disposed = false;
1289
1295
  get withinDisplayRange() {
1290
1296
  return this.overlay.withinDisplayRange;
1291
1297
  }
1292
1298
  async resetSize() {
1299
+ if (this.disposed) {
1300
+ return;
1301
+ }
1293
1302
  await sleepOnePromise();
1294
1303
  if (this.options.box_only_icon) {
1295
1304
  if (!this.img) {
@@ -1467,6 +1476,7 @@ var Poi = class extends EventDispatcher2 {
1467
1476
  this.textDiv = null;
1468
1477
  this.img = void 0;
1469
1478
  this.overlay.dispose();
1479
+ this.disposed = true;
1470
1480
  }
1471
1481
  };
1472
1482
 
@@ -1843,6 +1853,7 @@ var Floor = class extends Object3D8 {
1843
1853
  models = new Object3D8();
1844
1854
  modelMap = /* @__PURE__ */ new Map();
1845
1855
  groundMaxHeight = 0;
1856
+ name = "";
1846
1857
  getPosition() {
1847
1858
  const box = new Box35().setFromObject(this.groundUpper);
1848
1859
  return box.getCenter(new Vector38());
@@ -3443,7 +3454,6 @@ var Equipment = class extends Plugin {
3443
3454
  return graphic.userData.data.info.userData.equipment;
3444
3455
  }
3445
3456
  changeGraphicToEquipment(graphics) {
3446
- console.log(graphics);
3447
3457
  graphics.filter((graphic) => {
3448
3458
  const equipment = this.getGraphicEquipment(graphic);
3449
3459
  return equipment && this.equipmentMap.has(equipment);
@@ -3463,47 +3473,42 @@ var Equipment = class extends Plugin {
3463
3473
  }
3464
3474
  };
3465
3475
 
3466
- // src/plugins/navigation/path.worker.ts
3467
- var workerCode = `
3468
- self.onmessage = (e) => {
3469
- console.log(e.data)
3470
- loadRoad("");
3471
- getPath("", "")
3472
- }
3473
-
3474
- function loadRoad(project) {
3475
- // \u8BF7\u6C42\u5168\u90E8\u697C\u5C42\u7684\u8DEF\u7F51
3476
- console.log(project)
3477
- self.postMessage("project")
3476
+ // src/api/floor.ts
3477
+ async function loadBuildingGround({ brand, project }, config) {
3478
+ const {
3479
+ apiDomain,
3480
+ apiPath: { floorRange },
3481
+ apiInfo
3482
+ } = config;
3483
+ const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${project}&building=${project}`;
3484
+ const data = await fetch(url, apiInfo).then((res) => res.json()).then((res) => res.data).then((res) => {
3485
+ const data2 = (res || [])[0];
3486
+ if (data2) {
3487
+ data2.info = JSON.parse(data2.info);
3488
+ }
3489
+ return data2;
3490
+ });
3491
+ return data;
3478
3492
  }
3479
-
3480
- function getPath(start, end) {
3481
- // \u89C4\u5212\u8DEF\u7EBF
3482
- console.log(start, end)
3483
- self.postMessage("getPath")
3493
+ async function loadGraphics({
3494
+ brand,
3495
+ project,
3496
+ floor,
3497
+ ts,
3498
+ resource_type_list
3499
+ }, config) {
3500
+ const {
3501
+ apiDomain,
3502
+ apiPath: { floorGraphic },
3503
+ apiInfo
3504
+ } = config;
3505
+ const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${project}&building=${project}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`;
3506
+ const data = await fetch(url, apiInfo).then((res) => res.json()).then((res) => res.data).then((res) => {
3507
+ (res || []).map((item) => item.info = JSON.parse(item.info));
3508
+ return res || [];
3509
+ });
3510
+ return data;
3484
3511
  }
3485
- `;
3486
- var path_worker_default = workerCode;
3487
-
3488
- // src/plugins/navigation/navigation.ts
3489
- var Navigation = class extends Plugin {
3490
- worker_url = window.URL.createObjectURL(new Blob([path_worker_default], { type: "text/javascript" }));
3491
- worker = new Worker(this.worker_url);
3492
- constructor(bmap) {
3493
- super(bmap);
3494
- console.log(this.worker);
3495
- this.worker.postMessage("initial");
3496
- this.worker.onmessage = (e) => {
3497
- console.log("onmessage", e.data);
3498
- };
3499
- }
3500
- fetchRoad() {
3501
- }
3502
- dispose() {
3503
- this.worker.terminate();
3504
- window.URL.revokeObjectURL(this.worker_url);
3505
- }
3506
- };
3507
3512
 
3508
3513
  // src/bmap.ts
3509
3514
  var MapTypePolar = /* @__PURE__ */ ((MapTypePolar2) => {
@@ -3539,107 +3544,66 @@ var BMap = class extends EventDispatcher7 {
3539
3544
  async loadGraphics({
3540
3545
  brand,
3541
3546
  project,
3542
- phase,
3543
- building,
3544
3547
  floor,
3545
3548
  ts,
3546
3549
  resource_type_list
3547
3550
  }) {
3548
- const {
3549
- apiDomain,
3550
- apiPath: { floorGraphic },
3551
- apiInfo
3552
- } = this.config;
3553
- const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${phase}&building=${building}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`;
3554
- const data = await fetch(url, apiInfo).then((res) => res.json()).then((res) => res.data).then((res) => {
3555
- (res || []).map((item) => item.info = JSON.parse(item.info));
3556
- return res || [];
3557
- });
3551
+ const data = await loadGraphics({
3552
+ brand,
3553
+ project,
3554
+ floor,
3555
+ ts,
3556
+ resource_type_list
3557
+ }, this.config);
3558
3558
  return data;
3559
3559
  }
3560
- getBuildingKey({
3561
- brand,
3562
- project,
3563
- phase,
3564
- building
3565
- }) {
3566
- const key = `${brand}-${project}-${phase}-${building}`;
3567
- return key;
3568
- }
3569
3560
  async loadBuildingGround({
3570
3561
  brand,
3571
- project,
3572
- phase,
3573
- building
3562
+ project
3574
3563
  }) {
3575
- const key = this.getBuildingKey({ brand, project, phase, building });
3564
+ const key = generatorKeyByObj({ brand, project });
3576
3565
  if (this.buildingGroundMap.get(key)) {
3577
3566
  return this.buildingGroundMap.get(key) || null;
3578
3567
  }
3579
- const {
3580
- apiDomain,
3581
- apiPath: { floorRange },
3582
- apiInfo
3583
- } = this.config;
3584
- const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${phase}&building=${building}`;
3585
- const data = await fetch(url, apiInfo).then((res) => res.json()).then((res) => res.data).then((res) => {
3586
- const data2 = (res || [])[0];
3587
- if (data2) {
3588
- data2.info = JSON.parse(data2.info);
3589
- }
3590
- return data2;
3591
- });
3568
+ const data = await loadBuildingGround({ brand, project }, this.config);
3592
3569
  this.buildingGroundMap.set(key, data);
3593
3570
  return data;
3594
3571
  }
3595
- getFloorKey({
3596
- brand,
3597
- project,
3598
- phase,
3599
- building,
3600
- floor,
3601
- ts,
3602
- resource_type_list
3603
- }) {
3604
- const floorKey = `${brand}-${project}-${phase}-${building}-${floor}-${ts}-${resource_type_list}`;
3605
- return floorKey;
3606
- }
3607
3572
  async load({
3608
3573
  brand,
3609
3574
  project,
3610
- phase,
3611
- building,
3612
3575
  floor,
3613
3576
  ts,
3614
3577
  resource_type_list
3615
3578
  }) {
3616
- const floorKey = this.getFloorKey({
3617
- brand,
3618
- project,
3619
- phase,
3620
- building,
3621
- floor,
3622
- ts,
3623
- resource_type_list
3624
- });
3625
- if (this.floorDataMap.get(floorKey)) {
3626
- return;
3579
+ const floorKey = generatorKeyByObj({ brand, project, floor, ts, resource_type_list });
3580
+ if (this.floorDataMap.has(floorKey)) {
3581
+ return this.floorDataMap.get(floorKey);
3627
3582
  }
3628
3583
  const [data, buildGround] = await Promise.all([
3629
3584
  this.loadGraphics({
3630
3585
  brand,
3631
3586
  project,
3632
- phase,
3633
- building,
3634
3587
  floor,
3635
3588
  ts,
3636
3589
  resource_type_list
3637
3590
  }),
3638
- this.loadBuildingGround({ brand, project, phase, building })
3591
+ this.loadBuildingGround({ brand, project })
3639
3592
  ]);
3640
3593
  const center2 = buildGround ? getCenter(
3641
3594
  buildGround.info.geometry.cds[0]
3642
3595
  ) : [0, 0];
3596
+ this.transformGraphicData(data, center2);
3597
+ data.forEach((item) => {
3598
+ item.info.transformToBuildingGround = !!buildGround;
3599
+ });
3600
+ if (!this.config.useFloorCache) {
3601
+ this.floorDataMap.clear();
3602
+ }
3603
+ this.floorDataMap.set(floorKey, data);
3604
+ return data;
3605
+ }
3606
+ transformGraphicData(data, center2) {
3643
3607
  data.forEach((item) => {
3644
3608
  item.info.geometry.coords = JSON.parse(
3645
3609
  JSON.stringify(item.info.geometry.cds)
@@ -3657,7 +3621,6 @@ var BMap = class extends EventDispatcher7 {
3657
3621
  const [x, y] = item.info.geometry.cds;
3658
3622
  item.info.geometry.coords = [x - center2[0], y - center2[1]];
3659
3623
  }
3660
- item.info.transformToBuildingGround = !!buildGround;
3661
3624
  });
3662
3625
  const { ground, markGraphic, graphic } = this.config;
3663
3626
  for (let i = 0; i < data.length; i++) {
@@ -3688,11 +3651,6 @@ var BMap = class extends EventDispatcher7 {
3688
3651
  }
3689
3652
  }
3690
3653
  }
3691
- if (!this.config.useFloorCache) {
3692
- this.floorDataMap.clear();
3693
- }
3694
- this.floorDataMap.set(floorKey, data);
3695
- return data;
3696
3654
  }
3697
3655
  loadEquipment() {
3698
3656
  const equipment = new Equipment(this);
@@ -3702,10 +3660,6 @@ var BMap = class extends EventDispatcher7 {
3702
3660
  plugin.bmap = this;
3703
3661
  this.plugins.push(plugin);
3704
3662
  }
3705
- loadNavigation() {
3706
- const navigation = new Navigation(this);
3707
- this.plugins.push(navigation);
3708
- }
3709
3663
  createFloor(data) {
3710
3664
  const curFloor = new Floor(this.context);
3711
3665
  if (!data.length) {
@@ -3726,20 +3680,19 @@ var BMap = class extends EventDispatcher7 {
3726
3680
  curFloor.userData.legacyToGraphicMap = legacyToGraphicMap;
3727
3681
  return { curFloor, graphics };
3728
3682
  }
3683
+ triggerHooks(hooks, ...args) {
3684
+ this.event.emit(hooks, ...args);
3685
+ }
3729
3686
  switchFloor({
3730
3687
  brand,
3731
3688
  project,
3732
- phase,
3733
- building,
3734
3689
  floor,
3735
3690
  ts,
3736
3691
  resource_type_list
3737
3692
  }) {
3738
- const floorKey = this.getFloorKey({
3693
+ const floorKey = generatorKeyByObj({
3739
3694
  brand,
3740
3695
  project,
3741
- phase,
3742
- building,
3743
3696
  floor,
3744
3697
  ts,
3745
3698
  resource_type_list
@@ -3747,33 +3700,14 @@ var BMap = class extends EventDispatcher7 {
3747
3700
  const curFloorData = this.floorDataMap.get(floorKey);
3748
3701
  this.context.control.removeEventListener("change", this.onControlChange);
3749
3702
  if (curFloorData) {
3750
- const buildingKey = this.getBuildingKey({
3751
- brand,
3752
- project,
3753
- phase,
3754
- building
3755
- });
3703
+ const buildingKey = generatorKeyByObj({ brand, project });
3756
3704
  this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null;
3757
3705
  const createdFloor = this.createFloor(curFloorData);
3758
3706
  if (createdFloor) {
3759
- this.event.emit("switch_floor_before" /* SWITCH_FLOOR_BEFORE */, createdFloor);
3760
- this.context.cameraBound.setEnable(false);
3707
+ this.triggerHooks("switch_floor_before" /* SWITCH_FLOOR_BEFORE */, createdFloor);
3761
3708
  this.context.switchFloor(createdFloor.curFloor);
3762
- this.context.control.minZoom = 0;
3763
- this.context.control.maxZoom = Infinity;
3764
- this.context.camera.zoom = 1;
3765
- this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);
3766
- this.context.fitCameraToGround(void 0, 0);
3767
- this.basicZoom = this.context.camera.zoom;
3768
- this.context.control.minZoom = this.basicZoom;
3769
- this.context.control.maxZoom = this.basicZoom * 25;
3770
- this.context.control.addEventListener("change", this.onControlChange);
3771
- if (this.type === "3d") {
3772
- this.context.fitCameraToGround(this.config.defaultPadding, 0, false);
3773
- }
3774
- this.onControlChange();
3775
- this.context.cameraBound.setEnable(true);
3776
- this.event.emit("switch_floor_after" /* SWITCH_FLOOR_AFTER */, createdFloor);
3709
+ this.initialFloorCamera();
3710
+ this.triggerHooks("switch_floor_after" /* SWITCH_FLOOR_AFTER */, createdFloor);
3777
3711
  } else {
3778
3712
  console.warn("[switchFloor error] [" + floor + "] \u697C\u5C42\u6CA1\u6709\u6570\u636E");
3779
3713
  }
@@ -3783,6 +3717,24 @@ var BMap = class extends EventDispatcher7 {
3783
3717
  );
3784
3718
  }
3785
3719
  }
3720
+ // 切换楼层后初始化相机
3721
+ initialFloorCamera() {
3722
+ this.context.cameraBound.setEnable(false);
3723
+ this.context.control.minZoom = 0;
3724
+ this.context.control.maxZoom = Infinity;
3725
+ this.context.camera.zoom = 1;
3726
+ this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);
3727
+ this.context.fitCameraToGround(void 0, 0);
3728
+ this.basicZoom = this.context.camera.zoom;
3729
+ this.context.control.minZoom = this.basicZoom;
3730
+ this.context.control.maxZoom = this.basicZoom * 25;
3731
+ this.context.control.addEventListener("change", this.onControlChange);
3732
+ if (this.type === "3d") {
3733
+ this.context.fitCameraToGround(this.config.defaultPadding, 0, false);
3734
+ }
3735
+ this.onControlChange();
3736
+ this.context.cameraBound.setEnable(true);
3737
+ }
3786
3738
  onControlChange = () => {
3787
3739
  const {
3788
3740
  camera: { zoom }
@@ -4145,17 +4097,145 @@ var BMap = class extends EventDispatcher7 {
4145
4097
  this.unRegistryEvent();
4146
4098
  }
4147
4099
  };
4100
+
4101
+ // src/plugins/navigation/path.worker.ts
4102
+ var workerCode = `
4103
+ self.onmessage = (e) => {
4104
+ console.log(e.data)
4105
+ loadRoad("");
4106
+ getPath("", "")
4107
+ }
4108
+
4109
+ function loadRoad(project) {
4110
+ // \u8BF7\u6C42\u5168\u90E8\u697C\u5C42\u7684\u8DEF\u7F51
4111
+ console.log(project)
4112
+ self.postMessage("project")
4113
+ }
4114
+
4115
+ function getPath(start, end) {
4116
+ // \u89C4\u5212\u8DEF\u7EBF
4117
+ console.log(start, end)
4118
+ self.postMessage("getPath")
4119
+ }
4120
+ `;
4121
+ var path_worker_default = workerCode;
4122
+
4123
+ // src/plugins/navigation/navigation.ts
4124
+ var Navigation = class extends Plugin {
4125
+ worker_url = window.URL.createObjectURL(new Blob([path_worker_default], { type: "text/javascript" }));
4126
+ worker = new Worker(this.worker_url);
4127
+ constructor(bmap) {
4128
+ super(bmap);
4129
+ console.log(this.worker);
4130
+ this.worker.postMessage("initial");
4131
+ this.worker.onmessage = (e) => {
4132
+ console.log("onmessage", e.data);
4133
+ };
4134
+ }
4135
+ fetchRoad() {
4136
+ }
4137
+ dispose() {
4138
+ this.worker.terminate();
4139
+ window.URL.revokeObjectURL(this.worker_url);
4140
+ }
4141
+ };
4142
+
4143
+ // src/plugins/split-load/split-load.ts
4144
+ var SplitLoad = class extends Plugin {
4145
+ cacheData = /* @__PURE__ */ new Map();
4146
+ async load(query) {
4147
+ const cacheKey = generatorKeyByObj(query);
4148
+ if (this.cacheData.has(cacheKey)) {
4149
+ return this.cacheData.get(cacheKey);
4150
+ }
4151
+ console.time("floor/get\u8BF7\u6C42" + query.resource_type_list);
4152
+ const data = await loadGraphics(query, this.bmap.config);
4153
+ console.timeEnd("floor/get\u8BF7\u6C42" + query.resource_type_list);
4154
+ this.bmap.transformGraphicData(data, [0, 0]);
4155
+ data.forEach((item) => item.info.transformToBuildingGround = false);
4156
+ this.cacheData.set(cacheKey, data);
4157
+ return data;
4158
+ }
4159
+ isSameFloor(query) {
4160
+ return this.bmap.context.currentFloor?.name === generatorKeyByObj(query);
4161
+ }
4162
+ switchFloorByData(data, query) {
4163
+ if (!this.isSameFloor(query)) {
4164
+ const floorName = generatorKeyByObj(query);
4165
+ const { curFloor, graphics } = this.bmap.createFloor(data);
4166
+ curFloor.name = floorName;
4167
+ const graphicMap = /* @__PURE__ */ new Map();
4168
+ data.forEach((graphicInfo) => {
4169
+ graphicMap.set(graphicInfo.element_uuid, graphicInfo);
4170
+ });
4171
+ curFloor.userData.graphicMap = graphicMap;
4172
+ this.bmap.triggerHooks("switch_floor_before" /* SWITCH_FLOOR_BEFORE */, { curFloor, graphics });
4173
+ this.bmap.context.switchFloor(curFloor);
4174
+ this.bmap.initialFloorCamera();
4175
+ this.bmap.triggerHooks("switch_floor_after" /* SWITCH_FLOOR_AFTER */, { curFloor, graphics });
4176
+ } else {
4177
+ if (!data.length) {
4178
+ return;
4179
+ }
4180
+ const curFloor = this.bmap.context.currentFloor;
4181
+ const legacyToGraphicMap = curFloor.userData.legacyToGraphicMap;
4182
+ const graphicMap = curFloor.userData.graphicMap;
4183
+ const graphics = [];
4184
+ for (const item of data) {
4185
+ if (item.info.group === "ground") {
4186
+ curFloor.createGround(item.info);
4187
+ } else {
4188
+ const graphic = curFloor.addGraphic(item.info);
4189
+ graphic.userData.data = item;
4190
+ legacyToGraphicMap.set(item.legacy_id, graphic);
4191
+ graphics.push(graphic);
4192
+ }
4193
+ graphicMap.set(item.element_uuid, item);
4194
+ }
4195
+ this.bmap.triggerHooks("switch_floor_before" /* SWITCH_FLOOR_BEFORE */, { curFloor, graphics });
4196
+ this.bmap.initialFloorCamera();
4197
+ this.bmap.triggerHooks("switch_floor_after" /* SWITCH_FLOOR_AFTER */, { curFloor, graphics });
4198
+ }
4199
+ }
4200
+ filterData(data, query) {
4201
+ if (!this.isSameFloor(query)) {
4202
+ return data;
4203
+ }
4204
+ const graphicMap = this.bmap.context.currentFloor.userData.graphicMap;
4205
+ return data.filter((graphic) => !graphicMap.has(graphic.element_uuid));
4206
+ }
4207
+ async switchFloorByStoreData(query) {
4208
+ const storeData = await this.load({ ...query, resource_type_list: "6" });
4209
+ const filterData = this.filterData(storeData, query);
4210
+ this.switchFloorByData(filterData, query);
4211
+ }
4212
+ async switchFloorByOtherData(query) {
4213
+ const otherData = await this.load({
4214
+ ...query,
4215
+ resource_type_list: "1,2,3,4"
4216
+ });
4217
+ const filterData = this.filterData(otherData, query);
4218
+ this.switchFloorByData(filterData, query);
4219
+ }
4220
+ async changeFloor(query) {
4221
+ await Promise.all([
4222
+ this.switchFloorByStoreData(query),
4223
+ this.switchFloorByOtherData(query)
4224
+ ]);
4225
+ return Array.from(this.bmap.context.currentFloor.userData.graphicMap.values());
4226
+ }
4227
+ };
4148
4228
  export {
4149
4229
  BMap,
4150
4230
  BaseSvg,
4151
4231
  Context,
4152
4232
  Equipment,
4153
- EventName,
4154
4233
  Events,
4155
4234
  Floor,
4156
4235
  Graphic,
4157
4236
  GraphicLayer,
4158
4237
  HeatmapElement,
4238
+ HooksName,
4159
4239
  HoverHelper,
4160
4240
  Layer,
4161
4241
  MapTypePolar,
@@ -4167,6 +4247,7 @@ export {
4167
4247
  SelectBox,
4168
4248
  Selection,
4169
4249
  Shadow,
4250
+ SplitLoad,
4170
4251
  SvgLine,
4171
4252
  SvgPolygon,
4172
4253
  Timer,
@@ -4183,6 +4264,7 @@ export {
4183
4264
  defaultConfig,
4184
4265
  dispose,
4185
4266
  disposeLoader,
4267
+ generatorKeyByObj,
4186
4268
  getCenter,
4187
4269
  getConfig,
4188
4270
  getLongestSideDir,
@@ -4199,6 +4281,8 @@ export {
4199
4281
  isContain,
4200
4282
  isControl,
4201
4283
  isMac,
4284
+ loadBuildingGround,
4285
+ loadGraphics,
4202
4286
  loadModel,
4203
4287
  proxyOptions,
4204
4288
  setCirclePosition,