Options
All
  • Public
  • Public/Protected
  • All
Menu

This strategy ensures that only the data which is in the visible extent of the Map is retrieved from the model. It can only be used on FeatureLayers whose model has a spatial-query capability. See Store.spatialQuery for more information about this capability. If you attempt to use this strategy with a model that does not support spatial queries, an error will be thrown.

Additionally, you can configure a QueryProvider on this loading strategy to further refine the amount of data to load from the FeatureModel.

In a 3D scene it is possible that the visible extent of the Map covers multiple areas with different scales. For example, if the camera is tilted, data on the horizon is visualized at a larger scale than data closer to the camera. To that end, LuciadRIA divides the map in multiple zones that correspond with scale levels that are defined by the QueryProvider. The loading strategy queries the underlying model by passing the bounds and the query object for each visible scale level zone, and combines the data in each zone for a consistent visualization. This approach allows you to visualize large data sets in 3D, while you can still apply data specific business rules when loading and visualizing the data.

In order to take advantage of this loading capability the QueryProvider should define scale levels and their query objects to limit the number of features for smaller scales, or even to prevent from loading data at all for the least detailed scale (level 0) (QueryProvider.QUERY_NONE). Additionally, you can also define layer's minimum scale or maximum scale at which features should be rendered. LuciadRIA will query the underlying model by passing the bounds computed for the area with scales within layer's scale limits.

// The query provider defines 3 scale levels. The scale level 0 denotes an area with scales smaller than 1 / 50000,
// scale level 1 that represents area with scales between than 1 / 50000 and 1 / 1000,
// scale level 2 that represents area with scales greater than 1 / 1000 (closer to the observer).

const townQueryFilter = { filter: FilerFactory.eq(FilerFactory.property("class"), FilerFactory.literal("town")) };
const queryProvider = new QueryProvider();
queryProvider.getQueryLevelScales = function() {
 return [ 1/50000, 1/1000 ];
};
queryProvider.getQueryForLevel = function(queryLevel) {
  // no data requested for least detailed level
  if (queryLevel === 0) {
    return QueryProvider.QUERY_NONE;
  }
  // data matching the specific filter is only loaded
  if (queryLevel === 1) {
    return townQueryFilter;
  }
  // everything is loaded otherwise
  return null;
};

 // the countiesModel must support spatial queries
 const countiesLayer = new FeatureLayer(countiesModel, {
    loadingStrategy: new LoadSpatially({ queryProvider: queryProvider })
 });
};
since

2015.0 load spatially strategy

since

2018.1 3D multi-scale capability

Hierarchy

Overview

Constructors

Accessors

Methods

Constructors

constructor

Accessors

queryProvider

refresh

  • get refresh(): Date | number | null
  • set refresh(value: Date | number | null): void
  • Controls the refresh settings for the Loading Strategy.

    • If the refresh property is set to null, the loading strategy never refreshes.
    • If the refresh property is set to a some number n, the loading strategy refreshes every n milliseconds.
    • If the refresh property is set to a Date object, the loading strategy will refresh at that time.
    since

    2020.1

    Returns Date | number | null

  • Controls the refresh settings for the Loading Strategy.

    • If the refresh property is set to null, the loading strategy never refreshes.
    • If the refresh property is set to a some number n, the loading strategy refreshes every n milliseconds.
    • If the refresh property is set to a Date object, the loading strategy will refresh at that time.
    since

    2020.1

    Parameters

    • value: Date | number | null

    Returns any

Methods

shouldUpdate

  • This is a predicate function that is called by LuciadRIA when processing the query cursor in order to find out if an existing feature should be replaced by a new version from the cursor. If the result of this test is true then the feature will be replaced by the new version. By default LuciadRIA does not replace existing features, as the update operation incurs some performance impact.

    Please note that the query process is launched when:

    You can set a custom implementation of shouldUpdate function to verify if the update operation should be performed on existing features.

    since

    2020.1

    Parameters

    • existingFeature: Feature

      the feature that exists in the layer

    • feature: Feature

      of the feature with same id that comes from the query cursor

    Returns boolean

    true, if the update operation should be performed, false to keep the existing feature unchanged.

    // The strategy updates features by comparing the 'size' property.
    
    const loadingStrategy = new LoadSpatially({ queryProvider });
    loadingStrategy.shouldUpdate = function(existingFeature, feature) {
      return feature.properties.size !== existingFeature.properties.size;
    }

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Type alias with type parameter
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method