Class: VectorSource

ol/source/Vector~VectorSource


import VectorSource from 'ol/source/Vector';

Provides a source of features for vector layers. Vector features provided by this source are suitable for editing. See module:ol/source/VectorTile~VectorTile for vector data that is optimized for rendering.

new VectorSource(opt_options)

source/Vector.js, line 160
Name Type Description
options

Vector source options.

Name Type Default Description
attributions module:ol/source/Source~AttributionLike

Attributions.

features Array.<module:ol/Feature~Feature> | module:ol/Collection~Collection.<module:ol/Feature~Feature>

Features. If provided as module:ol/Collection, the features in the source and the collection will stay in sync.

format module:ol/format/Feature~FeatureFormat

The feature format used by the XHR feature loader when url is set. Required if url is set, otherwise ignored.

loader module:ol/featureloader~FeatureLoader

The loader function used to load features, from a remote source for example. If this is not set and url is set, the source will create and use an XHR feature loader.

Example:

import {Vector} from 'ol/source';
import {GeoJSON} from 'ol/format';
import {bbox} from 'ol/loadingstrategy';

var vectorSource = new Vector({
  format: new GeoJSON(),
  loader: function(extent, resolution, projection) {
     var proj = projection.getCode();
     var url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +
         'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
         'outputFormat=application/json&srsname=' + proj + '&' +
         'bbox=' + extent.join(',') + ',' + proj;
     var xhr = new XMLHttpRequest();
     xhr.open('GET', url);
     var onError = function() {
       vectorSource.removeLoadedExtent(extent);
     }
     xhr.onerror = onError;
     xhr.onload = function() {
       if (xhr.status == 200) {
         vectorSource.addFeatures(
             vectorSource.getFormat().readFeatures(xhr.responseText));
       } else {
         onError();
       }
     }
     xhr.send();
   },
   strategy: bbox
 });
overlaps boolean true

This source may have overlapping geometries. Setting this to false (e.g. for sources with polygons that represent administrative boundaries or TopoJSON sources) allows the renderer to optimise fill and stroke operations.

strategy module:ol/source/Vector~LoadingStrategy

The loading strategy to use. By default an module:ol/loadingstrategy~all strategy is used, a one-off strategy which loads all features at once.

url string | module:ol/featureloader~FeatureUrlfunction

Setting this option instructs the source to load features using an XHR loader (see module:ol/featureloader~xhr). Use a string and an module:ol/loadingstrategy~all for a one-off download of all features from the given URL. Use a module:ol/featureloader~FeatureUrlfunction to generate the url with other loading strategies. Requires format to be set as well. When default XHR feature loader is provided, the features will be transformed from the data projection to the view projection during parsing. If your remote data source does not advertise its projection properly, this transformation will be incorrect. For some formats, the default projection (usually EPSG:4326) can be overridden by setting the dataProjection constructor option on the format. Note that if a source contains non-feature data, such as a GeoJSON geometry or a KML NetworkLink, these will be ignored. Use a custom loader to load these.

useSpatialIndex boolean true

By default, an RTree is used as spatial index. When features are removed and added frequently, and the total number of features is low, setting this to false may improve performance.

Note that module:ol/source/Vector~VectorSource#getFeaturesInExtent, module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate and module:ol/source/Vector~VectorSource#getExtent cannot be used when useSpatialIndex is set to false, and module:ol/source/Vector~VectorSource#forEachFeatureInExtent will loop through all features.

When set to false, the features will be maintained in an module:ol/Collection, which can be retrieved through module:ol/source/Vector~VectorSource#getFeaturesCollection.

wrapX boolean true

Wrap the world horizontally. For vector editing across the -180° and 180° meridians to work properly, this should be set to false. The resulting geometry coordinates will then exceed the world bounds.

Fires:
  • addfeature - Triggered when a feature is added to the source.
  • changefeature - Triggered when a feature is updated.
  • clear - Triggered when the clear method is called on the source.
  • removefeature - Triggered when a feature is removed from the source. See source.clear() for exceptions.

Methods

addFeature(feature)

source/Vector.js, line 291

Add a single feature to the source. If you want to add a batch of features at once, call #addFeatures() instead. A feature will not be added to the source if feature with the same id is already there. The reason for this behavior is to avoid feature duplication when using bbox or tile loading strategies.

Name Type Description
feature module:ol/Feature~Feature

Feature to add.

addFeatures(features)

source/Vector.js, line 371

Add a batch of features to the source.

Name Type Description
features Array.<module:ol/Feature~Feature>

Features to add.

clear(opt_fast)

source/Vector.js, line 466

Remove all features from the source.

Name Type Description
fast boolean

Skip dispatching of module:ol/source/Vector~VectorSourceEvent#removefeature events.

forEachFeature(callback){T|undefined}

source/Vector.js, line 513

