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类
      • 概述
      • 源码分析
        • ImageStyle类的源码实现
        • ImageStyle类的构造函数
        • ImageStyle类的主要方法
      • 总结
    • Icon类
    • RegularShape类
    • Circle类
    • IconImage类
    • IconImageCache类
  • 《Openlayers源码》笔记
  • style样式篇
东流
2025-01-20
目录

ImageStyle类

# 概述

ImageStyle 类是 Openlayers 中用于配置和管理图像样式的类。它主要用于设置地图要素(如标记、图标等)的图像样式,允许对图像的透明度、旋转、缩放、位移、去重模式等属性进行控制。通过 ImageStyle 类,开发者可以轻松地为地图上的对象指定图像样式。

# 源码分析

# ImageStyle类的源码实现

ImageStyle类的源码实现如下:

class ImageStyle {
  constructor(options) {
    this.opacity_ = options.opacity;
    this.rotateWithView_ = options.rotateWithView;
    this.rotation_ = options.rotation;
    this.scale_ = options.scale;
    this.scaleArray_ = toSize(options.scale);
    this.displacement_ = options.displacement;
    this.declutterMode_ = options.declutterMode;
  }
  clone() {
    const scale = this.getScale();
    return new ImageStyle({
      opacity: this.getOpacity(),
      scale: Array.isArray(scale) ? scale.slice() : scale,
      rotation: this.getRotation(),
      rotateWithView: this.getRotateWithView(),
      displacement: this.getDisplacement().slice(),
      declutterMode: this.getDeclutterMode(),
    });
  }
  getOpacity() {
    return this.opacity_;
  }
  getRotateWithView() {
    return this.rotateWithView_;
  }
  getRotation() {
    return this.rotation_;
  }
  getScale() {
    return this.scale_;
  }
  getScaleArray() {
    return this.scaleArray_;
  }
  getDisplacement() {
    return this.displacement_;
  }
  getDeclutterMode() {
    return this.declutterMode_;
  }
  getAnchor() {
    return abstract();
  }
  getImage(pixelRatio) {
    return abstract();
  }
  getHitDetectionImage() {
    return abstract();
  }
  getPixelRatio(pixelRatio) {
    return 1;
  }
  getImageState() {
    return abstract();
  }
  getImageSize() {
    return abstract();
  }
  getOrigin() {
    return abstract();
  }
  getSize() {
    return abstract();
  }
  setDisplacement(displacement) {
    this.displacement_ = displacement;
  }
  setOpacity(opacity) {
    this.opacity_ = opacity;
  }
  setRotateWithView(rotateWithView) {
    this.rotateWithView_ = rotateWithView;
  }
  setRotation(rotation) {
    this.rotation_ = rotation;
  }
  setScale(scale) {
    this.scale_ = scale;
    this.scaleArray_ = toSize(scale);
  }
  listenImageChange(listener) {
    abstract();
  }
  load() {
    abstract();
  }
  unlistenImageChange(listener) {
    abstract();
  }
  ready() {
    return Promise.resolve();
  }
}
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

# ImageStyle类的构造函数

ImageStyle类的构造函数接受一个选项对象(options),其中包含了初始化 ImageStyle 实例时的配置参数。参数包括:

  • opacity: 图像的透明度(值为 0 到 1 之间的浮动值)。

  • rotateWithView: 是否随着视图的旋转而旋转图像。

  • rotation: 图像的旋转角度,以弧度为单位。

  • scale: 图像的缩放比例。

  • displacement: 图像的位移,通常用于调整图像的显示位置。

  • declutterMode: 去重模式,控制图像是否与其他图像或标注重叠。

  • toSize(options.scale) 是将 scale 转换为尺寸的工具函数

# ImageStyle类的主要方法

ImageStyle类的主要方法主要分为如下几类:

  • clone()方法:用于克隆当前 ImageStyle 实例并返回一个新的实例。它复制了当前样式的所有配置项,包括透明度、缩放、旋转、位移等。如果 scale 或 displacement 是数组,则会使用 slice() 方法来创建一个副本,避免引用同一内存地址。

  • ready()方法:该方法返回一个已解决的 Promise,表示图像样式准备好了。这可以用于异步加载图像或资源时的确认

  • 获取器类方法:这些方法名以get***开头,用于返回实例中的不同属性值

  • 抽象方法类方法:在ImageStyle类中未实现,内部就是一个抽象方法(abstract())。它们通常在 ImageStyle 类的子类中实现,表示这部分功能需要在实际应用中进一步定义。例如,getImage() 返回图像,getImageSize() 返回图像的大小,getOrigin() 返回图像的原点,getSize() 返回图像的尺寸等。

  • 设置器类方法:这些方法名以set***开头,用于设置图像样式的各个属性,如透明度、旋转角度、位移和缩放等。每个方法接受一个参数并更新对应的属性值。

  • 监听类方法:如listenImageChange(listener)、load()和unlistenImageChange方法等,这些与图像的加载和变更监听相关。它们也是抽象方法,通常需要在继承 ImageStyle 类的子类中实现。它们用于处理图像变更时的事件监听和取消监听,以及图像加载操作。

# 总结

ImageStyle 类用于配置和管理 Openlayers 中地图要素的图像样式,允许开发者设置透明度、旋转、缩放、位移等属性。它提供了克隆、获取、设置图像样式属性的方法,并包含了一些抽象方法供子类实现。通过 ImageStyle,可以灵活地控制地图要素的外观和行为。

编辑 (opens new window)
上次更新: 2025/01/21, 09:02:19
Text类
Icon类

← Text类 Icon类→

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