venue-js 1.3.1 → 1.4.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +20 -7
- package/dist/index.d.ts +20 -7
- package/dist/index.js +77 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +77 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -372,6 +372,7 @@ var createPopulator = ({
|
|
|
372
372
|
};
|
|
373
373
|
const populateAnchor = async (anchor) => {
|
|
374
374
|
const unit = await internalFindById(anchor.properties.unit_id);
|
|
375
|
+
const venue = await internalFindById(unit.properties.venue_id);
|
|
375
376
|
const level = await internalFindById(unit.properties.level_id);
|
|
376
377
|
const sections = await internalFilterByType("section");
|
|
377
378
|
const section = sections.find((section2) => booleanWithin(anchor, section2));
|
|
@@ -381,7 +382,9 @@ var createPopulator = ({
|
|
|
381
382
|
...anchor.properties,
|
|
382
383
|
level: await populateLevel(level),
|
|
383
384
|
unit: await populateUnit(unit),
|
|
384
|
-
section: section ? await populateSection(section) : null
|
|
385
|
+
section: section ? await populateSection(section) : null,
|
|
386
|
+
venue: await populateVenue(venue),
|
|
387
|
+
ordinal: level.properties.ordinal
|
|
385
388
|
}
|
|
386
389
|
};
|
|
387
390
|
};
|
|
@@ -2683,7 +2686,7 @@ var CameraManager = class {
|
|
|
2683
2686
|
// src/IndoorMap/renderer/RendererManager.ts
|
|
2684
2687
|
import { min, compact as compact3, isFunction } from "lodash-es";
|
|
2685
2688
|
import { center as turfCenter2 } from "@turf/center";
|
|
2686
|
-
import * as
|
|
2689
|
+
import * as THREE4 from "three";
|
|
2687
2690
|
|
|
2688
2691
|
// src/IndoorMap/renderer/3d/Element3DRenderer.ts
|
|
2689
2692
|
import * as maptalks4 from "maptalks-gl";
|
|
@@ -3032,7 +3035,7 @@ var DEFAULT_POLYGON_OPTION = {
|
|
|
3032
3035
|
offset: 0,
|
|
3033
3036
|
altitude: 0
|
|
3034
3037
|
};
|
|
3035
|
-
var get3DRendererOption = (featureType, category, options) => {
|
|
3038
|
+
var get3DRendererOption = (featureType, category, options = {}) => {
|
|
3036
3039
|
try {
|
|
3037
3040
|
const option = options[featureType] ?? element3DRendererOptions[featureType];
|
|
3038
3041
|
return (category && option.byCategory?.[category]) ?? option?.default ?? DEFAULT_POLYGON_OPTION;
|
|
@@ -3493,6 +3496,12 @@ var Marker2DRenderer = class extends EventTarget {
|
|
|
3493
3496
|
marker.addTo(this.map);
|
|
3494
3497
|
return marker;
|
|
3495
3498
|
};
|
|
3499
|
+
createTextMarker = (position, label, options) => {
|
|
3500
|
+
return null;
|
|
3501
|
+
};
|
|
3502
|
+
createImageMarker = (position, src, options) => {
|
|
3503
|
+
return null;
|
|
3504
|
+
};
|
|
3496
3505
|
removeMarker = (marker) => {
|
|
3497
3506
|
marker.remove();
|
|
3498
3507
|
};
|
|
@@ -3504,6 +3513,7 @@ var Marker2DRenderer = class extends EventTarget {
|
|
|
3504
3513
|
|
|
3505
3514
|
// src/IndoorMap/renderer/3d/Marker3DRenderer.ts
|
|
3506
3515
|
import * as maptalks7 from "maptalks-gl";
|
|
3516
|
+
import * as THREE3 from "three";
|
|
3507
3517
|
|
|
3508
3518
|
// src/IndoorMap/renderer/3d/objects/TextSpriteMarker.ts
|
|
3509
3519
|
import { Coordinate as Coordinate2, Util as Util4 } from "maptalks";
|
|
@@ -3703,21 +3713,35 @@ var TextSpriteMarker = class extends BaseObject6 {
|
|
|
3703
3713
|
};
|
|
3704
3714
|
|
|
3705
3715
|
// src/IndoorMap/renderer/3d/Marker3DRenderer.ts
|
|
3706
|
-
var HEIGHT_METER2 = 4;
|
|
3707
|
-
var MULTIORDINAL_HEIGHT_METER3 = 9;
|
|
3708
3716
|
var Marker3DRenderer = class extends EventTarget {
|
|
3709
3717
|
isReady = false;
|
|
3710
3718
|
threeLayer;
|
|
3711
3719
|
map;
|
|
3712
|
-
materialByKey;
|
|
3713
3720
|
constructor(map, options, layer) {
|
|
3714
3721
|
super();
|
|
3715
3722
|
this.map = map;
|
|
3716
3723
|
this.threeLayer = layer;
|
|
3717
3724
|
}
|
|
3718
|
-
|
|
3725
|
+
createPointMaterialFromSvg(svgPath, size = 40) {
|
|
3726
|
+
return new THREE3.PointsMaterial({
|
|
3727
|
+
size,
|
|
3728
|
+
sizeAttenuation: false,
|
|
3729
|
+
// Always same size in screen pixels (Screen pixel)
|
|
3730
|
+
// color: fillStyle,
|
|
3731
|
+
alphaTest: 0.5,
|
|
3732
|
+
// vertexColors: THREE.VertexColors,
|
|
3733
|
+
// color: 0xffffff,
|
|
3734
|
+
transparent: true,
|
|
3735
|
+
blending: THREE3.NormalBlending,
|
|
3736
|
+
depthTest: true,
|
|
3737
|
+
// POI is hidden behind building
|
|
3738
|
+
depthWrite: true,
|
|
3739
|
+
map: new THREE3.TextureLoader().load(svgPath)
|
|
3740
|
+
});
|
|
3741
|
+
}
|
|
3742
|
+
createTextMarker = (position, label, options) => {
|
|
3719
3743
|
const combinedOptions = {
|
|
3720
|
-
altitude:
|
|
3744
|
+
altitude: 0,
|
|
3721
3745
|
text: label,
|
|
3722
3746
|
...options ?? {}
|
|
3723
3747
|
};
|
|
@@ -3726,17 +3750,37 @@ var Marker3DRenderer = class extends EventTarget {
|
|
|
3726
3750
|
this.threeLayer.addMesh([marker]);
|
|
3727
3751
|
return marker;
|
|
3728
3752
|
};
|
|
3729
|
-
createImageMarker = () => {
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3753
|
+
createImageMarker = (position, src, options) => {
|
|
3754
|
+
const [lng, lat] = position;
|
|
3755
|
+
let meshes = [];
|
|
3756
|
+
const height = options.height ?? 0;
|
|
3757
|
+
const { leg, ...markerOptions } = options;
|
|
3758
|
+
const { color: legColor = "#000000", ...legOptions } = leg ?? {};
|
|
3759
|
+
const material = this.createPointMaterialFromSvg(src, 40);
|
|
3760
|
+
const marker = this.threeLayer.toPoint(new maptalks7.Coordinate(lng, lat), { height, ...markerOptions }, material);
|
|
3761
|
+
marker.getObject3d().renderOrder = 10;
|
|
3762
|
+
meshes.push(marker);
|
|
3763
|
+
if (options.leg) {
|
|
3764
|
+
const legMaterial = new THREE3.MeshLambertMaterial({ color: legColor, transparent: true });
|
|
3765
|
+
const leg2 = this.threeLayer.toBar(new maptalks7.Coordinate(lng, lat), { ...legOptions, height }, legMaterial);
|
|
3766
|
+
const legObj = leg2.getObject3d();
|
|
3767
|
+
legObj.traverse((o) => {
|
|
3768
|
+
if (o.isMesh && o.material) {
|
|
3769
|
+
o.material.depthWrite = false;
|
|
3770
|
+
o.material.depthTest = true;
|
|
3771
|
+
o.renderOrder = 0;
|
|
3772
|
+
}
|
|
3773
|
+
});
|
|
3774
|
+
meshes = [leg2, ...meshes];
|
|
3775
|
+
}
|
|
3776
|
+
this.threeLayer.addMesh(meshes);
|
|
3777
|
+
return meshes;
|
|
3733
3778
|
};
|
|
3734
3779
|
removeMarker = (marker) => {
|
|
3735
3780
|
marker.remove();
|
|
3736
3781
|
};
|
|
3737
3782
|
showMarkers(elements, ordinalDiff = 0) {
|
|
3738
3783
|
elements.forEach((element) => {
|
|
3739
|
-
element.setAltitude(ordinalDiff * MULTIORDINAL_HEIGHT_METER3);
|
|
3740
3784
|
element.show();
|
|
3741
3785
|
});
|
|
3742
3786
|
}
|
|
@@ -4275,7 +4319,11 @@ function inBBox(pt, bbox2) {
|
|
|
4275
4319
|
|
|
4276
4320
|
// src/IndoorMap/renderer/utils/findUnitOnPoint.ts
|
|
4277
4321
|
var findUnitOnPoint = (units, point2) => {
|
|
4278
|
-
|
|
4322
|
+
try {
|
|
4323
|
+
return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
|
|
4324
|
+
} catch (err) {
|
|
4325
|
+
return null;
|
|
4326
|
+
}
|
|
4279
4327
|
};
|
|
4280
4328
|
|
|
4281
4329
|
// src/IndoorMap/renderer/RendererManager.ts
|
|
@@ -4345,13 +4393,13 @@ var RendererManager = class extends EventTarget {
|
|
|
4345
4393
|
}
|
|
4346
4394
|
return bad;
|
|
4347
4395
|
}
|
|
4348
|
-
const ambientLight = new
|
|
4396
|
+
const ambientLight = new THREE4.AmbientLight(16777215, 0.3);
|
|
4349
4397
|
scene.add(ambientLight);
|
|
4350
4398
|
const dirColor = 16777215;
|
|
4351
|
-
const dllight = new
|
|
4399
|
+
const dllight = new THREE4.DirectionalLight(dirColor, 0.8);
|
|
4352
4400
|
dllight.position.set(0, -10, 20).normalize();
|
|
4353
4401
|
scene.add(dllight);
|
|
4354
|
-
const hemi = new
|
|
4402
|
+
const hemi = new THREE4.HemisphereLight(16777215, 4473924, 0.4);
|
|
4355
4403
|
scene.add(hemi);
|
|
4356
4404
|
_this.elementRenderer = new Element3DRenderer(map, options.elements);
|
|
4357
4405
|
_this.markerRenderer = new Marker3DRenderer(map, {}, threeLayer);
|
|
@@ -4434,7 +4482,7 @@ var RendererManager = class extends EventTarget {
|
|
|
4434
4482
|
return openings.find((o) => o.id === openingId);
|
|
4435
4483
|
}));
|
|
4436
4484
|
const innerElements = this.elementRenderer.createGeometry(unit);
|
|
4437
|
-
const wallElements =
|
|
4485
|
+
const wallElements = [];
|
|
4438
4486
|
if (innerElements || wallElements) {
|
|
4439
4487
|
const _innerElements = Array.isArray(innerElements) ? innerElements : [innerElements];
|
|
4440
4488
|
const _wallElements = Array.isArray(wallElements) ? wallElements : [wallElements];
|
|
@@ -4489,10 +4537,12 @@ var RendererManager = class extends EventTarget {
|
|
|
4489
4537
|
for (const label of groundLabels) {
|
|
4490
4538
|
const center2 = turfCenter2(polygon(label.geometry.coordinates)).geometry.coordinates;
|
|
4491
4539
|
const unit = findUnitOnPoint(units, center2);
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4540
|
+
if (unit) {
|
|
4541
|
+
const element = this.elementRenderer.createGroundLabel(label, unit);
|
|
4542
|
+
if (element) {
|
|
4543
|
+
const _elements = Array.isArray(element) ? element : [element];
|
|
4544
|
+
this.addElementsToManager(label.id, _elements, label.properties.ordinal);
|
|
4545
|
+
}
|
|
4496
4546
|
}
|
|
4497
4547
|
}
|
|
4498
4548
|
if (this.options.type === "3D") {
|
|
@@ -4574,10 +4624,11 @@ var RendererManager = class extends EventTarget {
|
|
|
4574
4624
|
this.markerRenderer.hideMarkers(markers, ordinal);
|
|
4575
4625
|
}
|
|
4576
4626
|
};
|
|
4577
|
-
createMarker(coordinate, ordinal,
|
|
4578
|
-
const
|
|
4627
|
+
createMarker(type, coordinate, ordinal, textOrPath, options) {
|
|
4628
|
+
const meshes = type === "text" ? this.markerRenderer.createTextMarker(coordinate, textOrPath, options) : this.markerRenderer.createImageMarker(coordinate, textOrPath, options);
|
|
4579
4629
|
const markerId = `${this.markersMap.size + 1}`;
|
|
4580
|
-
|
|
4630
|
+
const markerMeshes = Array.isArray(meshes) ? meshes : [meshes];
|
|
4631
|
+
this._addMarkersToManager(markerId, markerMeshes, ordinal);
|
|
4581
4632
|
}
|
|
4582
4633
|
clearMarkers() {
|
|
4583
4634
|
for (const [markerId, marker] of this.markersMap) {
|
|
@@ -4717,6 +4768,7 @@ var IndoorMap = class extends EventTarget {
|
|
|
4717
4768
|
this.#dataClient = value;
|
|
4718
4769
|
if (!this.options.camera?.defaultView?.center) {
|
|
4719
4770
|
this.#dataClient.filterByType("venue").then((venues) => {
|
|
4771
|
+
this.#venues = venues;
|
|
4720
4772
|
const venueCenters = turfCenter3(featureCollection(venues));
|
|
4721
4773
|
const [x, y] = venueCenters.geometry.coordinates;
|
|
4722
4774
|
const center2 = new Coordinate4(x, y);
|