venue-js 1.3.1 → 1.4.0-next.1

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 CHANGED
@@ -8,7 +8,7 @@ import { Map, Coordinate as Coordinate$1 } from 'maptalks-gl';
8
8
  import { BaseObject, ThreeLayer } from 'maptalks.three';
9
9
  import * as maptalks from 'maptalks';
10
10
  import { Coordinate, Extent, Marker, ui, LineString as LineString$1, Polygon as Polygon$1, MultiPolygon as MultiPolygon$1, MultiLineString } from 'maptalks';
11
- import { BaseObjectOptionType, ExtrudePolygonOptionType, ExtrudeLineOptionType } from 'maptalks.three/dist/type';
11
+ import { BaseObjectOptionType, BarOptionType, ExtrudePolygonOptionType, ExtrudeLineOptionType } from 'maptalks.three/dist/type';
12
12
  import { PolygonOptionsType } from 'maptalks/dist/geometry/Polygon';
13
13
  import { LineStringOptionsType } from 'maptalks/dist/geometry/LineString';
14
14
  import { MapViewType, MapAnimationOptionsType, MapPaddingType } from 'maptalks/dist/map/Map';
@@ -827,6 +827,15 @@ declare class TextSpriteMarker extends BaseObject {
827
827
  setAltitude(altitude: number): this;
828
828
  }
829
829
 
830
+ type ImageMarkerOptions = BaseObjectOptionType & {
831
+ src: string;
832
+ bottomHeight?: number;
833
+ leg?: Omit<BarOptionType, 'height'> & {
834
+ color: string;
835
+ };
836
+ };
837
+ type AnyMarkerOptions = TextMarkerOptions | ImageMarkerOptions;
838
+
830
839
  type Stop = [zoom: number, value: number];
831
840
  type MapElement = maptalks.Geometry | BaseObject;
832
841
  /** 2D */
@@ -868,17 +877,15 @@ type BaseRenderManagerOptions = {
868
877
  };
869
878
  type RendererManagerOptions = BaseRenderManagerOptions & {
870
879
  type: "2D";
871
- elements: Element2DRendererOptions;
880
+ elements?: Element2DRendererOptions;
872
881
  } | BaseRenderManagerOptions & {
873
882
  type: "3D";
874
- elements: Element3DRendererOptions;
883
+ elements?: Element3DRendererOptions;
875
884
  };
876
885
  type HighlightElementOptions = {
877
886
  reset: boolean;
878
887
  };
879
888
 
