venue-js 1.4.0-next.15 → 1.4.0-next.17

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/dist/index.js CHANGED
@@ -37,6 +37,7 @@ __export(index_exports, {
37
37
  GEOJSON_FEATURE_TYPES: () => GEOJSON_FEATURE_TYPES,
38
38
  HIGHLIGHT_LAYER_NAME: () => HIGHLIGHT_LAYER_NAME,
39
39
  IMDF_FEATURE_TYPES: () => IMDF_FEATURE_TYPES,
40
+ IMDF_UNIT_CATEGORIES: () => IMDF_UNIT_CATEGORIES,
40
41
  IndoorMap: () => IndoorMap,
41
42
  LAST_USER_LOCATION_ELEMENT_ID_PREFIX: () => LAST_USER_LOCATION_ELEMENT_ID_PREFIX,
42
43
  LAYERS: () => LAYERS,
@@ -114,6 +115,71 @@ var IMDF_FEATURE_TYPES = [
114
115
  "unit",
115
116
  "venue"
116
117
  ];
118
+ var IMDF_UNIT_CATEGORIES = [
119
+ "auditorium",
120
+ "brick",
121
+ "classroom",
122
+ "column",
123
+ "concrete",
124
+ "conferenceroom",
125
+ "drywall",
126
+ "elevator",
127
+ "escalator",
128
+ "fieldofplay",
129
+ "firstaid",
130
+ "fitnessroom",
131
+ "foodservice",
132
+ "footbridge",
133
+ "glass",
134
+ "huddleroom",
135
+ "kitchen",
136
+ "laboratory",
137
+ "library",
138
+ "lobby",
139
+ "lounge",
140
+ "mailroom",
141
+ "mothersroom",
142
+ "movietheater",
143
+ "movingwalkway",
144
+ "nonpublic",
145
+ "office",
146
+ "opentobelow",
147
+ "parking",
148
+ "phoneroom",
149
+ "platform",
150
+ "privatelounge",
151
+ "ramp",
152
+ "recreation",
153
+ "restroom",
154
+ "restroom.family",
155
+ "restroom.female",
156
+ "restroom.female.wheelchair",
157
+ "restroom.male",
158
+ "restroom.male.wheelchair",
159
+ "restroom.transgender",
160
+ "restroom.transgender.wheelchair",
161
+ "restroom.unisex",
162
+ "restroom.unisex.wheelchair",
163
+ "restroom.wheelchair",
164
+ "road",
165
+ "room",
166
+ "serverroom",
167
+ "shower",
168
+ "smokingarea",
169
+ "stairs",
170
+ "steps",
171
+ "storage",
172
+ "structure",
173
+ "terrace",
174
+ "theater",
175
+ "unenclosedarea",
176
+ "unspecified",
177
+ "vegetation",
178
+ "waitingroom",
179
+ "walkway",
180
+ "walkway.island",
181
+ "wood"
182
+ ];
117
183
  var NONIMDF_FEATURE_TYPES = [
118
184
  "taxonomy",
119
185
  "event",
@@ -355,7 +421,7 @@ var isValidPoint = (geometry) => {
355
421
  function isInFilter(filter) {
356
422
  return typeof filter === "object" && filter !== null && "$in" in filter && Array.isArray(filter.$in);
357
423
  }
358
- var someIntersect = (a, b) => a.some((v2) => b.includes(v2));
424
+ var someIntersect = (a, b) => a.some((v) => b.includes(v));
359
425
  function matchFilter(value, filter) {
360
426
  if (Array.isArray(value)) {
361
427
  if (isInFilter(filter)) return someIntersect(value, filter.$in);
@@ -410,7 +476,27 @@ var getOccupantMarkerLocations = (occupant, options) => {
410
476
  var import_query_core = require("@tanstack/query-core");
411
477
 
412
478
  // src/data/populator/index.ts
413
- var import_boolean_within = require("@turf/boolean-within");
479
+ var import_center2 = require("@turf/center");
480
+ var import_boolean_point_in_polygon2 = require("@turf/boolean-point-in-polygon");
481
+
482
+ // src/data/utils/findContaining.ts
483
+ var import_center = require("@turf/center");
484
+ var import_boolean_point_in_polygon = require("@turf/boolean-point-in-polygon");
485
+ var findContainingUnit = (poi, units) => {
486
+ const unit = units.find(
487
+ (unit2) => {
488
+ try {
489
+ return unit2.properties.level_id === poi.properties.level_id && (0, import_boolean_point_in_polygon.booleanPointInPolygon)((0, import_center.center)(poi), unit2);
490
+ } catch (e) {
491
+ console.log(`Cannot find containing unit of (${poi.id}):`, e.message);
492
+ return false;
493
+ }
494
+ }
495
+ );
496
+ return unit;
497
+ };
498
+
499
+ // src/data/populator/index.ts
414
500
  var createPopulator = ({
415
501
  internalFindById,
416
502
  internalFilterByType
@@ -420,7 +506,6 @@ var createPopulator = ({
420
506
  const populateDetail = (detail) => Promise.resolve(detail);
421
507
  const populateFootprint = (footprint) => Promise.resolve(footprint);
422
508
  const populateGeofence = (geofence) => Promise.resolve(geofence);
423
- const populateRelationship = (relationship) => Promise.resolve(relationship);
424
509
  const populatePrivilege = (privilege) => Promise.resolve(privilege);
425
510
  const populateEvent = (event) => Promise.resolve(event);
426
511
  const populatePromotion = async (promotion) => {
@@ -444,7 +529,7 @@ var createPopulator = ({
444
529
  const ordinalKiosks = kiosks.filter(
445
530
  (kiosk2) => kiosk2.properties.level_id === defaultLevel.id
446
531
  );
447
- const kiosk = ordinalKiosks.find((kiosk2) => (0, import_boolean_within.booleanWithin)(amenity, kiosk2));
532
+ const kiosk = ordinalKiosks.find((kiosk2) => (0, import_boolean_point_in_polygon2.booleanPointInPolygon)(amenity, kiosk2));
448
533
  return {
449
534
  ...amenity,
450
535
  properties: {
@@ -463,7 +548,7 @@ var createPopulator = ({
463
548
  const venue = await internalFindById(unit.properties.venue_id);
464
549
  const level = await internalFindById(unit.properties.level_id);
465
550
  const sections = await internalFilterByType("section");
466
- const section = sections.find((section2) => (0, import_boolean_within.booleanWithin)(anchor, section2));
551
+ const section = sections.find((section2) => (0, import_boolean_point_in_polygon2.booleanPointInPolygon)(anchor, section2));
467
552
  return {
468
553
  ...anchor,
469
554
  properties: {
@@ -496,20 +581,11 @@ var createPopulator = ({
496
581
  const venue = await internalFindById(kiosk.properties.venue_id);
497
582
  const anchor = await internalFindById(kiosk.properties.anchor_id);
498
583
  const units = await internalFilterByType("unit");
499
- const unit = units.find(
500
- (unit2) => {
501
- try {
502
- return unit2.properties.category === "walkway" && unit2.properties.level_id === kiosk.properties.level_id && (0, import_boolean_within.booleanWithin)(kiosk, unit2);
503
- } catch (e) {
504
- console.log(`Cannot find kiosk(${kiosk.id})'s units:`, e.message);
505
- return false;
506
- }
507
- }
508
- );
584
+ const unit = findContainingUnit(kiosk, units.filter((unit2) => unit2.properties.category === "walkway"));
509
585
  let section = null;
510
586
  if (anchor) {
511
587
  const sections = await internalFilterByType("section");
512
- section = sections.find((section2) => (0, import_boolean_within.booleanWithin)(anchor, section2));
588
+ section = sections.find((section2) => (0, import_boolean_point_in_polygon2.booleanPointInPolygon)(anchor, section2));
513
589
  }
514
590
  return {
515
591
  ...kiosk,
@@ -591,6 +667,23 @@ var createPopulator = ({
591
667
  }
592
668
  };
593
669
  };
670
+ const populateRelationship = async (relationship) => {
671
+ const originId = relationship.properties.origin?.id;
672
+ const destinationId = relationship.properties.destination?.id;
673
+ const origin = originId ? await internalFindById(originId) : null;
674
+ const destination = destinationId ? await internalFindById(destinationId) : null;
675
+ const intermediary_ids = (relationship.properties.intermediary || []).map(({ id }) => id);
676
+ const intermediary = await Promise.all(intermediary_ids.map(internalFindById));
677
+ return {
678
+ ...relationship,
679
+ properties: {
680
+ ...relationship.properties,
681
+ origin,
682
+ destination,
683
+ intermediary
684
+ }
685
+ };
686
+ };
594
687
  const populateSection = async (section) => {
595
688
  const venue = await internalFindById(section.properties.venue_id);
596
689
  const level = await internalFindById(section.properties.level_id);
@@ -609,7 +702,7 @@ var createPopulator = ({
609
702
  const level = await internalFindById(unit.properties.level_id);
610
703
  const sections = await internalFilterByType("section");
611
704
  try {
612
- const section = unit.geometry.type !== "MultiPolygon" ? sections.find((section2) => (0, import_boolean_within.booleanWithin)(unit, section2)) : null;
705
+ const section = unit.geometry.type !== "MultiPolygon" ? sections.find((section2) => (0, import_boolean_point_in_polygon2.booleanPointInPolygon)((0, import_center2.center)(unit), section2)) : null;
613
706
  return {
614
707
  ...unit,
615
708
  properties: {
@@ -2170,6 +2263,7 @@ var getDataClient = (options) => {
2170
2263
  destroyObservers,
2171
2264
  createFilterByTypeQueryOptions,
2172
2265
  createFindByIdQueryOptions,
2266
+ _internalFindById: internalFindById,
2173
2267
  filterByType,
2174
2268
  findById,
2175
2269
  search: searchFn
@@ -2182,7 +2276,7 @@ var import_transcoders = require("@maptalks/transcoders.draco");
2182
2276
  var import_tween = __toESM(require("@tweenjs/tween.js"));
2183
2277
  var import_lodash10 = __toESM(require("lodash"));
2184
2278
 
2185
- // ../../node_modules/@turf/helpers/dist/esm/index.js
2279
+ // node_modules/@turf/helpers/dist/esm/index.js
2186
2280
  var earthRadius = 63710088e-1;
2187
2281
  var factors = {
2188
2282
  centimeters: earthRadius * 100,
@@ -2288,7 +2382,7 @@ function isNumber2(num) {
2288
2382
 
2289
2383
  // src/IndoorMap/IndoorMap.ts
2290
2384
  var import_distance = __toESM(require("@turf/distance"));
2291
- var import_center4 = __toESM(require("@turf/center"));
2385
+ var import_center6 = __toESM(require("@turf/center"));
2292
2386
  var import_three6 = require("three");
2293
2387
  var import_maptalks10 = require("maptalks.three");
2294
2388
 
@@ -2369,7 +2463,7 @@ var VENUE_EVENTS = {
2369
2463
  // src/IndoorMap/utils/createElements.js
2370
2464
  var import_lodash6 = __toESM(require("lodash"));
2371
2465
  var import_maptalks4 = require("maptalks");
2372
- var import_center2 = __toESM(require("@turf/center"));
2466
+ var import_center4 = __toESM(require("@turf/center"));
2373
2467
  var import_buffer = __toESM(require("@turf/buffer"));
2374
2468
  var import_three4 = require("three");
2375
2469
 
@@ -2403,7 +2497,7 @@ var Billboard = class extends import_maptalks.BaseObject {
2403
2497
  this._initOptions(options);
2404
2498
  const {
2405
2499
  altitude = OPTIONS.altitude,
2406
- scale: scale3 = OPTIONS.scale,
2500
+ scale: scale2 = OPTIONS.scale,
2407
2501
  alphaTest = OPTIONS.alphaTest,
2408
2502
  legColor = OPTIONS.legColor,
2409
2503
  showLeg = OPTIONS.showLeg
@@ -2437,8 +2531,8 @@ var Billboard = class extends import_maptalks.BaseObject {
2437
2531
  const sprite = new import_three.Sprite(material);
2438
2532
  sprite.material.sizeAttenuation = false;
2439
2533
  sprite.scale.set(
2440
- scale3 * naturalWidth / divider,
2441
- scale3 * naturalHeight / divider,
2534
+ scale2 * naturalWidth / divider,
2535
+ scale2 * naturalHeight / divider,
2442
2536
  1
2443
2537
  );
2444
2538
  this.getObject3d().add(sprite);
@@ -2447,7 +2541,7 @@ var Billboard = class extends import_maptalks.BaseObject {
2447
2541
  const position = layer.coordinateToVector3(coordinate, z);
2448
2542
  import_lodash3.default.set(this.properties, "default.position", position);
2449
2543
  import_lodash3.default.set(this.properties, "default.altitude", altitude);
2450
- import_lodash3.default.set(this.properties, "default.scale", scale3);
2544
+ import_lodash3.default.set(this.properties, "default.scale", scale2);
2451
2545
  this.getObject3d().position.copy(position);
2452
2546
  }
2453
2547
  setLineHeight(altitude) {
@@ -2487,18 +2581,18 @@ var SpriteMarker = class extends import_maptalks2.BaseObject {
2487
2581
  this._createGroup();
2488
2582
  const {
2489
2583
  altitude = DEFAULT_OPTIONS.altitude,
2490
- scale: scale3 = DEFAULT_OPTIONS.scale,
2584
+ scale: scale2 = DEFAULT_OPTIONS.scale,
2491
2585
  highlight = DEFAULT_OPTIONS.highlight,
2492
2586
  alphaTest = DEFAULT_OPTIONS.alphaTest
2493
2587
  } = options;
2494
2588
  this.properties = { ...properties };
2495
2589
  const modifiedAltitude = altitude + 2;
2496
- this.#default = { options: { scale: scale3, altitude: modifiedAltitude }, material };
2590
+ this.#default = { options: { scale: scale2, altitude: modifiedAltitude }, material };
2497
2591
  this.#highlight = import_lodash4.default.merge({}, DEFAULT_OPTIONS.highlight, highlight);
2498
2592
  if (material && material instanceof import_three2.SpriteMaterial)
2499
2593
  material.alphaTest = alphaTest;
2500
2594
  const sprite = new import_three2.Sprite(material);
2501
- sprite.scale.set(scale3, scale3, scale3);
2595
+ sprite.scale.set(scale2, scale2, scale2);
2502
2596
  const obj3d = this.getObject3d();
2503
2597
  obj3d.add(sprite);
2504
2598
  const z = layer.altitudeToVector3(modifiedAltitude, modifiedAltitude).x;
@@ -2644,14 +2738,14 @@ var NavigationPath = class extends import_maptalks3.BaseObject {
2644
2738
  };
2645
2739
 
2646
2740
  // src/IndoorMap/utils/geometry.ts
2647
- var import_center = __toESM(require("@turf/center"));
2741
+ var import_center3 = __toESM(require("@turf/center"));
2648
2742
  var import_lodash5 = __toESM(require("lodash"));
2649
2743
  var import_line_offset = __toESM(require("@turf/line-offset"));
2650
2744
  var getCenterFromGeometry = (geometry) => {
2651
2745
  try {
2652
2746
  const { type = null, coordinates = null } = geometry;
2653
2747
  if (!type || !coordinates) return null;
2654
- const centerPoint = (0, import_center.default)(geometry);
2748
+ const centerPoint = (0, import_center3.default)(geometry);
2655
2749
  return import_lodash5.default.get(centerPoint, "geometry.coordinates");
2656
2750
  } catch (error) {
2657
2751
  return null;
@@ -2698,8 +2792,8 @@ var createSVGPathFromMarkerSymbol = (style) => {
2698
2792
  markerFill,
2699
2793
  markerPath
2700
2794
  } = style;
2701
- const scale3 = markerWidth / 24;
2702
- return `<path d="${markerPath}" style="transform:translate(${markerDx}px, ${markerDy}px) scale(${scale3})" fill="${markerFill}"/>`;
2795
+ const scale2 = markerWidth / 24;
2796
+ return `<path d="${markerPath}" style="transform:translate(${markerDx}px, ${markerDy}px) scale(${scale2})" fill="${markerFill}"/>`;
2703
2797
  };
2704
2798
 
2705
2799
  // src/IndoorMap/utils/createElements.js
@@ -3131,7 +3225,7 @@ var styledFeatureGenerator = (mapTheme) => {
3131
3225
  const mainLocationId = import_lodash6.default.get(properties, "unit.id") || import_lodash6.default.get(properties, "kiosk.id");
3132
3226
  const isMainLocationFeature = mainLocationId === locatedFeature?.id;
3133
3227
  const { geometry: mainLocationGeometry } = properties?.anchor;
3134
- const geometry = isMainLocationFeature ? mainLocationGeometry : (0, import_center2.default)(locatedFeature)?.geometry;
3228
+ const geometry = isMainLocationFeature ? mainLocationGeometry : (0, import_center4.default)(locatedFeature)?.geometry;
3135
3229
  const baseProperties = {
3136
3230
  id,
3137
3231
  feature_type,
@@ -3635,7 +3729,7 @@ var styledFeatureGenerator = (mapTheme) => {
3635
3729
  const {
3636
3730
  logo,
3637
3731
  altitude,
3638
- scale: scale3,
3732
+ scale: scale2,
3639
3733
  alphaTest,
3640
3734
  legColor,
3641
3735
  showLeg,
@@ -3649,7 +3743,7 @@ var styledFeatureGenerator = (mapTheme) => {
3649
3743
  };
3650
3744
  const options = {
3651
3745
  altitude,
3652
- scale: scale3,
3746
+ scale: scale2,
3653
3747
  alphaTest,
3654
3748
  legColor,
3655
3749
  showLeg,
@@ -3893,9 +3987,9 @@ var getRelatedLocationsByAmenity = (feature2) => {
3893
3987
  var getRelatedLocationIdsByFeature = (feature2) => {
3894
3988
  switch (feature2?.feature_type) {
3895
3989
  case "amenity":
3896
- return getRelatedLocationsByAmenity(feature2).map((v2) => v2?.id);
3990
+ return getRelatedLocationsByAmenity(feature2).map((v) => v?.id);
3897
3991
  case "occupant":
3898
- return getRelatedLocationsByOccupant(feature2).map((v2) => v2?.id);
3992
+ return getRelatedLocationsByOccupant(feature2).map((v) => v?.id);
3899
3993
  default:
3900
3994
  return [];
3901
3995
  }
@@ -4131,7 +4225,7 @@ var CameraManager = class {
4131
4225
 
4132
4226
  // src/IndoorMap/renderer/RendererManager.ts
4133
4227
  var import_lodash9 = require("lodash");
4134
- var import_center3 = require("@turf/center");
4228
+ var import_center5 = require("@turf/center");
4135
4229
  var THREE4 = __toESM(require("three"));
4136
4230
 
4137
4231
  // src/IndoorMap/renderer/3d/Element3DRenderer.ts
@@ -4225,22 +4319,22 @@ var getMaterial = (text, flatLabelOptions) => {
4225
4319
  texts = wrapText(ctx, text, maxWidth);
4226
4320
  }
4227
4321
  let textWidth = (0, import_lodash7.max)(texts.map((text2) => ctx.measureText(text2).width));
4228
- let scale3 = 1;
4229
- while (scale3 > 0 && textWidth + 2 * margin > SIZE) {
4230
- scale3 -= scaleStep;
4231
- ctx.font = `${fontWeight} ${scale3 * fontSize}px "${fontFamily}", Arial`;
4322
+ let scale2 = 1;
4323
+ while (scale2 > 0 && textWidth + 2 * margin > SIZE) {
4324
+ scale2 -= scaleStep;
4325
+ ctx.font = `${fontWeight} ${scale2 * fontSize}px "${fontFamily}", Arial`;
4232
4326
  textWidth = (0, import_lodash7.max)(texts.map((text2) => ctx.measureText(text2).width));
4233
4327
  }
4234
- const center2 = { x: 0.5 * SIZE, y: 0.5 * SIZE };
4235
- if (scale3 > scaleMin) {
4236
- const totalHeight = texts.length * (fontSize * scale3 * lineHeight);
4237
- const startY = center2.y - totalHeight / 2 + fontSize * scale3 * lineHeight * 0.5;
4328
+ const center4 = { x: 0.5 * SIZE, y: 0.5 * SIZE };
4329
+ if (scale2 > scaleMin) {
4330
+ const totalHeight = texts.length * (fontSize * scale2 * lineHeight);
4331
+ const startY = center4.y - totalHeight / 2 + fontSize * scale2 * lineHeight * 0.5;
4238
4332
  texts.forEach((text2, index) => {
4239
- const yOffset = startY + index * (fontSize * scale3 * lineHeight);
4333
+ const yOffset = startY + index * (fontSize * scale2 * lineHeight);
4240
4334
  if (strokeStyle && lineWidth) {
4241
- ctx.strokeText(text2, center2.x, yOffset);
4335
+ ctx.strokeText(text2, center4.x, yOffset);
4242
4336
  }
4243
- ctx.fillText(text2, center2.x, yOffset);
4337
+ ctx.fillText(text2, center4.x, yOffset);
4244
4338
  });
4245
4339
  }
4246
4340
  const texture = new import_three5.Texture(canvas);
@@ -4317,8 +4411,8 @@ var GroundLabel = class extends import_maptalks6.BaseObject {
4317
4411
  const basePosition = layer.coordinateToVector3([cx, cy], z);
4318
4412
  this.#originalPosition = basePosition.clone();
4319
4413
  const finalPosition = this.#calculateFinalPosition(basePosition);
4320
- const scale3 = width / 6456122659e-13;
4321
- const finalScale = maxFontScale && scale3 > maxFontScale ? maxFontScale : scale3;
4414
+ const scale2 = width / 6456122659e-13;
4415
+ const finalScale = maxFontScale && scale2 > maxFontScale ? maxFontScale : scale2;
4322
4416
  this.getObject3d().scale.set(finalScale, finalScale, finalScale);
4323
4417
  this.getObject3d().position.copy(finalPosition);
4324
4418
  this.getObject3d().rotation.z = Math.PI / 180 * this.#angle;
@@ -5291,478 +5385,11 @@ var angleBetweenLineStrings = (line1, line2) => {
5291
5385
  return Math.atan2(dy, dx);
5292
5386
  };
5293
5387
 
5294
- // ../../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/util.js
5295
- var epsilon = 11102230246251565e-32;
5296
- var splitter = 134217729;
5297
- var resulterrbound = (3 + 8 * epsilon) * epsilon;
5298
- function sum(elen, e, flen, f, h) {
5299
- let Q, Qnew, hh, bvirt;
5300
- let enow = e[0];
5301
- let fnow = f[0];
5302
- let eindex = 0;
5303
- let findex = 0;
5304
- if (fnow > enow === fnow > -enow) {
5305
- Q = enow;
5306
- enow = e[++eindex];
5307
- } else {
5308
- Q = fnow;
5309
- fnow = f[++findex];
5310
- }
5311
- let hindex = 0;
5312
- if (eindex < elen && findex < flen) {
5313
- if (fnow > enow === fnow > -enow) {
5314
- Qnew = enow + Q;
5315
- hh = Q - (Qnew - enow);
5316
- enow = e[++eindex];
5317
- } else {
5318
- Qnew = fnow + Q;
5319
- hh = Q - (Qnew - fnow);
5320
- fnow = f[++findex];
5321
- }
5322
- Q = Qnew;
5323
- if (hh !== 0) {
5324
- h[hindex++] = hh;
5325
- }
5326
- while (eindex < elen && findex < flen) {
5327
- if (fnow > enow === fnow > -enow) {
5328
- Qnew = Q + enow;
5329
- bvirt = Qnew - Q;
5330
- hh = Q - (Qnew - bvirt) + (enow - bvirt);
5331
- enow = e[++eindex];
5332
- } else {
5333
- Qnew = Q + fnow;
5334
- bvirt = Qnew - Q;
5335
- hh = Q - (Qnew - bvirt) + (fnow - bvirt);
5336
- fnow = f[++findex];
5337
- }
5338
- Q = Qnew;
5339
- if (hh !== 0) {
5340
- h[hindex++] = hh;
5341
- }
5342
- }
5343
- }
5344
- while (eindex < elen) {
5345
- Qnew = Q + enow;
5346
- bvirt = Qnew - Q;
5347
- hh = Q - (Qnew - bvirt) + (enow - bvirt);
5348
- enow = e[++eindex];
5349
- Q = Qnew;
5350
- if (hh !== 0) {
5351
- h[hindex++] = hh;
5352
- }
5353
- }
5354
- while (findex < flen) {
5355
- Qnew = Q + fnow;
5356
- bvirt = Qnew - Q;
5357
- hh = Q - (Qnew - bvirt) + (fnow - bvirt);
5358
- fnow = f[++findex];
5359
- Q = Qnew;
5360
- if (hh !== 0) {
5361
- h[hindex++] = hh;
5362
- }
5363
- }
5364
- if (Q !== 0 || hindex === 0) {
5365
- h[hindex++] = Q;
5366
- }
5367
- return hindex;
5368
- }
5369
- function estimate(elen, e) {
5370
- let Q = e[0];
5371
- for (let i = 1; i < elen; i++) Q += e[i];
5372
- return Q;
5373
- }
5374
- function vec(n) {
5375
- return new Float64Array(n);
5376
- }
5377
-
5378
- // ../../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/orient2d.js
5379
- var ccwerrboundA = (3 + 16 * epsilon) * epsilon;
5380
- var ccwerrboundB = (2 + 12 * epsilon) * epsilon;
5381
- var ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;
5382
- var B = vec(4);
5383
- var C1 = vec(8);
5384
- var C2 = vec(12);
5385
- var D = vec(16);
5386
- var u = vec(4);
5387
- function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
5388
- let acxtail, acytail, bcxtail, bcytail;
5389
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u32;
5390
- const acx = ax - cx;
5391
- const bcx = bx - cx;
5392
- const acy = ay - cy;
5393
- const bcy = by - cy;
5394
- s1 = acx * bcy;
5395
- c = splitter * acx;
5396
- ahi = c - (c - acx);
5397
- alo = acx - ahi;
5398
- c = splitter * bcy;
5399
- bhi = c - (c - bcy);
5400
- blo = bcy - bhi;
5401
- s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
5402
- t1 = acy * bcx;
5403
- c = splitter * acy;
5404
- ahi = c - (c - acy);
5405
- alo = acy - ahi;
5406
- c = splitter * bcx;
5407
- bhi = c - (c - bcx);
5408
- blo = bcx - bhi;
5409
- t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
5410
- _i = s0 - t0;
5411
- bvirt = s0 - _i;
5412
- B[0] = s0 - (_i + bvirt) + (bvirt - t0);
5413
- _j = s1 + _i;
5414
- bvirt = _j - s1;
5415
- _0 = s1 - (_j - bvirt) + (_i - bvirt);
5416
- _i = _0 - t1;
5417
- bvirt = _0 - _i;
5418
- B[1] = _0 - (_i + bvirt) + (bvirt - t1);
5419
- u32 = _j + _i;
5420
- bvirt = u32 - _j;
5421
- B[2] = _j - (u32 - bvirt) + (_i - bvirt);
5422
- B[3] = u32;
5423
- let det = estimate(4, B);
5424
- let errbound = ccwerrboundB * detsum;
5425
- if (det >= errbound || -det >= errbound) {
5426
- return det;
5427
- }
5428
- bvirt = ax - acx;
5429
- acxtail = ax - (acx + bvirt) + (bvirt - cx);
5430
- bvirt = bx - bcx;
5431
- bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
5432
- bvirt = ay - acy;
5433
- acytail = ay - (acy + bvirt) + (bvirt - cy);
5434
- bvirt = by - bcy;
5435
- bcytail = by - (bcy + bvirt) + (bvirt - cy);
5436
- if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {
5437
- return det;
5438
- }
5439
- errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
5440
- det += acx * bcytail + bcy * acxtail - (acy * bcxtail + bcx * acytail);
5441
- if (det >= errbound || -det >= errbound) return det;
5442
- s1 = acxtail * bcy;
5443
- c = splitter * acxtail;
5444
- ahi = c - (c - acxtail);
5445
- alo = acxtail - ahi;
5446
- c = splitter * bcy;
5447
- bhi = c - (c - bcy);
5448
- blo = bcy - bhi;
5449
- s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
5450
- t1 = acytail * bcx;
5451
- c = splitter * acytail;
5452
- ahi = c - (c - acytail);
5453
- alo = acytail - ahi;
5454
- c = splitter * bcx;
5455
- bhi = c - (c - bcx);
5456
- blo = bcx - bhi;
5457
- t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
5458
- _i = s0 - t0;
5459
- bvirt = s0 - _i;
5460
- u[0] = s0 - (_i + bvirt) + (bvirt - t0);
5461
- _j = s1 + _i;
5462
- bvirt = _j - s1;
5463
- _0 = s1 - (_j - bvirt) + (_i - bvirt);
5464
- _i = _0 - t1;
5465
- bvirt = _0 - _i;
5466
- u[1] = _0 - (_i + bvirt) + (bvirt - t1);
5467
- u32 = _j + _i;
5468
- bvirt = u32 - _j;
5469
- u[2] = _j - (u32 - bvirt) + (_i - bvirt);
5470
- u[3] = u32;
5471
- const C1len = sum(4, B, 4, u, C1);
5472
- s1 = acx * bcytail;
5473
- c = splitter * acx;
5474
- ahi = c - (c - acx);
5475
- alo = acx - ahi;
5476
- c = splitter * bcytail;
5477
- bhi = c - (c - bcytail);
5478
- blo = bcytail - bhi;
5479
- s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
5480
- t1 = acy * bcxtail;
5481
- c = splitter * acy;
5482
- ahi = c - (c - acy);
5483
- alo = acy - ahi;
5484
- c = splitter * bcxtail;
5485
- bhi = c - (c - bcxtail);
5486
- blo = bcxtail - bhi;
5487
- t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
5488
- _i = s0 - t0;
5489
- bvirt = s0 - _i;
5490
- u[0] = s0 - (_i + bvirt) + (bvirt - t0);
5491
- _j = s1 + _i;
5492
- bvirt = _j - s1;
5493
- _0 = s1 - (_j - bvirt) + (_i - bvirt);
5494
- _i = _0 - t1;
5495
- bvirt = _0 - _i;
5496
- u[1] = _0 - (_i + bvirt) + (bvirt - t1);
5497
- u32 = _j + _i;
5498
- bvirt = u32 - _j;
5499
- u[2] = _j - (u32 - bvirt) + (_i - bvirt);
5500
- u[3] = u32;
5501
- const C2len = sum(C1len, C1, 4, u, C2);
5502
- s1 = acxtail * bcytail;
5503
- c = splitter * acxtail;
5504
- ahi = c - (c - acxtail);
5505
- alo = acxtail - ahi;
5506
- c = splitter * bcytail;
5507
- bhi = c - (c - bcytail);
5508
- blo = bcytail - bhi;
5509
- s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
5510
- t1 = acytail * bcxtail;
5511
- c = splitter * acytail;
5512
- ahi = c - (c - acytail);
5513
- alo = acytail - ahi;
5514
- c = splitter * bcxtail;
5515
- bhi = c - (c - bcxtail);
5516
- blo = bcxtail - bhi;
5517
- t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
5518
- _i = s0 - t0;
5519
- bvirt = s0 - _i;
5520
- u[0] = s0 - (_i + bvirt) + (bvirt - t0);
5521
- _j = s1 + _i;
5522
- bvirt = _j - s1;
5523
- _0 = s1 - (_j - bvirt) + (_i - bvirt);
5524
- _i = _0 - t1;
5525
- bvirt = _0 - _i;
5526
- u[1] = _0 - (_i + bvirt) + (bvirt - t1);
5527
- u32 = _j + _i;
5528
- bvirt = u32 - _j;
5529
- u[2] = _j - (u32 - bvirt) + (_i - bvirt);
5530
- u[3] = u32;
5531
- const Dlen = sum(C2len, C2, 4, u, D);
5532
- return D[Dlen - 1];
5533
- }
5534
- function orient2d(ax, ay, bx, by, cx, cy) {
5535
- const detleft = (ay - cy) * (bx - cx);
5536
- const detright = (ax - cx) * (by - cy);
5537
- const det = detleft - detright;
5538
- const detsum = Math.abs(detleft + detright);
5539
- if (Math.abs(det) >= ccwerrboundA * detsum) return det;
5540
- return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
5541
- }
5542
-
5543
- // ../../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/orient3d.js
5544
- var o3derrboundA = (7 + 56 * epsilon) * epsilon;
5545
- var o3derrboundB = (3 + 28 * epsilon) * epsilon;
5546
- var o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;
5547
- var bc = vec(4);
5548
- var ca = vec(4);
5549
- var ab = vec(4);
5550
- var at_b = vec(4);
5551
- var at_c = vec(4);
5552
- var bt_c = vec(4);
5553
- var bt_a = vec(4);
5554
- var ct_a = vec(4);
5555
- var ct_b = vec(4);
5556
- var bct = vec(8);
5557
- var cat = vec(8);
5558
- var abt = vec(8);
5559
- var u2 = vec(4);
5560
- var _8 = vec(8);
5561
- var _8b = vec(8);
5562
- var _16 = vec(8);
5563
- var _12 = vec(12);
5564
- var fin = vec(192);
5565
- var fin2 = vec(192);
5566
-
5567
- // ../../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/incircle.js
5568
- var iccerrboundA = (10 + 96 * epsilon) * epsilon;
5569
- var iccerrboundB = (4 + 48 * epsilon) * epsilon;
5570
- var iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;
5571
- var bc2 = vec(4);
5572
- var ca2 = vec(4);
5573
- var ab2 = vec(4);
5574
- var aa = vec(4);
5575
- var bb = vec(4);
5576
- var cc = vec(4);
5577
- var u3 = vec(4);
5578
- var v = vec(4);
5579
- var axtbc = vec(8);
5580
- var aytbc = vec(8);
5581
- var bxtca = vec(8);
5582
- var bytca = vec(8);
5583
- var cxtab = vec(8);
5584
- var cytab = vec(8);
5585
- var abt2 = vec(8);
5586
- var bct2 = vec(8);
5587
- var cat2 = vec(8);
5588
- var abtt = vec(4);
5589
- var bctt = vec(4);
5590
- var catt = vec(4);
5591
- var _82 = vec(8);
5592
- var _162 = vec(16);
5593
- var _16b = vec(16);
5594
- var _16c = vec(16);
5595
- var _32 = vec(32);
5596
- var _32b = vec(32);
5597
- var _48 = vec(48);
5598
- var _64 = vec(64);
5599
- var fin3 = vec(1152);
5600
- var fin22 = vec(1152);
5601
-
5602
- // ../../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/insphere.js
5603
- var isperrboundA = (16 + 224 * epsilon) * epsilon;
5604
- var isperrboundB = (5 + 72 * epsilon) * epsilon;
5605
- var isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;
5606
- var ab3 = vec(4);
5607
- var bc3 = vec(4);
5608
- var cd = vec(4);
5609
- var de = vec(4);
5610
- var ea = vec(4);
5611
- var ac = vec(4);
5612
- var bd = vec(4);
5613
- var ce = vec(4);
5614
- var da = vec(4);
5615
- var eb = vec(4);
5616
- var abc = vec(24);
5617
- var bcd = vec(24);
5618
- var cde = vec(24);
5619
- var dea = vec(24);
5620
- var eab = vec(24);
5621
- var abd = vec(24);
5622
- var bce = vec(24);
5623
- var cda = vec(24);
5624
- var deb = vec(24);
5625
- var eac = vec(24);
5626
- var adet = vec(1152);
5627
- var bdet = vec(1152);
5628
- var cdet = vec(1152);
5629
- var ddet = vec(1152);
5630
- var edet = vec(1152);
5631
- var abdet = vec(2304);
5632
- var cddet = vec(2304);
5633
- var cdedet = vec(3456);
5634
- var deter = vec(5760);
5635
- var _83 = vec(8);
5636
- var _8b2 = vec(8);
5637
- var _8c = vec(8);
5638
- var _163 = vec(16);
5639
- var _24 = vec(24);
5640
- var _482 = vec(48);
5641
- var _48b = vec(48);
5642
- var _96 = vec(96);
5643
- var _192 = vec(192);
5644
- var _384x = vec(384);
5645
- var _384y = vec(384);
5646
- var _384z = vec(384);
5647
- var _768 = vec(768);
5648
- var xdet = vec(96);
5649
- var ydet = vec(96);
5650
- var zdet = vec(96);
5651
- var fin4 = vec(1152);
5652
-
5653
- // ../../node_modules/point-in-polygon-hao/dist/esm/index.js
5654
- function pointInPolygon(p, polygon2) {
5655
- var i;
5656
- var ii;
5657
- var k = 0;
5658
- var f;
5659
- var u1;
5660
- var v1;
5661
- var u22;
5662
- var v2;
5663
- var currentP;
5664
- var nextP;
5665
- var x = p[0];
5666
- var y = p[1];
5667
- var numContours = polygon2.length;
5668
- for (i = 0; i < numContours; i++) {
5669
- ii = 0;
5670
- var contour = polygon2[i];
5671
- var contourLen = contour.length - 1;
5672
- currentP = contour[0];
5673
- if (currentP[0] !== contour[contourLen][0] && currentP[1] !== contour[contourLen][1]) {
5674
- throw new Error("First and last coordinates in a ring must be the same");
5675
- }
5676
- u1 = currentP[0] - x;
5677
- v1 = currentP[1] - y;
5678
- for (ii; ii < contourLen; ii++) {
5679
- nextP = contour[ii + 1];
5680
- u22 = nextP[0] - x;
5681
- v2 = nextP[1] - y;
5682
- if (v1 === 0 && v2 === 0) {
5683
- if (u22 <= 0 && u1 >= 0 || u1 <= 0 && u22 >= 0) {
5684
- return 0;
5685
- }
5686
- } else if (v2 >= 0 && v1 <= 0 || v2 <= 0 && v1 >= 0) {
5687
- f = orient2d(u1, u22, v1, v2, 0, 0);
5688
- if (f === 0) {
5689
- return 0;
5690
- }
5691
- if (f > 0 && v2 > 0 && v1 <= 0 || f < 0 && v2 <= 0 && v1 > 0) {
5692
- k++;
5693
- }
5694
- }
5695
- currentP = nextP;
5696
- v1 = v2;
5697
- u1 = u22;
5698
- }
5699
- }
5700
- if (k % 2 === 0) {
5701
- return false;
5702
- }
5703
- return true;
5704
- }
5705
-
5706
- // ../../node_modules/@turf/invariant/dist/esm/index.js
5707
- function getCoord(coord) {
5708
- if (!coord) {
5709
- throw new Error("coord is required");
5710
- }
5711
- if (!Array.isArray(coord)) {
5712
- if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
5713
- return [...coord.geometry.coordinates];
5714
- }
5715
- if (coord.type === "Point") {
5716
- return [...coord.coordinates];
5717
- }
5718
- }
5719
- if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
5720
- return [...coord];
5721
- }
5722
- throw new Error("coord must be GeoJSON Point or an Array of numbers");
5723
- }
5724
- function getGeom(geojson) {
5725
- if (geojson.type === "Feature") {
5726
- return geojson.geometry;
5727
- }
5728
- return geojson;
5729
- }
5730
-
5731
- // ../../node_modules/@turf/boolean-point-in-polygon/dist/esm/index.js
5732
- function booleanPointInPolygon(point2, polygon2, options = {}) {
5733
- if (!point2) {
5734
- throw new Error("point is required");
5735
- }
5736
- if (!polygon2) {
5737
- throw new Error("polygon is required");
5738
- }
5739
- const pt = getCoord(point2);
5740
- const geom = getGeom(polygon2);
5741
- const type = geom.type;
5742
- const bbox2 = polygon2.bbox;
5743
- let polys = geom.coordinates;
5744
- if (bbox2 && inBBox(pt, bbox2) === false) {
5745
- return false;
5746
- }
5747
- if (type === "Polygon") {
5748
- polys = [polys];
5749
- }
5750
- let result = false;
5751
- for (var i = 0; i < polys.length; ++i) {
5752
- const polyResult = pointInPolygon(pt, polys[i]);
5753
- if (polyResult === 0) return options.ignoreBoundary ? false : true;
5754
- else if (polyResult) result = true;
5755
- }
5756
- return result;
5757
- }
5758
- function inBBox(pt, bbox2) {
5759
- return bbox2[0] <= pt[0] && bbox2[1] <= pt[1] && bbox2[2] >= pt[0] && bbox2[3] >= pt[1];
5760
- }
5761
-
5762
5388
  // src/IndoorMap/renderer/utils/findUnitOnPoint.ts
5389
+ var import_boolean_point_in_polygon3 = require("@turf/boolean-point-in-polygon");
5763
5390
  var findUnitOnPoint = (units, point2) => {
5764
5391
  try {
5765
- return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
5392
+ return units.find((unit) => (0, import_boolean_point_in_polygon3.booleanPointInPolygon)(point2, polygon(unit.geometry.coordinates)));
5766
5393
  } catch (err) {
5767
5394
  return null;
5768
5395
  }
@@ -5811,9 +5438,9 @@ var RendererManager = class extends EventTarget {
5811
5438
  const pos = geom?.attributes?.position?.array;
5812
5439
  if (!pos || pos.length === 0) return;
5813
5440
  for (let i = 0; i < pos.length; i++) {
5814
- const v2 = pos[i];
5815
- if (!Number.isFinite(v2)) {
5816
- bad.push({ mesh: obj, index: i, value: v2 });
5441
+ const v = pos[i];
5442
+ if (!Number.isFinite(v)) {
5443
+ bad.push({ mesh: obj, index: i, value: v });
5817
5444
  break;
5818
5445
  }
5819
5446
  }
@@ -5909,7 +5536,7 @@ var RendererManager = class extends EventTarget {
5909
5536
  populate: true
5910
5537
  });
5911
5538
  units.filter(
5912
- (u4) => !["opentobelow", "escalator", "room"].includes(u4.properties.category)
5539
+ (u) => !["opentobelow", "escalator", "room"].includes(u.properties.category)
5913
5540
  ).forEach((unit) => {
5914
5541
  const element = this.elementRenderer.createGeometry(unit);
5915
5542
  if (element) {
@@ -5917,7 +5544,7 @@ var RendererManager = class extends EventTarget {
5917
5544
  this.addElementsToManager(unit.id, _elements, unit.properties.level.properties.ordinal);
5918
5545
  }
5919
5546
  });
5920
- units.filter((u4) => u4.properties.category === "room").forEach((unit) => {
5547
+ units.filter((u) => u.properties.category === "room").forEach((unit) => {
5921
5548
  const openingRelationships = relationships.filter((r) => r.properties.origin?.id === unit.id || r.properties.destination?.id === unit.id);
5922
5549
  const roomOpenings = (0, import_lodash9.compact)(openingRelationships.map((rel) => {
5923
5550
  const openingId = rel?.properties.intermediary[0].id;
@@ -5943,7 +5570,7 @@ var RendererManager = class extends EventTarget {
5943
5570
  this.addElementsToManager(kiosk.id, _elements, kiosk.properties.level.properties.ordinal);
5944
5571
  }
5945
5572
  });
5946
- const escalators = units.filter((u4) => u4.properties.category === "escalator");
5573
+ const escalators = units.filter((u) => u.properties.category === "escalator");
5947
5574
  for (const escalator of escalators) {
5948
5575
  try {
5949
5576
  const escalatorRelationships = relationships.filter((r) => (r.properties?.intermediary || []).some((inter) => inter.id === escalator.id));
@@ -5965,7 +5592,7 @@ var RendererManager = class extends EventTarget {
5965
5592
  const thatLevelOpening = bothOpenings.find((opening) => opening.properties.ordinal !== thisOrdinal);
5966
5593
  const angle = 180 * (1 / Math.PI) * angleBetweenLineStrings(thisLevelOpening.geometry.coordinates, thatLevelOpening.geometry.coordinates);
5967
5594
  const direction = thisOrdinal < thatLevelOpening.properties.ordinal ? "up" : "down";
5968
- const escalatorEntryPoint = (0, import_center3.center)(thisLevelOpening).geometry.coordinates;
5595
+ const escalatorEntryPoint = (0, import_center5.center)(thisLevelOpening).geometry.coordinates;
5969
5596
  const element = await this.elementRenderer.createEscalator(escalator, escalatorEntryPoint, { direction, angle });
5970
5597
  if (element) {
5971
5598
  const _elements = Array.isArray(element) ? element : [element];
@@ -5977,8 +5604,8 @@ var RendererManager = class extends EventTarget {
5977
5604
  }
5978
5605
  const groundLabels = await this.#dataClient.filterByType("label");
5979
5606
  for (const label of groundLabels) {
5980
- const center2 = (0, import_center3.center)(polygon(label.geometry.coordinates)).geometry.coordinates;
5981
- const unit = findUnitOnPoint(units, center2);
5607
+ const center4 = (0, import_center5.center)(polygon(label.geometry.coordinates)).geometry.coordinates;
5608
+ const unit = findUnitOnPoint(units, center4);
5982
5609
  if (unit) {
5983
5610
  const element = this.elementRenderer.createGroundLabel(label, unit);
5984
5611
  if (element) {
@@ -6211,10 +5838,10 @@ var IndoorMap = class extends EventTarget {
6211
5838
  if (!this.options.camera?.defaultView?.center) {
6212
5839
  this.#dataClient.filterByType("venue").then((venues) => {
6213
5840
  this.#venues = venues;
6214
- const venueCenters = (0, import_center4.default)(featureCollection(venues));
5841
+ const venueCenters = (0, import_center6.default)(featureCollection(venues));
6215
5842
  const [x, y] = venueCenters.geometry.coordinates;
6216
- const center2 = new import_maptalks_gl.Coordinate(x, y);
6217
- this.camera.setView({ center: center2, pitch: 60, zoom: 19 });
5843
+ const center4 = new import_maptalks_gl.Coordinate(x, y);
5844
+ this.camera.setView({ center: center4, pitch: 60, zoom: 19 });
6218
5845
  });
6219
5846
  }
6220
5847
  }
@@ -6374,7 +6001,7 @@ var IndoorMap = class extends EventTarget {
6374
6001
  case "opening": {
6375
6002
  switch (category) {
6376
6003
  case "emergencyexit":
6377
- const { geometry: geometry2 } = (0, import_center4.default)(feature2);
6004
+ const { geometry: geometry2 } = (0, import_center6.default)(feature2);
6378
6005
  const markerFeature = {
6379
6006
  ...feature2,
6380
6007
  geometry: geometry2
@@ -6858,6 +6485,7 @@ var IndoorMap = class extends EventTarget {
6858
6485
  GEOJSON_FEATURE_TYPES,
6859
6486
  HIGHLIGHT_LAYER_NAME,
6860
6487
  IMDF_FEATURE_TYPES,
6488
+ IMDF_UNIT_CATEGORIES,
6861
6489
  IndoorMap,
6862
6490
  LAST_USER_LOCATION_ELEMENT_ID_PREFIX,
6863
6491
  LAYERS,