Jinuss's blog Jinuss's blog
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

东流

前端可视化
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 核心基类

  • Control控件篇

  • Geom几何图形篇

  • Layer图层篇

  • Renderer篇

  • Feature篇

  • style样式篇

    • Style类
    • Fill类
    • Stroke类
    • Text类
    • ImageStyle类
    • Icon类
    • RegularShape类
    • Circle类
      • 概述
      • 源码
        • CircleStyle类的源码实现
        • CircleStyle类的构造函数
        • CircleStyle类的主要方法
      • 总结
    • IconImage类
    • IconImageCache类
  • 《Openlayers源码》笔记
  • style样式篇
东流
2025-01-20
目录

Circle类

# 概述

在 Openlayers 中,CircleStyle 类继承自 RegularShape 类,用于表示和渲染一个圆形的样式。CircleStyle 主要用于地图上的图形渲染,比如设置一个图标或标记为圆形。它提供了圆形样式的配置、渲染和复制功能。

关于RegularShape类,可以参考这篇文章。

# 源码

# 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();
  }
}
1
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 中非常实用的样式类,适用于各种基于圆形的标记或图形样式,例如在地图上显示位置标记、路径圆形标记等。

编辑 (opens new window)
上次更新: 2025/01/23, 08:15:41
RegularShape类
IconImage类

← RegularShape类 IconImage类→

最近更新
01
GeoJSON
05-08
02
Circle
04-15
03
CircleMarker
04-15
更多文章>
Theme by Vdoing | Copyright © 2024-2025 东流 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式