A map is an Entity3D that represents a flat surface displaying one or more layer(s).

Supported layers

Maps support various types of layers.

Color layers

Maps can contain any number of color layers, as well as any number of mask layers.

Color layers are used to display satellite imagery, vector features or any other dataset. Mask layers are used to mask parts of a map (like an alpha channel).

Elevation layers

Up to one elevation layer can be added to a map, to provide features related to elevation, such as terrain deformation, hillshading, contour lines, etc. Without an elevation layer, the map will appear like a flat rectangle on the specified extent.

Note: to benefit from the features given by elevation layers (shading for instance) while keeping a flat map, disable terrain in the TerrainOptions.

💡 If the TerrainOptions.enableCPUTerrain is enabled, the elevation data can be sampled by the getElevation method.

Picking on maps

Maps can be picked like any other 3D entity, using the pick() method.

However, if TerrainOptions.enableCPUTerrain is enabled, then the map provides an alternate methods for: raycasting-based picking, in addition to GPU-based picking.

GPU-based picking

This is the default method for picking maps. When the user calls pick(), the camera's field of view is rendered into a temporary texture, then the pixel(s) around the picked point are analyzed to determine the location of the picked point.

The main advantage of this method is that it ignores transparent pixels of the map (such as no-data elevation pixels, or transparent color layers).

Raycasting-based picking

💡 This method requires that TerrainOptions.enableCPUTerrain is enabled, and that core.picking.PickOptions.gpuPicking is disabled.

This method casts a ray that is then intersected with the map's meshes. The first intersection is returned.

The main advantage of this method is that it's much faster and puts less pressure on the GPU.

Type Parameters

Hierarchy (view full)

Implements

Constructors

Properties

_distance: {
    max: number;
    min: number;
}

Type declaration

  • max: number
  • min: number
_instance: Instance
extent: Extent
hasLayers: true = true

Read-only flag to check if a given object is of type HasLayers.

isEntity: boolean = true

Read-only flag to check if a given object is of type Entity.

isEntity3D: boolean = true

Read-only flag to check if a given object is of type Entity3D.

isMap: boolean = true

Read-only flag to check if a given object is of type Map.

isPickable: true = true
isPickableFeatures: true = true
materialOptions: MaterialOptions
maxSubdivisionLevel: number
onTileCreated: ((map, parent, tile) => void)

Type declaration

    • (map, parent, tile): void
    • Parameters

      • map: this
      • parent: TileMesh
      • tile: TileMesh

      Returns void

ready?: boolean
showOutline: boolean
subdivisionThreshold: number

The global factor that drives SSE (screen space error) computation. The lower this value, the sooner a tile is subdivided. Note: changing this scale to a value less than 1 can drastically increase the number of tiles displayed in the scene, and can even lead to WebGL crashes.

Default Value

1.5
type: string

The name of the type of this object.

userData: UserData

An object that can be used to store custom data about the Entity.

whenReady?: Promise<Map<UserData>>
wireframe: boolean

Displays the map tiles in wireframe.

Accessors

  • get clippingPlanes(): Plane[]
  • Gets or sets the clipping planes set on this entity. Default is null (no clipping planes).

    Note: custom entities must ensure that the materials and shaders used do support the clipping plane feature of three.js. Refer to the three.js documentation for more information.

    Returns Plane[]

  • set clippingPlanes(planes): void
  • Parameters

    • planes: Plane[]

    Returns void

  • get distance(): {
        max: number;
        min: number;
    }
  • Returns {
        max: number;
        min: number;
    }

    • max: number
    • min: number
  • get frozen(): boolean
  • Gets or sets the frozen status of this entity. A frozen entity is still visible but will not be updated automatically.

    Useful for debugging purposes.

    Returns boolean

  • set frozen(v): void
  • Parameters

    • v: boolean

    Returns void

  • get id(): string
  • Gets the unique identifier of this entity.

    Returns string

  • get layerCount(): number
  • Returns the number of layers currently in this object.

    Returns number

  • get loading(): boolean
  • Returns true if this map is currently processing data.

    Returns boolean

  • get object3d(): Object3D<Object3DEventMap>
  • Returns the root object of this entity.

    Returns Object3D<Object3DEventMap>

  • get opacity(): number
  • Gets or sets the opacity of this entity.

    Returns number

  • set opacity(v): void
  • Parameters

    • v: number

    Returns void

  • get progress(): number
  • Gets the loading progress (between 0 and 1) of the map. This is the average progress of all layers in this map. Note: if no layer is present, this will always be 1. Note: This value is only meaningful is loading is true.

    Returns number

  • get renderOrder(): number
  • Gets or sets the render order of this entity.

    Returns number

  • set renderOrder(v): void
  • Parameters

    • v: number

    Returns void

  • get subdivisions(): {
        x: number;
        y: number;
    }
  • Returns {
        x: number;
        y: number;
    }

    • x: number
    • y: number
  • get visible(): boolean
  • Gets or sets the visibility of this entity. A non-visible entity will not be automatically updated.

    Returns boolean

  • set visible(v): void
  • Parameters

    • v: boolean

    Returns void

