Class FeatureCollection

A FeatureCollection is an Entity that manages 2.5D features as 3D meshes in giro3D scene.

In this context, 2.5D means that there is only one Z per x,y coordinates in the source data. So this deals with lines, polyline, (multi)polygons and points.

This entity will represent them as 3D object as-is, but an elevation can be set (see options.elevation in the constructor), if not already in the source coordinates.

At the moment, this entity accepts every openlayers source that returns features.

NOTE: if your source doesn't have a notion of level of detail, like a WFS server, you must choose one level where data will be downloaded. The level giving the best user experience depends on the data source. You must configure both minLevel and maxLevel to this level.

Examples:

import VectorSource from 'ol/source/Vector.js';
import FeatureCollection from '@giro3d/giro3d/entities/FeatureCollection';

const vectorSource = new VectorSource({
// ...
});
const featureCollection = new FeatureCollection('features', {
source: vectorSource
minLevel: 10,
maxLevel: 10,
elevation: (feature) => feat.getProperties().elevation,
});

instance.add(featureCollection);

Related examples:

Hierarchy

Constructors

  • Construct a FeatureCollection.

    Parameters

    • id: string

      The unique identifier of this FeatureCollection

    • Optional options: {
          dataProjection?: string;
          elevation?: number | number[] | FeatureElevationCallback;
          extent: Extent;
          extrusionOffset?: number | number[] | FeatureExtrusionOffsetCallback;
          material?: Material;
          maxLevel?: number;
          minLevel?: number;
          object3d?: Object3D<Object3DEventMap>;
          onMeshCreated?: OnMeshCreatedCallback;
          onTileCreated?: OnTileCreatedCallback;
          source: VectorSource<Geometry>;
          style?: FeatureStyle | FeatureStyleCallback;
      }

      Constructor options.

      • Optional dataProjection?: string

        The EPSG code for the projections of the features. If null or empty, no reprojection will be done. If a valid epsg code is given and if different from instance.referenceCrs, each feature will be reprojected before mesh conversion occurs. Please note that reprojection can be somewhat heavy on cpu ressources.

      • Optional elevation?: number | number[] | FeatureElevationCallback

        Set the elevation of the features received from the source. It can be a constant for every feature, or a callback. The callback version is particularly useful to derive the elevation from the properties of the feature.

      • extent: Extent

        The geographic extent of the map, mandatory.

      • Optional extrusionOffset?: number | number[] | FeatureExtrusionOffsetCallback

        if set, this will cause 2D features to be extruded of the corresponding amount. If a single value is given, it will be used for all the vertices of all the features. if an array is given, each extruded vertex will use the corresponding value. If a callback is given, it allows to extrude each feature individually.

      • Optional material?: Material

        the THREE.Material to use for meshes

      • Optional maxLevel?: number

        The max level to subdivide the extent and process features.

      • Optional minLevel?: number

        The min subdivision level to start processing features. Useful for WFS or other untiled servers, to avoid to download the entire dataset when the whole extent is visible.

      • Optional object3d?: Object3D<Object3DEventMap>
      • Optional onMeshCreated?: OnMeshCreatedCallback

        called when a mesh is created (just after conversion of the source data)

      • Optional onTileCreated?: OnTileCreatedCallback

        callback called just after the subdivision, with the THREE.Group representing a tile

      • source: VectorSource<Geometry>

        The ol.VectorSource providing features to this entity

      • Optional style?: FeatureStyle | FeatureStyleCallback

        an object or a callback returning such object to style the individual feature. If an object is returned, the informations it contains will be used to style every feature the same way. If a callback is provided, it will be called with the feature. This allows to individually style each feature.

    Returns FeatureCollection

Properties

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

Type declaration

  • max: number
  • min: number
_instance: Instance
_opCounter: OperationCounter
_source: VectorSource<Geometry>
_subdivisions: {
    x: number;
    y: number;
}

Type declaration

  • x: number
  • y: number