880
- type AnyMarkerOptions = TextMarkerOptions;
881
-
882
889
  declare class RendererManager extends EventTarget {
883
890
  #private;
884
891
  map: maptalks$1.Map;
@@ -906,7 +913,7 @@ declare class RendererManager extends EventTarget {
906
913
  * ======================================================================== */
907
914
  _getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks$1.ui.UIMarker[];
908
915
  _addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
909
- createMarker(coordinate: Position, ordinal: number, text: string, options: AnyMarkerOptions): void;
916
+ createMarker(type: 'text' | 'image', coordinate: Position, ordinal: number, textOrPath: string, options: AnyMarkerOptions): void;
910
917
  clearMarkers(): void;
911
918
  }
912
919
 
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ import { Map, Coordinate as Coordinate$1 } from 'maptalks-gl';
8
8
  import { BaseObject, ThreeLayer } from 'maptalks.three';
9
9
  import * as maptalks from 'maptalks';
10
10
  import { Coordinate, Extent, Marker, ui, LineString as LineString$1, Polygon as Polygon$1, MultiPolygon as MultiPolygon$1, MultiLineString } from 'maptalks';
11
- import { BaseObjectOptionType, ExtrudePolygonOptionType, ExtrudeLineOptionType } from 'maptalks.three/dist/type';
11
+ import { BaseObjectOptionType, BarOptionType, ExtrudePolygonOptionType, ExtrudeLineOptionType } from 'maptalks.three/dist/type';
12
12
  import { PolygonOptionsType } from 'maptalks/dist/geometry/Polygon';
13
13
  import { LineStringOptionsType } from 'maptalks/dist/geometry/LineString';
14
14
  import { MapViewType, MapAnimationOptionsType, MapPaddingType } from 'maptalks/dist/map/Map';
@@ -827,6 +827,15 @@ declare class TextSpriteMarker extends BaseObject {
827
827
  setAltitude(altitude: number): this;
828
828
  }
829
829
 
830
+ type ImageMarkerOptions = BaseObjectOptionType & {
831
+ src: string;
832
+ bottomHeight?: number;
833
+ leg?: Omit<BarOptionType, 'height'> & {
834
+ color: string;
835
+ };
836
+ };
837
+ type AnyMarkerOptions = TextMarkerOptions | ImageMarkerOptions;
838
+
830
839
  type Stop = [zoom: number, value: number];
831
840
  type MapElement = maptalks.Geometry | BaseObject;
832
841
  /** 2D */
@@ -868,17 +877,15 @@ type BaseRenderManagerOptions = {
868
877
  };
869
878
  type RendererManagerOptions = BaseRenderManagerOptions & {
870
879
  type: "2D";
871
- elements: Element2DRendererOptions;
880
+ elements?: Element2DRendererOptions;
872
881
  } | BaseRenderManagerOptions & {
873
882
  type: "3D";
874
- elements: Element3DRendererOptions;
883
+ elements?: Element3DRendererOptions;
875
884
  };
876
885
  type HighlightElementOptions = {
877
886
  reset: boolean;
878
887
  };
879
888
 
880
- type AnyMarkerOptions = TextMarkerOptions;
881
-
882
889
  declare class RendererManager extends EventTarget {
883
890
  #private;
884
891
  map: maptalks$1.Map;
@@ -906,7 +913,7 @@ declare class RendererManager extends EventTarget {
906
913
  * ======================================================================== */
907
914
  _getMarkersByOrdinal: (ordinal: number) => BaseObject[] | maptalks$1.ui.UIMarker[];
908
915
  _addMarkersToManager: (id: any, markers: any, ordinal: any) => void;
909
- createMarker(coordinate: Position, ordinal: number, text: string, options: AnyMarkerOptions): void;
916
+ createMarker(type: 'text' | 'image', coordinate: Position, ordinal: number, textOrPath: string, options: AnyMarkerOptions): void;
910
917
  clearMarkers(): void;
911
918
  }
912
919
 
package/dist/index.js CHANGED
@@ -2739,7 +2739,7 @@ var CameraManager = class {
2739
2739
  // src/IndoorMap/renderer/RendererManager.ts
2740
2740
  var import_lodash_es4 = require("lodash-es");
2741
2741
  var import_center3 = require("@turf/center");
2742
- var THREE3 = __toESM(require("three"));
2742
+ var THREE4 = __toESM(require("three"));
2743
2743
 
2744
2744
  // src/IndoorMap/renderer/3d/Element3DRenderer.ts
2745
2745
  var maptalks4 = __toESM(require("maptalks-gl"));
@@ -3084,7 +3084,7 @@ var DEFAULT_POLYGON_OPTION = {
3084
3084
  offset: 0,
3085
3085
  altitude: 0
3086
3086
  };
3087
- var get3DRendererOption = (featureType, category, options) => {
3087
+ var get3DRendererOption = (featureType, category, options = {}) => {
3088
3088
  try {
3089
3089
  const option = options[featureType] ?? element3DRendererOptions[featureType];
3090
3090
  return (category && option.byCategory?.[category]) ?? option?.default ?? DEFAULT_POLYGON_OPTION;
@@ -3545,6 +3545,12 @@ var Marker2DRenderer = class extends EventTarget {
3545
3545
  marker.addTo(this.map);
3546
3546
  return marker;
3547
3547
  };
3548
+ createTextMarker = (position, label, options) => {
3549
+ return null;
3550
+ };
3551
+ createImageMarker = (position, src, options) => {
3552
+ return null;
3553
+ };
3548
3554
  removeMarker = (marker) => {
3549
3555
  marker.remove();
3550
3556
  };
@@ -3556,6 +3562,7 @@ var Marker2DRenderer = class extends EventTarget {
3556
3562
 
3557
3563
  // src/IndoorMap/renderer/3d/Marker3DRenderer.ts
3558
3564
  var maptalks7 = __toESM(require("maptalks-gl"));
3565
+ var THREE3 = __toESM(require("three"));
3559
3566
 
3560
3567
  // src/IndoorMap/renderer/3d/objects/TextSpriteMarker.ts
3561
3568
  var import_maptalks8 = require("maptalks");
@@ -3755,21 +3762,35 @@ var TextSpriteMarker = class extends import_maptalks9.BaseObject {
3755
3762
  };
3756
3763
 
3757
3764
  // src/IndoorMap/renderer/3d/Marker3DRenderer.ts
3758
- var HEIGHT_METER2 = 4;
3759
- var MULTIORDINAL_HEIGHT_METER3 = 9;
3760
3765
  var Marker3DRenderer = class extends EventTarget {
3761
3766
  isReady = false;
3762
3767
  threeLayer;
3763
3768
  map;
3764
- materialByKey;
3765
3769
  constructor(map, options, layer) {
3766
3770
  super();
3767
3771
  this.map = map;
3768
3772
  this.threeLayer = layer;
3769
3773
  }
3770
- createTextMarker = (position, ordinal, label, options) => {
3774
+ createPointMaterialFromSvg(svgPath, size = 40) {
3775
+ return new THREE3.PointsMaterial({
3776
+ size,
3777
+ sizeAttenuation: false,
3778
+ // Always same size in screen pixels (Screen pixel)
3779
+ // color: fillStyle,
3780
+ alphaTest: 0.5,
3781
+ // vertexColors: THREE.VertexColors,
3782
+ // color: 0xffffff,
3783
+ transparent: true,
3784
+ blending: THREE3.NormalBlending,
3785
+ depthTest: true,
3786
+ // POI is hidden behind building
3787
+ depthWrite: true,
3788
+ map: new THREE3.TextureLoader().load(svgPath)
3789
+ });
3790
+ }
3791
+ createTextMarker = (position, label, options) => {
3771
3792
  const combinedOptions = {
3772
- altitude: ordinal * HEIGHT_METER2,
3793
+ altitude: 0,
3773
3794
  text: label,
3774
3795
  ...options ?? {}
3775
3796
  };
@@ -3778,17 +3799,37 @@ var Marker3DRenderer = class extends EventTarget {
3778
3799
  this.threeLayer.addMesh([marker]);
3779
3800
  return marker;
3780
3801
  };
3781
- createImageMarker = () => {
3782
- };
3783
- createMarker = (coordinates, ordinal, label, options) => {
3784
- return this.createTextMarker(coordinates, ordinal, label, options);
3802
+ createImageMarker = (position, src, options) => {
3803
+ const [lng, lat] = position;
3804
+ let meshes = [];
3805
+ const height = options.height ?? 0;
3806
+ const { leg, ...markerOptions } = options;
3807
+ const { color: legColor = "#000000", ...legOptions } = leg ?? {};
3808
+ const material = this.createPointMaterialFromSvg(src, 40);
3809
+ const marker = this.threeLayer.toPoint(new maptalks7.Coordinate(lng, lat), { height, ...markerOptions }, material);
3810
+ marker.getObject3d().renderOrder = 10;
3811
+ meshes.push(marker);
3812
+ if (options.leg) {
3813
+ const legMaterial = new THREE3.MeshLambertMaterial({ color: legColor, transparent: true });
3814
+ const leg2 = this.threeLayer.toBar(new maptalks7.Coordinate(lng, lat), { ...legOptions, height }, legMaterial);
3815
+ const legObj = leg2.getObject3d();
3816
+ legObj.traverse((o) => {
3817
+ if (o.isMesh && o.material) {
3818
+ o.material.depthWrite = false;
3819
+ o.material.depthTest = true;
3820
+ o.renderOrder = 0;
3821
+ }
3822
+ });
3823
+ meshes = [leg2, ...meshes];
3824
+ }
3825
+ this.threeLayer.addMesh(meshes);
3826
+ return meshes;
3785
3827
  };
3786
3828
  removeMarker = (marker) => {
3787
3829
  marker.remove();
3788
3830
  };
3789
3831
  showMarkers(elements, ordinalDiff = 0) {
3790
3832
  elements.forEach((element) => {
3791
- element.setAltitude(ordinalDiff * MULTIORDINAL_HEIGHT_METER3);
3792
3833
  element.show();
3793
3834
  });
3794
3835
  }
@@ -4327,7 +4368,11 @@ function inBBox(pt, bbox2) {
4327
4368
 
4328
4369
  // src/IndoorMap/renderer/utils/findUnitOnPoint.ts
4329
4370
  var findUnitOnPoint = (units, point2) => {
4330
- return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
4371
+ try {
4372
+ return units.find((unit) => booleanPointInPolygon(point2, polygon(unit.geometry.coordinates)));
4373
+ } catch (err) {
4374
+ return null;
4375
+ }
4331
4376
  };
4332
4377
 
4333
4378
  // src/IndoorMap/renderer/RendererManager.ts
@@ -4397,13 +4442,13 @@ var RendererManager = class extends EventTarget {
4397
4442
  }
4398
4443
  return bad;
4399
4444
  }
4400
- const ambientLight = new THREE3.AmbientLight(16777215, 0.3);
4445
+ const ambientLight = new THREE4.AmbientLight(16777215, 0.3);
4401
4446
  scene.add(ambientLight);
4402
4447
  const dirColor = 16777215;
4403
- const dllight = new THREE3.DirectionalLight(dirColor, 0.8);
4448
+ const dllight = new THREE4.DirectionalLight(dirColor, 0.8);
4404
4449
  dllight.position.set(0, -10, 20).normalize();
4405
4450
  scene.add(dllight);
4406
- const hemi = new THREE3.HemisphereLight(16777215, 4473924, 0.4);
4451
+ const hemi = new THREE4.HemisphereLight(16777215, 4473924, 0.4);
4407
4452
  scene.add(hemi);
4408
4453
  _this.elementRenderer = new Element3DRenderer(map, options.elements);
4409
4454
  _this.markerRenderer = new Marker3DRenderer(map, {}, threeLayer);
@@ -4486,7 +4531,7 @@ var RendererManager = class extends EventTarget {
4486
4531
  return openings.find((o) => o.id === openingId);
4487
4532
  }));
4488
4533
  const innerElements = this.elementRenderer.createGeometry(unit);
4489
- const wallElements = this.elementRenderer.createRoomWall(unit, roomOpenings);
4534
+ const wallElements = [];
4490
4535
  if (innerElements || wallElements) {
4491
4536
  const _innerElements = Array.isArray(innerElements) ? innerElements : [innerElements];
4492
4537
  const _wallElements = Array.isArray(wallElements) ? wallElements : [wallElements];
@@ -4541,10 +4586,12 @@ var RendererManager = class extends EventTarget {
4541
4586
  for (const label of groundLabels) {
4542
4587
  const center2 = (0, import_center3.center)(polygon(label.geometry.coordinates)).geometry.coordinates;
4543
4588
  const unit = findUnitOnPoint(units, center2);
4544
- const element = this.elementRenderer.createGroundLabel(label, unit);
4545
- if (element) {
4546
- const _elements = Array.isArray(element) ? element : [element];
4547
- this.addElementsToManager(label.id, _elements, label.properties.ordinal);
4589
+ if (unit) {
4590
+ const element = this.elementRenderer.createGroundLabel(label, unit);
4591
+ if (element) {
4592
+ const _elements = Array.isArray(element) ? element : [element];
4593
+ this.addElementsToManager(label.id, _elements, label.properties.ordinal);
4594
+ }
4548
4595
  }
4549
4596
  }
4550
4597
  if (this.options.type === "3D") {
@@ -4626,10 +4673,11 @@ var RendererManager = class extends EventTarget {
4626
4673
  this.markerRenderer.hideMarkers(markers, ordinal);
4627
4674
  }
4628
4675
  };
4629
- createMarker(coordinate, ordinal, text, options) {
4630
- const marker = this.markerRenderer.createMarker(coordinate, ordinal, text, options);
4676
+ createMarker(type, coordinate, ordinal, textOrPath, options) {
4677
+ const meshes = type === "text" ? this.markerRenderer.createTextMarker(coordinate, textOrPath, options) : this.markerRenderer.createImageMarker(coordinate, textOrPath, options);
4631
4678
  const markerId = `${this.markersMap.size + 1}`;
4632
- this._addMarkersToManager(markerId, [marker], ordinal);
4679
+ const markerMeshes = Array.isArray(meshes) ? meshes : [meshes];
4680
+ this._addMarkersToManager(markerId, markerMeshes, ordinal);
4633
4681
  }
4634
4682
  clearMarkers() {
4635
4683
  for (const [markerId, marker] of this.markersMap) {
@@ -4769,6 +4817,7 @@ var IndoorMap = class extends EventTarget {
4769
4817
  this.#dataClient = value;
4770
4818
  if (!this.options.camera?.defaultView?.center) {
4771
4819
  this.#dataClient.filterByType("venue").then((venues) => {
4820
+ this.#venues = venues;
4772
4821
  const venueCenters = (0, import_center4.default)(featureCollection(venues));
4773
4822
  const [x, y] = venueCenters.geometry.coordinates;
4774
4823
  const center2 = new import_maptalks_gl.Coordinate(x, y);