Circle类
# 概述
在 Openlayers 中,CircleStyle
类继承自 RegularShape
类,用于表示和渲染一个圆形的样式。CircleStyle
主要用于地图上的图形渲染,比如设置一个图标或标记为圆形。它提供了圆形样式的配置、渲染和复制功能。
# 源码
# CircleStyle
类的源码实现
CircleStyle
类的源码实现如下:
class CircleStyle extends RegularShape {
constructor(options) {
options = options ? options : { radius: 5 };
super({
points: Infinity,
fill: options.fill,
radius: options.radius,
stroke: options.stroke,
scale: options.scale !== undefined ? options.scale : 1,
rotation: options.rotation !== undefined ? options.rotation : 0,
rotateWithView:
options.rotateWithView !== undefined ? options.rotateWithView : false,
displacement:
options.displacement !== undefined ? options.displacement : [0, 0],
declutterMode: options.declutterMode,
});
}
clone() {
const scale = this.getScale();
const style = new CircleStyle({
fill: this.getFill() ? this.getFill().clone() : undefined,
stroke: this.getStroke() ? this.getStroke().clone() : undefined,
radius: this.getRadius(),
scale: Array.isArray(scale) ? scale.slice() : scale,
rotation: this.getRotation(),
rotateWithView: this.getRotateWithView(),
displacement: this.getDisplacement().slice(),
declutterMode: this.getDeclutterMode(),
});
style.setOpacity(this.getOpacity());
return style;
}
setRadius(radius) {
this.radius = radius;
this.render();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# CircleStyle
类的构造函数
CircleStyle
的构造函数,接收一个 options
对象来初始化样式的属性。
参数解析:
options = options ? options : { radius: 5 }
:- 如果没有传入
options
对象,则使用默认值{ radius: 5 }
,即默认圆形半径为5
。
- 如果没有传入
在调用
super()
时,传入了RegularShape
的配置对象。具体配置如下:points: Infinity
:表示圆形的点数,Infinity
表示该形状没有角,类似一个平滑的圆。fill: options.fill
:填充颜色(如果有的话)。radius: options.radius
:圆形的半径,使用options.radius
。stroke: options.stroke
:边框样式(如果有的话)。scale: options.scale !== undefined ? options.scale : 1
:缩放因子,如果没有传入则默认为 1。rotation: options.rotation !== undefined ? options.rotation : 0
:旋转角度(如果没有传入则默认为 0)。rotateWithView: options.rotateWithView !== undefined ? options.rotateWithView : false
:指定是否在地图视图旋转时一起旋转(默认为false
)。displacement: options.displacement !== undefined ? options.displacement : [0, 0]
:设置圆形的位移,默认为[0, 0]
(即不偏移)。declutterMode: options.declutterMode
:此属性用于解决多个标记重叠的情况,可以设置是否启用去重模式。
# CircleStyle
类的主要方法
CircleStyle
类的主要方法就是clone
和setRadius
方法,如下:
clone
方法
该方法用于克隆一个新的 CircleStyle
实例,返回一个新的样式对象,且它的属性与当前样式一致。
步骤解析:
获取当前样式的
scale
。创建一个新的
CircleStyle
实例,传入当前实例的属性(例如:fill
,stroke
,radius
,scale
,rotation
,displacement
等)。这些属性通过this.getFill()
、this.getStroke()
等方法获取当前样式的值,并进行克隆(如果有的话)。特别是fill
和stroke
可能是对象,因此需要调用clone()
方法进行深拷贝。设置新样式的透明度:
style.setOpacity(this.getOpacity())
。返回克隆的新样式。
setRadius
方法
这个方法用来更新圆形的半径,并重新渲染图形。
步骤解析:
this.radius = radius;
:更新当前样式实例的radius
属性。this.render();
:调用render()
方法重新渲染样式。这会触发更新图形显示。
# 总结
CircleStyle
继承自RegularShape
,用于绘制圆形样式。它接受一个配置对象来设置圆形的填充、边框、半径、缩放、旋转等属性。该类的
clone
方法提供了一个深拷贝功能,允许创建与当前样式相同的新样式。setRadius
方法可以动态修改圆形的半径,并重新渲染样式。
CircleStyle
是 Openlayers 中非常实用的样式类,适用于各种基于圆形的标记或图形样式,例如在地图上显示位置标记、路径圆形标记等。