_tileIdSet: Set<string | number>
dataProjection: string
elevation: number | number[] | FeatureElevationCallback
extent: Extent
extrusionOffset: number | number[] | FeatureExtrusionOffsetCallback
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.

isFeatureCollection: true = true
isPickable: true = true
level0Nodes: Group<Object3DEventMap>[]
material: Material
maxLevel: number = 0
minLevel: number = 0
onMeshCreated: OnMeshCreatedCallback
onTileCreated: OnTileCreatedCallback
ready?: boolean
sseScale: number = 1
type: string

The name of the type of this object.

userData: Record<string, any> = {}

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

whenReady?: Promise<FeatureCollection>

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[]

    Fires

    Entity3D#clippingPlanes-property-changed

  • 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 loading(): boolean
  • Gets whether this entity is currently loading data.

    Returns boolean

    Api

  • 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

    Fires

    Entity3D#opacity-property-changed

  • set opacity(v): void
  • Parameters

    • v: number

    Returns void

  • get progress(): number
  • Gets the progress value of the data loading.

    Returns number

    Api

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

    Returns number

    Fires

    Entity3D#renderOrder-property-changed

  • set renderOrder(v): void
  • Parameters

    • v: number

    Returns void

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

    Returns boolean

    Fires

    Entity3D#visible-property-changed

  • set visible(v): void
  • Parameters

    • v: boolean

    Returns void

Methods

  • Adds a listener to an event type.

    Type Parameters

    Parameters

    Returns void

  • Type Parameters

    • T extends string

    Parameters

    Returns void

  • Parameters

    • extent: Extent
    • z: number
    • x: number = 0
    • y: number = 0

    Returns Group<Object3DEventMap>

  • 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 entity and all resources associated with it.

    The default implementation of this method does nothing. You should implement it in your custom entities to handle any special logic of disposal.

    For example: disposing materials, geometries, stopping HTTP requests, etc.

    Returns void

  • Filters what objects need to be updated, based on updatedSources. The returned objects are then passed to preUpdate and postUpdate.

    Inherited classes should override shouldFullUpdate and shouldUpdate if they need to change this behavior.

    Parameters

    • updateSources: Set<unknown>

      Sources that triggered an update

    Returns Set<unknown>

    Set of objects to update

  • 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.

  • 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.

  • Checks if listener is added to an event type.

    Type Parameters

    Parameters

    Returns boolean

  • Type Parameters

    • T extends string

    Parameters

    Returns boolean

  • 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);
  • Picks objects from this entity.

    Implementations must respect at least limit and filter options.

    Parameters

    • canvasCoords: Vector2

      Coordinates on the rendering canvas

    • Optional options: PickOptions

      Options

    Returns PickResult<any>[]

    Target

  • Method called after update().

    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 void

  • 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

      the update context.

    • changeSources: Set<any>

      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 any[]

    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.

  • Removes a listener from an event type.

    Type Parameters

    Parameters

    Returns void

  • Type Parameters

    • T extends string

    Parameters

    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

  • Parameters

    • context: Context
    • node: Group<Object3DEventMap>

    Returns void

  • Parameters

    • tile: Group<Object3DEventMap>
    • sse: {
          lengths: {
              x: number;
              y: number;
          };
          ratio: number;
      }
      • lengths: {
            x: number;
            y: number;
        }
        • x: number
        • y: number
      • ratio: number

    Returns boolean

  • 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

  • Performs an update on an element of the entity.

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

    Parameters

    • ctx: Context

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

    • node: Group<Object3DEventMap>

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

    Returns Object3D<Object3DEventMap>[]

    New elements to update

  • Updates the clipping planes of all objects under this entity.

    Returns void

  • Parameters

    • cameraPlane: Plane
    • node: Group<Object3DEventMap>

    Returns void

  • Updates the opacity of the entity. Note: this method can be overriden for custom implementations.

    Returns void

  • Updates the visibility of the entity. Note: this method can be overriden for custom implementations.

    Returns void

Generated using TypeDoc