# Class: Feature

This documentation is for OpenLayers v10.9.0. The latest is v.

## ol/Feature~Feature

    import Feature from 'ol/Feature.js';

A vector object for geographic features with a geometry and other attribute properties, similar to the features in vector file formats like GeoJSON.

Features can be styled individually with `setStyle`; otherwise they use the style of their vector layer.

Note that attribute properties are set as `BaseObject` properties on the feature object, so they are observable, and have get/set accessors.

Typically, a feature has a single geometry property. You can set the geometry using the `setGeometry` method and get it with `getGeometry`. It is possible to store more than one geometry on a feature using attribute properties. By default, the geometry used for rendering is identified by the property name `geometry`. If you want to use another geometry property for rendering, use the `setGeometryName` method to change the attribute property associated with the geometry for the feature. For example:

    import Feature from 'ol/Feature.js';
    import Polygon from 'ol/geom/Polygon.js';
    import Point from 'ol/geom/Point.js';

    const feature = new Feature({
      geometry: new Polygon(polyCoords),
      labelPoint: new Point(labelCoords),
      name: 'My Polygon',
    });

    // get the polygon geometry
    const poly = feature.getGeometry();

    // Render the feature as a point using the coordinates from labelPoint
    feature.setGeometryName('labelPoint');

    // get the point geometry
    const point = feature.getGeometry();

#### new Feature(geometryOrProperties)

Feature.js, line 78

  Name | Type | Description
  --- | --- | ---
  `geometryOrProperties` | Geometry | ObjectWithGeometry.<Geometry, NoInfer.<Properties>> | undefined | You may pass a Geometry object directly, or an object literal containing properties. If you pass an object literal, you may include a Geometry associated with a `geometry` key.

  ##### Fires:

  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.
  - `change:geometry` (ObjectEvent)
  - `error` (BaseEvent) - Generic error event. Triggered when an error occurs.
  - `propertychange` (ObjectEvent) - Triggered when a property is changed.

### Extends

- BaseObject

### Observable Properties

Name | Type | Settable | ObjectEvent type | Description
--- | --- | --- | --- | ---
`geometry` | Geometry | undefined | yes | `change:geometry` | The default geometry for the feature.

### Methods

#### changed() inherited

Observable.js, line 68

  Increases the revision counter and dispatches a 'change' event.

#### clone(){Feature<Geometry>}

Feature.js, line 158

  Clone this feature. If the original feature has a geometry it is also cloned. The feature id is not set in the clone.

  ##### Returns:

  The clone.

#### dispatchEvent(event){boolean | undefined} inherited

events/Target.js, line 85

  Dispatches an event and calls all listeners listening for events of this type. The event parameter can either be a string or an Object with a `type` property.

  Name | Type | Description
  --- | --- | ---
  `event` | BaseEvent | string | Event object.

  ##### Returns:

  `false` if anyone called preventDefault on the event object or if any of the listeners returned false.

#### get(key){*} inherited

Object.js, line 136

  Gets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.

  ##### Returns:

  Value.

#### getGeometry(){Geometry | undefined}

Feature.js, line 190

  Get the feature's default geometry. A feature may have any number of named geometries. The "default" geometry (the one that is rendered by default) is set when calling `setGeometry`.

  ##### Returns:

  The default geometry for the feature.

#### getGeometryName(){string}

Feature.js, line 212

  Get the name of the feature's default geometry. By default, the default geometry is named `geometry`.

  ##### Returns:

  Get the property name associated with the default geometry for this feature.

#### getId(){number | string | undefined}

Feature.js, line 201

  Get the feature identifier. This is a stable identifier for the feature and is either set when reading data from a remote source or set explicitly by calling `setId`.

  ##### Returns:

  Id.

#### getKeys(){Array.<string>} inherited

Object.js, line 149

  Get a list of object property names.

  ##### Returns:

  List of property names.

#### getProperties(){NoInfer.<Properties>} inherited

Object.js, line 158

  Get an object of all property names and values.

  ##### Returns:

  Object.

#### getRevision(){number} inherited

Observable.js, line 79

  Get the version number for this object. Each time the object is modified, its version number will be incremented.

  ##### Returns:

  Revision.

#### getStyle(){StyleLike | undefined}

Feature.js, line 222

  Get the feature's style. Will return what was provided to the `setStyle` method.

  ##### Returns:

  The feature style.

#### getStyleFunction(){StyleFunction | undefined}

Feature.js, line 232

  Get the feature's style function.

  ##### Returns:

  Return a function representing the current style of this feature.

#### on(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 152

  Listen for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### once(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 164

  Listen once for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### set(key, value, silent) inherited

Object.js, line 218

  Sets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `value` | * | Value.
  `silent` | boolean | undefined | Update without triggering an event.

#### setGeometry(geometry)

Feature.js, line 270

  Set the default geometry for the feature. This will update the property with the name returned by `getGeometryName`.

  Name | Type | Description
  --- | --- | ---
  `geometry` | Geometry | undefined | The new geometry.

#### setGeometryName(name)

Feature.js, line 310

  Set the property name to be used when getting the feature's default geometry. When calling `getGeometry`, the value of the property with this name will be returned.

  Name | Type | Description
  --- | --- | ---
  `name` | string | The property name of the default geometry.

#### setId(id)

Feature.js, line 298

  Set the feature id. The feature id is considered stable and may be used when requesting features or comparing identifiers returned from a remote source. The feature id can be used with the `getFeatureById` method.

  Name | Type | Description
  --- | --- | ---
  `id` | number | string | undefined | The feature id.

  ##### Fires:

  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.

#### setProperties(values, silent) inherited

Object.js, line 238

  Sets a collection of key-value pairs. Note that this changes any existing properties and adds new ones (it does not remove any existing properties).

  Name | Type | Description
  --- | --- | ---
  `values` | Partial.<NoInfer.<Properties>> | Values.
  `silent` | boolean | undefined | Update without triggering an event.

#### setStyle(style)

Feature.js, line 283

  Set the style for the feature to override the layer style. This can be a single style object, an array of styles, or a function that takes a resolution and returns an array of styles. To unset the feature style, call `setStyle()` without arguments or a falsey value.

  Name | Type | Description
  --- | --- | ---
  `style` | StyleLike | undefined | Style for this feature.

  ##### Fires:

  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.

#### un(type, listener) inherited

Observable.js, line 173

  Unlisten for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

#### unset(key, silent) inherited

Object.js, line 262

  Unsets a property.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `silent` | boolean | undefined | Unset without triggering an event.