经纬志
首页 / OpenLayers / API 文档

Feature

先看结论

要素。一条业务记录的最小单位,由几何体和任意键值属性组成,可选带自己的样式。

最后验证 2026-11-03 · OpenLayers 10.3.1 · 更新 2026-10-27 · 引用本文
new ol.Feature(options)

构造参数

参数说明
geometry几何体实例,省略时要素没有形状
properties属性对象,也可以直接把属性平铺进 options
id要素标识,用于 getFeatureById
var feature = new ol.Feature({
  geometry: new ol.geom.Point(ol.proj.fromLonLat([116.391263, 39.907359])),
  id: 'poi-001',
  name: '天安门',
  category: 'landmark',
  visits: 12
});

属性读写

方法说明
get(key)读属性,不存在返回 undefined
set(key, value)写属性,触发 propertychange 事件
getProperties()取全部属性的浅拷贝
getKeys()取全部键名
unset(key)删除属性

set 的第三个参数是 silent。 静默写入不会发出变更事件,适合批量初始化属性,但也不会触发重绘。

feature.set('category', 'museum');           // 会触发重绘监听
feature.set('checked', true, true);          // 静默写入,不触发

几何体

方法说明
getGeometry()取几何体对象
setGeometry(g)替换几何体,旧对象不再被引用
getGeometryName()取几何类型名,如 'Point'

setGeometry 不会自动把新几何体投到视图坐标系。 从经纬度数据构造几何体时,仍然要用 fromLonLat 转换, 或者用 geometry.transform() 显式换投影。

独立样式

给单个要素设样式,优先级高于图层样式。 清除它需要传 undefined,传 null 会被当作无效值忽略:

feature.setStyle(new ol.style.Style({
  image: new ol.style.Circle({
    radius: 8,
    fill: new ol.style.Fill({ color: '#d0453a' })
  })
}));

/* 恢复为跟随图层样式 */
feature.setStyle(undefined);

要素上的 id 与属性里的 id 不是一回事。 new ol.Feature({ id: 'a', properties: {...} }) 中的 id 是要素标识,不会出现在 getProperties() 里。

克隆

clone() 复制几何体与属性,但不会复制独立样式。 做投影转换前先克隆,可以避免改到原要素:

var copy = feature.clone();
copy.getGeometry().transform('EPSG:3857', 'EPSG:4326');
copy.getGeometry().getCoordinates();
引用本文

经纬志(2026)。《Feature》。https://www.jingweizhi.com/openlayers/api/feature.html(访问日期 2026-11-03)。