Iterate through all features on the source, calling the provided callback with each one. If the callback returns any "truthy" value, iteration will stop and the function will return the same value. Note: this function only iterate through the feature that have a defined geometry.

Name Type Description
callback function

Called with each feature on the source. Return a truthy value to stop iteration.

Returns:
The return value from the last call to the callback.

forEachFeatureInExtent(extent, callback){T|undefined}

source/Vector.js, line 566

Iterate through all features whose bounding box intersects the provided extent (note that the feature's geometry may not intersect the extent), calling the callback with each feature. If the callback returns a "truthy" value, iteration will stop and the function will return the same value.

If you are interested in features whose geometry intersects an extent, call the #forEachFeatureIntersectingExtent() method instead.

When useSpatialIndex is set to false, this method will loop through all features, equivalent to #forEachFeature().

Name Type Description
extent module:ol/extent~Extent

Extent.

callback function

Called with each feature whose bounding box intersects the provided extent.

Returns:
The return value from the last call to the callback.

forEachFeatureIntersectingExtent(extent, callback){T|undefined}

source/Vector.js, line 590

Iterate through all features whose geometry intersects the provided extent, calling the callback with each feature. If the callback returns a "truthy" value, iteration will stop and the function will return the same value.

If you only want to test for bounding box intersection, call the #forEachFeatureInExtent() method instead.

Name Type Description
extent module:ol/extent~Extent

Extent.

callback function

Called with each feature whose geometry intersects the provided extent.

Returns:
The return value from the last call to the callback.

getClosestFeatureToCoordinate(coordinate, opt_filter){module:ol/Feature~Feature}

source/Vector.js, line 685

Get the closest feature to the provided coordinate.

This method is not available when the source is configured with useSpatialIndex set to false.

Name Type Description
coordinate module:ol/coordinate~Coordinate

Coordinate.

filter function

Feature filter function. The filter function will receive one argument, the feature and it should return a boolean value. By default, no filtering is made.

Returns:
Closest feature.

getExtent(opt_extent){module:ol/extent~Extent}

source/Vector.js, line 738

Get the extent of the features currently in the source.

This method is not available when the source is configured with useSpatialIndex set to false.

Name Type Description
extent module:ol/extent~Extent

Destination extent. If provided, no new extent will be created. Instead, that extent's coordinates will be overwritten.

Returns:
Extent.

getFeatureById(id){module:ol/Feature~Feature}

source/Vector.js, line 752

Get a feature by its identifier (the value returned by feature.getId()). Note that the index treats string and numeric identifiers as the same. So source.getFeatureById(2) will return a feature with id '2' or 2.

Name Type Description
id string | number

Feature identifier.

Returns:
The feature (or null if not found).

getFeatures(){Array.<module:ol/Feature~Feature>}

source/Vector.js, line 626

Get all features on the source in random order.

Returns:
Features.

getFeaturesAtCoordinate(coordinate){Array.<module:ol/Feature~Feature>}

source/Vector.js, line 648

Get all features whose geometry intersects the provided coordinate.

Name Type Description
coordinate module:ol/coordinate~Coordinate

Coordinate.

Returns:
Features.

getFeaturesCollection(){module:ol/Collection~Collection.<module:ol/Feature~Feature>}

source/Vector.js, line 616

Get the features collection associated with this source. Will be null unless the source was configured with useSpatialIndex set to false, or with an module:ol/Collection~Collection as features.

Returns:
The collection of features.

getFeaturesInExtent(extent){Array.<module:ol/Feature~Feature>}

source/Vector.js, line 668

Get all features in the provided extent. Note that this returns an array of all features intersecting the given extent in random order (so it may include features whose geometries do not intersect the extent).

This method is not available when the source is configured with useSpatialIndex set to false.

Name Type Description
extent module:ol/extent~Extent

Extent.

Returns:
Features.

getFormat(){module:ol/format/Feature~FeatureFormat|undefined}

source/Vector.js, line 764

Get the format associated with this source.

Returns:
The feature format.

getUrl(){string|module:ol/featureloader~FeatureUrlFunction|undefined}

source/Vector.js, line 789

Get the url associated with this source.

Returns:
The url.

hasFeature(feature){boolean}

source/Vector.js, line 851

Returns true if the feature is contained within the source.

Name Type Description
feature module:ol/Feature~Feature

Feature.

Returns:
Has feature.

removeFeature(feature)

source/Vector.js, line 922

Remove a single feature from the source. If you want to remove all features at once, use the #clear() method instead.

Name Type Description
feature module:ol/Feature~Feature

Feature to remove.

removeLoadedExtent(extent)

source/Vector.js, line 900

Remove an extent from the list of loaded extents.

Name Type Description
extent module:ol/extent~Extent

Extent.

setLoader(loader)

source/Vector.js, line 982

Set the new loader of the source. The next loadFeatures call will use the new loader.

Name Type Description
loader module:ol/featureloader~FeatureLoader

The loader to set.