Methods

  • Adds a layer, then returns the created layer. Before using this method, make sure that the map is added in an instance. If the extent or the projection of the layer is not provided, those values will be inherited from the map.

    Type Parameters

    Parameters

    • layer: TLayer

      the layer to add

    Returns Promise<TLayer>

    a promise resolving when the layer is ready

  • Parameters

    • node: TileMesh

      The node to subdivide.

    Returns boolean

    True if the node can be subdivided.

  • Test whether this entity contains the given object.

    The object may be a component of the entity, or a 3D object.

    Parameters

    • obj: unknown

      The object to test.

    Returns boolean

    true if the entity contains the object.

  • Disposes this map and associated unmanaged resources.

    Note: By default, layers in this map are not automatically disposed, except when disposeLayers is true.

    Parameters

    • options: {
          disposeLayers?: boolean;
      } = ...

      Options.

      • Optional disposeLayers?: boolean

    Returns void

  • Returns an approximated bounding box of this entity in the scene.

    Returns Box3

    the resulting bounding box, or null if it could not be computed.

  • Sample the elevation at the specified coordinate.

    Note: this method does nothing if TerrainOptions.enableCPUTerrain is not enabled, or if no elevation layer is present on the map, or if the sampling coordinate is not inside the map's extent.

    Note: sampling might return more than one sample for any given coordinate. You can sort them by resolution to select the best sample for your needs.

    Parameters

    • options: GetElevationOptions

      The options.

    • result: GetElevationResult = ...

      The result object to populate with the samples. If none is provided, a new empty result is created. The existing samples in the array are not removed. Useful to cumulate samples across different maps.

    Returns GetElevationResult

    The GetElevationResult containing the updated sample array. If the map has no elevation layer or if TerrainOptions.enableCPUTerrain is not enabled, this array is left untouched.

  • Returns the minimal and maximal elevation values in this map, in meters.

    If there is no elevation layer present, returns { min: 0, max: 0 }.

    Returns ElevationRange

    The min/max value.

  • Attached layers expect to receive the visual representation of a layer (= THREE object with a material). So if a layer's update function don't process this kind of object, the layer must provide a getObjectToUpdateForAttachedLayers function that returns the correct object to update for attached layer from the objects returned by preUpdate.

    Parameters

    • obj: any

      the Mesh or the object containing a Mesh. These are the objects returned by preUpdate or update.

    Returns ObjectToUpdate

    an object passed to the update function of attached layers.

  • Moves the specified layer after the other layer in the list.

    Parameters

    Returns void

    Throws

    If the layer is not present in the map.

    Example

    map.addLayer(foo);
    map.addLayer(bar);
    map.addLayer(baz);
    // Layers (back to front) : foo, bar, baz

    map.insertLayerAfter(foo, baz);
    // Layers (back to front) : bar, baz, foo
  • Returns true if this object belongs to this entity.

    Parameters

    • obj: unknown

      The object to test.

    Returns boolean

  • Moves the layer closer to the background.

    Note: this only applies to color layers.

    Parameters

    Returns void

    Throws

    If the layer is not present in the map.

    Example

    map.addLayer(foo);
    map.addLayer(bar);
    map.addLayer(baz);
    // Layers (back to front) : foo, bar, baz

    map.moveLayerDown(baz);
    // Layers (back to front) : foo, baz, bar
  • Moves the layer closer to the foreground.

    Note: this only applies to color layers.

    Parameters

    Returns void

    Throws

    If the layer is not present in the map.

    Example

    map.addLayer(foo);
    map.addLayer(bar);
    map.addLayer(baz);
    // Layers (back to front) : foo, bar, baz

    map.moveLayerUp(foo);
    // Layers (back to front) : bar, foo, baz
  • Applies entity-level setup on a new object.

    Note: this method should be called from the subclassed entity to notify the parent class that a new 3D object has just been created, so that it can be setup with entity-wide parameters.

    Parameters

    • obj: Object3D<Object3DEventMap>

      The object to prepare.

    Returns void

    Example

    // In the subclass
    const obj = new Object3D();

    // Notify the parent class
    this.onObjectCreated(obj);
  • This method is called just before update() to filter and select which elements should be actually updated. For example, in the case of complex entities made of a hierarchy of elements, the entire hierarchy may not need to be updated.

    Use this method to optimize the update step by reducing the number of elements to process.

    Note: if this functions returns nothing, update() will not be called.

    Parameters

    • context: Context

      the update context.

    • changeSources: Set<unknown>

      the objects that triggered an update step. This is useful to filter out unnecessary updates if no sources are relevant to this entity. For example, if one of the sources is a camera that moved during the previous frame, any entity that depends on the camera's field of view should be updated.

    Returns TileMesh[]

    the elements to update during update().

  • Asynchronously preprocess the entity. This method may be overriden to perform any operation that must be done before the entity can be used in the scene, such as fetching metadata about a dataset, etc.

    Returns Promise<void>

    A promise that resolves when the entity is ready to be used.

  • Perform raycasting on visible tiles.

    Parameters

    • raycaster: Raycaster

      The THREE raycaster.

    • intersects: Intersection<TileMesh>[]

      The intersections array to populate with intersections.

    Returns void

  • Removes a layer from the map.

    Parameters

    • layer: Layer<LayerEvents, LayerUserData>

      the layer to remove

    • options: {
          disposeLayer?: boolean;
      } = {}

      The options.

      • Optional disposeLayer?: boolean

        If true, the layer is also disposed.

    Returns boolean

    true if the layer was present, false otherwise.

  • Sets the render state of the map.

    Parameters

    • state: RenderingState

      The new state.

    Returns (() => void)

    The function to revert to the previous state.

      • (): void
      • Returns void

  • This method is called before update to check if the MainLoop should try to update this entity or not. For better performances, it should return false if the entity has no impact on the rendering (e.g. the element is not visible).

    The inherited child can completely ignore this value if it makes sense.

    Returns boolean

    true if should check for update

  • This method is called at the beginning of the update step to determine if we should do a full render of the object. This should be the case if, for instance, the source is the camera.

    You can override this depending on your needs. The inherited child should not ignore this value, it should do a boolean OR, e.g.: return super.shouldFullUpdate(updateSource) || this.contains(updateSource);

    Parameters

    • updateSource: unknown

      Source of change

    Returns boolean

    true if requires a full update of this object

  • This method is called at the beginning of the update step to determine if we should re-render updateSource. Not used when shouldFullUpdate returns true.

    You can override this depending on your needs. The inherited child should not ignore this value, it should do a boolean OR, e.g.: return super.shouldUpdate(updateSource) || this.contains(updateSource);

    Parameters

    • updateSource: unknown

      Source of change

    Returns boolean

    true if requires an update of updateSource

  • Sort the color layers according to the comparator function.

    Parameters

    Returns void

  • Traverses all objects in the hierarchy of this entity.

    Parameters

    • callback: ((arg0) => void)

      The callback.

        • (arg0): void
        • Parameters

          • arg0: Object3D<Object3DEventMap>

          Returns void

    • root: Object3D<Object3DEventMap> = undefined

      The traversal root. If undefined, the traversal starts at the root object of this entity.

    Returns void

  • Traverses all materials in the hierarchy of this entity.

    Parameters

    • callback: ((arg0) => void)

      The callback.

        • (arg0): void
        • Parameters

          • arg0: Material

          Returns void

    • root: Object3D<Object3DEventMap> = undefined

      The traversal root. If undefined, the traversal starts at the root object of this entity.

    Returns void

  • Traverses all meshes in the hierarchy of this entity.

    Parameters

    • callback: ((arg0) => void)

      The callback.

        • (arg0): void
        • Parameters

          • arg0: Mesh<BufferGeometry<NormalBufferAttributes>, Material | Material[], Object3DEventMap>

          Returns void

    • root: Object3D<Object3DEventMap> = undefined

      The raversal root. If undefined, the traversal starts at the root object of this entity.

    Returns void

  • Traverses all tiles in the hierarchy of this entity.

    Parameters

    • callback: ((arg0) => void)

      The callback.

        • (arg0): void
        • Parameters

          • arg0: TileMesh

          Returns void

    • root: Object3D<Object3DEventMap> = undefined

      The raversal root. If undefined, the traversal starts at the root object of this entity.

    Returns void

  • Performs an update on an element of the entity.

    Note: this method will be called for each element returned by preUpdate().

    Parameters

    • context: Context

      the update context. This is the same object that the entity whose update() is being called.

    • node: TileMesh

      the element to update. This is one of the elements returned by preUpdate.

    Returns unknown[]

    New elements to update