首页 / OpenLayers / API 文档
Feature
先看结论
要素。一条业务记录的最小单位,由几何体和任意键值属性组成,可选带自己的样式。
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)。