my-openlayer 2.4.8 → 2.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +207 -151
- package/README.md +156 -156
- package/core/Point.js +21 -3
- package/docs/.vitepress/config.mts +57 -57
- package/docs/ConfigManager.md +71 -71
- package/docs/ErrorHandler.md +106 -106
- package/docs/EventManager.md +142 -142
- package/docs/Line.md +187 -187
- package/docs/MapBaseLayers.md +198 -198
- package/docs/MapTools.md +172 -172
- package/docs/MeasureHandler.md +87 -87
- package/docs/MyOl.md +247 -247
- package/docs/Point.md +165 -165
- package/docs/Polygon.md +241 -241
- package/docs/RiverLayerManager.md +187 -187
- package/docs/SelectHandler.md +147 -147
- package/docs/ValidationUtils.md +83 -83
- package/docs/VueTemplatePoint.md +214 -214
- package/docs/index.md +78 -78
- package/package.json +1 -2
- package/types.d.ts +2 -0
- package/AI_CONTEXT.md +0 -147
|
@@ -1,187 +1,187 @@
|
|
|
1
|
-
# RiverLayerManager 河流图层管理类
|
|
2
|
-
|
|
3
|
-
`RiverLayerManager` 专门用于处理河流数据的分级显示和样式管理。它支持基于地图缩放级别(Zoom-based)的动态分级显示,以及基于河流属性等级(Level-based)的固定线宽渲染。
|
|
4
|
-
|
|
5
|
-
## 构造函数
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
constructor(map: Map, eventManager?: EventManager)
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
- **参数**:
|
|
12
|
-
- `map` (Map): OpenLayers 地图实例。
|
|
13
|
-
- `eventManager` (EventManager): 可选。事件管理器实例,如果未提供则内部创建。
|
|
14
|
-
|
|
15
|
-
## 接口定义
|
|
16
|
-
|
|
17
|
-
### RiverLayerOptions
|
|
18
|
-
|
|
19
|
-
河流图层配置选项,继承自 `LineOptions`。
|
|
20
|
-
|
|
21
|
-
| 属性 | 类型 | 必填 | 默认值 | 描述 |
|
|
22
|
-
| :--- | :--- | :--- | :--- | :--- |
|
|
23
|
-
| levelCount | `number` | 否 | `5` | 河流等级总数。用于分级显示循环加载。 |
|
|
24
|
-
| zoomOffset | `number` | 否 | `8` | 缩放级别偏移量。控制何时显示哪一级河流 (Zoom > Level + Offset)。 |
|
|
25
|
-
| levelWidthMap | `RiverLevelWidthMap` | 否 | 默认映射 | 河流级别与线宽的映射对象。 |
|
|
26
|
-
| removeExisting | `boolean` | 否 | `false` | 添加前是否删除由本管理器创建的旧图层。 |
|
|
27
|
-
| layerName | `string` | 否 | - | 图层名称,用于标识和清理。 |
|
|
28
|
-
| visible | `boolean` | 否 | `true` | 初始可见性。 |
|
|
29
|
-
| strokeColor | `string` | 否 | - | 线条颜色。 |
|
|
30
|
-
| strokeWidth | `number` | 否 | - | 基础线宽(如果未使用 levelWidthMap)。 |
|
|
31
|
-
| zIndex | `number` | 否 | - | 图层 Z-Index。 |
|
|
32
|
-
| projectionOptOptions | `any` | 否 | - | GeoJSON 读取时的投影选项。 |
|
|
33
|
-
|
|
34
|
-
### RiverLevelWidthMap
|
|
35
|
-
|
|
36
|
-
河流级别线宽映射接口。
|
|
37
|
-
|
|
38
|
-
```typescript
|
|
39
|
-
interface RiverLevelWidthMap {
|
|
40
|
-
[level: number]: number;
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
默认映射 (`ConfigManager.DEFAULT_RIVER_LEVEL_WIDTH_MAP`) 通常为 `{1: 5, 2: 4, 3: 3, 4: 2, 5: 1}` 等类似结构。
|
|
45
|
-
|
|
46
|
-
## 方法
|
|
47
|
-
|
|
48
|
-
### 分级显示 (Zoom-based)
|
|
49
|
-
|
|
50
|
-
根据地图缩放级别自动显示不同等级的河流。通常用于实现“缩放越大约详细”的效果。
|
|
51
|
-
|
|
52
|
-
#### addRiverLayersByZoom
|
|
53
|
-
|
|
54
|
-
直接传递 GeoJSON 数据添加分级河流图层。
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
addRiverLayersByZoom(fyRiverJson: MapJSONData, options?: RiverLayerOptions): void
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
- **参数**:
|
|
61
|
-
- `fyRiverJson`: 河流 GeoJSON 数据对象。
|
|
62
|
-
- `options`: 配置选项。
|
|
63
|
-
|
|
64
|
-
#### addRiverLayersByZoomByUrl
|
|
65
|
-
|
|
66
|
-
通过 URL 加载 GeoJSON 数据并添加分级河流图层。
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
addRiverLayersByZoomByUrl(url: string, options?: RiverLayerOptions): void
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
#### showRiverLayer
|
|
73
|
-
|
|
74
|
-
控制分级河流图层的总开关。
|
|
75
|
-
|
|
76
|
-
```typescript
|
|
77
|
-
showRiverLayer(show: boolean): void
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
#### showRiverLayerByZoom
|
|
81
|
-
|
|
82
|
-
手动触发根据当前缩放级别更新图层可见性(通常不需要手动调用,已绑定 `moveend` 事件)。
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
showRiverLayerByZoom(): void
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 宽度分级 (Level-based Width)
|
|
89
|
-
|
|
90
|
-
根据河流数据中的 `level` 属性渲染不同宽度的线条,通常用于静态展示不同等级河流的粗细差异。
|
|
91
|
-
|
|
92
|
-
#### addRiverWidthByLevel
|
|
93
|
-
|
|
94
|
-
直接传递 GeoJSON 数据添加按等级设定宽度的河流。
|
|
95
|
-
|
|
96
|
-
```typescript
|
|
97
|
-
addRiverWidthByLevel(data: MapJSONData, options?: RiverLayerOptions): VectorLayer<VectorSource>
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
- **返回值**: 创建的矢量图层。
|
|
101
|
-
|
|
102
|
-
#### addRiverWidthByLevelByUrl
|
|
103
|
-
|
|
104
|
-
通过 URL 加载 GeoJSON 数据并添加按等级设定宽度的河流。
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
addRiverWidthByLevelByUrl(url: string, options?: RiverLayerOptions): VectorLayer<VectorSource>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### 管理与清理
|
|
111
|
-
|
|
112
|
-
#### clearRiverLayers
|
|
113
|
-
|
|
114
|
-
清除所有由该管理器创建的分级河流图层。
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
clearRiverLayers(): void
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
#### getRiverLayerVisibility
|
|
121
|
-
|
|
122
|
-
获取当前分级河流图层的总显示状态。
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
getRiverLayerVisibility(): boolean
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
#### getRiverLayers
|
|
129
|
-
|
|
130
|
-
获取当前管理的所有分级河流图层列表。
|
|
131
|
-
|
|
132
|
-
```typescript
|
|
133
|
-
getRiverLayers(): VectorLayer<VectorSource>[]
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
#### destroy
|
|
137
|
-
|
|
138
|
-
销毁管理器,清理所有图层和事件监听。
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
destroy(): void
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## 使用示例
|
|
145
|
-
|
|
146
|
-
```typescript
|
|
147
|
-
import { MyOl, RiverLayerManager } from 'my-openlayer';
|
|
148
|
-
|
|
149
|
-
const map = new MyOl('map-container');
|
|
150
|
-
const riverManager = new RiverLayerManager(map.map);
|
|
151
|
-
|
|
152
|
-
// 假设 riverGeoJSON 数据中每个 feature 都有 properties.level (1-5)
|
|
153
|
-
|
|
154
|
-
// 示例 1: 添加分级河流(随地图缩放自动显隐不同级别的河流)
|
|
155
|
-
// Level 1 在 Zoom > 9 (1+8) 显示
|
|
156
|
-
// Level 2 在 Zoom > 10 (2+8) 显示
|
|
157
|
-
// ...
|
|
158
|
-
riverManager.addRiverLayersByZoom(riverGeoJSON, {
|
|
159
|
-
layerName: 'dynamic-river',
|
|
160
|
-
levelCount: 5,
|
|
161
|
-
zoomOffset: 8,
|
|
162
|
-
strokeColor: '#0071FF',
|
|
163
|
-
strokeWidth: 2,
|
|
164
|
-
removeExisting: true
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// 控制分级河流的总开关
|
|
168
|
-
riverManager.showRiverLayer(false); // 全部隐藏
|
|
169
|
-
riverManager.showRiverLayer(true); // 恢复并根据当前 Zoom 显示对应级别
|
|
170
|
-
|
|
171
|
-
// 示例 2: 添加静态河流,根据等级显示不同粗细
|
|
172
|
-
riverManager.addRiverWidthByLevel(riverGeoJSON, {
|
|
173
|
-
layerName: 'static-river',
|
|
174
|
-
strokeColor: '#0071FF',
|
|
175
|
-
levelWidthMap: {
|
|
176
|
-
1: 6, // 1级河流宽 6px
|
|
177
|
-
2: 5,
|
|
178
|
-
3: 4,
|
|
179
|
-
4: 3,
|
|
180
|
-
5: 1
|
|
181
|
-
},
|
|
182
|
-
zIndex: 10
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
// 清理资源
|
|
186
|
-
// riverManager.destroy();
|
|
187
|
-
```
|
|
1
|
+
# RiverLayerManager 河流图层管理类
|
|
2
|
+
|
|
3
|
+
`RiverLayerManager` 专门用于处理河流数据的分级显示和样式管理。它支持基于地图缩放级别(Zoom-based)的动态分级显示,以及基于河流属性等级(Level-based)的固定线宽渲染。
|
|
4
|
+
|
|
5
|
+
## 构造函数
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
constructor(map: Map, eventManager?: EventManager)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- **参数**:
|
|
12
|
+
- `map` (Map): OpenLayers 地图实例。
|
|
13
|
+
- `eventManager` (EventManager): 可选。事件管理器实例,如果未提供则内部创建。
|
|
14
|
+
|
|
15
|
+
## 接口定义
|
|
16
|
+
|
|
17
|
+
### RiverLayerOptions
|
|
18
|
+
|
|
19
|
+
河流图层配置选项,继承自 `LineOptions`。
|
|
20
|
+
|
|
21
|
+
| 属性 | 类型 | 必填 | 默认值 | 描述 |
|
|
22
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
23
|
+
| levelCount | `number` | 否 | `5` | 河流等级总数。用于分级显示循环加载。 |
|
|
24
|
+
| zoomOffset | `number` | 否 | `8` | 缩放级别偏移量。控制何时显示哪一级河流 (Zoom > Level + Offset)。 |
|
|
25
|
+
| levelWidthMap | `RiverLevelWidthMap` | 否 | 默认映射 | 河流级别与线宽的映射对象。 |
|
|
26
|
+
| removeExisting | `boolean` | 否 | `false` | 添加前是否删除由本管理器创建的旧图层。 |
|
|
27
|
+
| layerName | `string` | 否 | - | 图层名称,用于标识和清理。 |
|
|
28
|
+
| visible | `boolean` | 否 | `true` | 初始可见性。 |
|
|
29
|
+
| strokeColor | `string` | 否 | - | 线条颜色。 |
|
|
30
|
+
| strokeWidth | `number` | 否 | - | 基础线宽(如果未使用 levelWidthMap)。 |
|
|
31
|
+
| zIndex | `number` | 否 | - | 图层 Z-Index。 |
|
|
32
|
+
| projectionOptOptions | `any` | 否 | - | GeoJSON 读取时的投影选项。 |
|
|
33
|
+
|
|
34
|
+
### RiverLevelWidthMap
|
|
35
|
+
|
|
36
|
+
河流级别线宽映射接口。
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
interface RiverLevelWidthMap {
|
|
40
|
+
[level: number]: number;
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
默认映射 (`ConfigManager.DEFAULT_RIVER_LEVEL_WIDTH_MAP`) 通常为 `{1: 5, 2: 4, 3: 3, 4: 2, 5: 1}` 等类似结构。
|
|
45
|
+
|
|
46
|
+
## 方法
|
|
47
|
+
|
|
48
|
+
### 分级显示 (Zoom-based)
|
|
49
|
+
|
|
50
|
+
根据地图缩放级别自动显示不同等级的河流。通常用于实现“缩放越大约详细”的效果。
|
|
51
|
+
|
|
52
|
+
#### addRiverLayersByZoom
|
|
53
|
+
|
|
54
|
+
直接传递 GeoJSON 数据添加分级河流图层。
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
addRiverLayersByZoom(fyRiverJson: MapJSONData, options?: RiverLayerOptions): void
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- **参数**:
|
|
61
|
+
- `fyRiverJson`: 河流 GeoJSON 数据对象。
|
|
62
|
+
- `options`: 配置选项。
|
|
63
|
+
|
|
64
|
+
#### addRiverLayersByZoomByUrl
|
|
65
|
+
|
|
66
|
+
通过 URL 加载 GeoJSON 数据并添加分级河流图层。
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
addRiverLayersByZoomByUrl(url: string, options?: RiverLayerOptions): void
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### showRiverLayer
|
|
73
|
+
|
|
74
|
+
控制分级河流图层的总开关。
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
showRiverLayer(show: boolean): void
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### showRiverLayerByZoom
|
|
81
|
+
|
|
82
|
+
手动触发根据当前缩放级别更新图层可见性(通常不需要手动调用,已绑定 `moveend` 事件)。
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
showRiverLayerByZoom(): void
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 宽度分级 (Level-based Width)
|
|
89
|
+
|
|
90
|
+
根据河流数据中的 `level` 属性渲染不同宽度的线条,通常用于静态展示不同等级河流的粗细差异。
|
|
91
|
+
|
|
92
|
+
#### addRiverWidthByLevel
|
|
93
|
+
|
|
94
|
+
直接传递 GeoJSON 数据添加按等级设定宽度的河流。
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
addRiverWidthByLevel(data: MapJSONData, options?: RiverLayerOptions): VectorLayer<VectorSource>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- **返回值**: 创建的矢量图层。
|
|
101
|
+
|
|
102
|
+
#### addRiverWidthByLevelByUrl
|
|
103
|
+
|
|
104
|
+
通过 URL 加载 GeoJSON 数据并添加按等级设定宽度的河流。
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
addRiverWidthByLevelByUrl(url: string, options?: RiverLayerOptions): VectorLayer<VectorSource>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 管理与清理
|
|
111
|
+
|
|
112
|
+
#### clearRiverLayers
|
|
113
|
+
|
|
114
|
+
清除所有由该管理器创建的分级河流图层。
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
clearRiverLayers(): void
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### getRiverLayerVisibility
|
|
121
|
+
|
|
122
|
+
获取当前分级河流图层的总显示状态。
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
getRiverLayerVisibility(): boolean
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### getRiverLayers
|
|
129
|
+
|
|
130
|
+
获取当前管理的所有分级河流图层列表。
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
getRiverLayers(): VectorLayer<VectorSource>[]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
#### destroy
|
|
137
|
+
|
|
138
|
+
销毁管理器,清理所有图层和事件监听。
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
destroy(): void
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 使用示例
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
import { MyOl, RiverLayerManager } from 'my-openlayer';
|
|
148
|
+
|
|
149
|
+
const map = new MyOl('map-container');
|
|
150
|
+
const riverManager = new RiverLayerManager(map.map);
|
|
151
|
+
|
|
152
|
+
// 假设 riverGeoJSON 数据中每个 feature 都有 properties.level (1-5)
|
|
153
|
+
|
|
154
|
+
// 示例 1: 添加分级河流(随地图缩放自动显隐不同级别的河流)
|
|
155
|
+
// Level 1 在 Zoom > 9 (1+8) 显示
|
|
156
|
+
// Level 2 在 Zoom > 10 (2+8) 显示
|
|
157
|
+
// ...
|
|
158
|
+
riverManager.addRiverLayersByZoom(riverGeoJSON, {
|
|
159
|
+
layerName: 'dynamic-river',
|
|
160
|
+
levelCount: 5,
|
|
161
|
+
zoomOffset: 8,
|
|
162
|
+
strokeColor: '#0071FF',
|
|
163
|
+
strokeWidth: 2,
|
|
164
|
+
removeExisting: true
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// 控制分级河流的总开关
|
|
168
|
+
riverManager.showRiverLayer(false); // 全部隐藏
|
|
169
|
+
riverManager.showRiverLayer(true); // 恢复并根据当前 Zoom 显示对应级别
|
|
170
|
+
|
|
171
|
+
// 示例 2: 添加静态河流,根据等级显示不同粗细
|
|
172
|
+
riverManager.addRiverWidthByLevel(riverGeoJSON, {
|
|
173
|
+
layerName: 'static-river',
|
|
174
|
+
strokeColor: '#0071FF',
|
|
175
|
+
levelWidthMap: {
|
|
176
|
+
1: 6, // 1级河流宽 6px
|
|
177
|
+
2: 5,
|
|
178
|
+
3: 4,
|
|
179
|
+
4: 3,
|
|
180
|
+
5: 1
|
|
181
|
+
},
|
|
182
|
+
zIndex: 10
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// 清理资源
|
|
186
|
+
// riverManager.destroy();
|
|
187
|
+
```
|
package/docs/SelectHandler.md
CHANGED
|
@@ -1,147 +1,147 @@
|
|
|
1
|
-
# SelectHandler 类
|
|
2
|
-
|
|
3
|
-
`SelectHandler` 类用于处理地图上的要素选择交互,支持点击、悬停、Ctrl+点击等多种模式,并支持编程式选择。
|
|
4
|
-
|
|
5
|
-
## 构造函数
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
constructor(map: Map)
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
- **map**: OpenLayers 地图实例。
|
|
12
|
-
|
|
13
|
-
## 接口定义
|
|
14
|
-
|
|
15
|
-
### SelectOptions
|
|
16
|
-
|
|
17
|
-
| 属性名 | 类型 | 说明 |
|
|
18
|
-
| :--- | :--- | :--- |
|
|
19
|
-
| multi | `boolean` | 是否支持多选,默认 `false` |
|
|
20
|
-
| layerFilter | `string[]` | 图层过滤器,指定可选择的图层名称列表 |
|
|
21
|
-
| featureFilter | `(feature: FeatureLike) => boolean` | 要素过滤器函数 |
|
|
22
|
-
| hitTolerance | `number` | 点击容差(像素),默认为 0 |
|
|
23
|
-
| selectStyle | `Style \| Style[] \| ((feature: FeatureLike) => Style \| Style[])` | 选中要素的样式 |
|
|
24
|
-
| onSelect | `(event: SelectCallbackEvent) => void` | 选中要素时的回调函数 |
|
|
25
|
-
| onDeselect | `(event: SelectCallbackEvent) => void` | 取消选中要素时的回调函数 |
|
|
26
|
-
|
|
27
|
-
### ProgrammaticSelectOptions
|
|
28
|
-
|
|
29
|
-
| 属性名 | 类型 | 说明 |
|
|
30
|
-
| :--- | :--- | :--- |
|
|
31
|
-
| layerName | `string` | 图层名称,指定在哪个图层中选择要素 |
|
|
32
|
-
| selectStyle | `Style \| Style[] \| ((feature: FeatureLike) => Style \| Style[])` | 自定义选中样式(仅作用于此次选择) |
|
|
33
|
-
| fitView | `boolean` | 是否定位至选中要素,默认 `false` |
|
|
34
|
-
| fitDuration | `number` | 定位动画持续时间(毫秒),默认 500 |
|
|
35
|
-
| fitPadding | `number` | 定位时的边距(像素),默认 100 |
|
|
36
|
-
|
|
37
|
-
### SelectMode
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
type SelectMode = 'click' | 'hover' | 'ctrl';
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## 方法
|
|
44
|
-
|
|
45
|
-
### enableSelect
|
|
46
|
-
|
|
47
|
-
启用要素选择。
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
enableSelect(mode: SelectMode = 'click', options?: SelectOptions): this
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
- **mode**: 选择模式。
|
|
54
|
-
- **options**: 配置选项。
|
|
55
|
-
- **返回值**: `SelectHandler` 实例,支持链式调用。
|
|
56
|
-
|
|
57
|
-
### disableSelect
|
|
58
|
-
|
|
59
|
-
禁用要素选择。
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
disableSelect(): this
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
- **返回值**: `SelectHandler` 实例。
|
|
66
|
-
|
|
67
|
-
### clearSelection
|
|
68
|
-
|
|
69
|
-
清除所有选择(包括交互式和编程式)。
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
clearSelection(): this
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
- **返回值**: `SelectHandler` 实例。
|
|
76
|
-
|
|
77
|
-
### selectByIds
|
|
78
|
-
|
|
79
|
-
通过要素 ID 编程式选择要素。
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
selectByIds(featureIds: string[], options?: ProgrammaticSelectOptions): this
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
- **featureIds**: 要素 ID 数组。
|
|
86
|
-
- **options**: 编程式选择选项。
|
|
87
|
-
- **返回值**: `SelectHandler` 实例。
|
|
88
|
-
|
|
89
|
-
### selectByProperty
|
|
90
|
-
|
|
91
|
-
通过属性编程式选择要素。
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
selectByProperty(propertyName: string, propertyValue: any, options?: ProgrammaticSelectOptions): this
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
- **propertyName**: 属性名。
|
|
98
|
-
- **propertyValue**: 属性值。
|
|
99
|
-
- **options**: 编程式选择选项。
|
|
100
|
-
- **返回值**: `SelectHandler` 实例。
|
|
101
|
-
|
|
102
|
-
## 使用示例
|
|
103
|
-
|
|
104
|
-
### 启用点击选择
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
import { SelectHandler } from 'my-openlayers';
|
|
108
|
-
|
|
109
|
-
const selectHandler = new SelectHandler(map);
|
|
110
|
-
|
|
111
|
-
// 启用点击选择,仅针对 'cities' 图层
|
|
112
|
-
selectHandler.enableSelect('click', {
|
|
113
|
-
layerFilter: ['cities'],
|
|
114
|
-
onSelect: (event) => {
|
|
115
|
-
console.log('Selected:', event.selected);
|
|
116
|
-
},
|
|
117
|
-
onDeselect: (event) => {
|
|
118
|
-
console.log('Deselected:', event.deselected);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### 启用悬停高亮
|
|
124
|
-
|
|
125
|
-
```typescript
|
|
126
|
-
selectHandler.enableSelect('hover', {
|
|
127
|
-
selectStyle: new Style({
|
|
128
|
-
stroke: new Stroke({ color: 'yellow', width: 4 })
|
|
129
|
-
})
|
|
130
|
-
});
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### 编程式选择并定位
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
// 选择 ID 为 'beijing' 的要素并自动定位
|
|
137
|
-
selectHandler.selectByIds(['beijing'], {
|
|
138
|
-
fitView: true,
|
|
139
|
-
fitPadding: 50
|
|
140
|
-
});
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### 清除选择
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
selectHandler.clearSelection();
|
|
147
|
-
```
|
|
1
|
+
# SelectHandler 类
|
|
2
|
+
|
|
3
|
+
`SelectHandler` 类用于处理地图上的要素选择交互,支持点击、悬停、Ctrl+点击等多种模式,并支持编程式选择。
|
|
4
|
+
|
|
5
|
+
## 构造函数
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
constructor(map: Map)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- **map**: OpenLayers 地图实例。
|
|
12
|
+
|
|
13
|
+
## 接口定义
|
|
14
|
+
|
|
15
|
+
### SelectOptions
|
|
16
|
+
|
|
17
|
+
| 属性名 | 类型 | 说明 |
|
|
18
|
+
| :--- | :--- | :--- |
|
|
19
|
+
| multi | `boolean` | 是否支持多选,默认 `false` |
|
|
20
|
+
| layerFilter | `string[]` | 图层过滤器,指定可选择的图层名称列表 |
|
|
21
|
+
| featureFilter | `(feature: FeatureLike) => boolean` | 要素过滤器函数 |
|
|
22
|
+
| hitTolerance | `number` | 点击容差(像素),默认为 0 |
|
|
23
|
+
| selectStyle | `Style \| Style[] \| ((feature: FeatureLike) => Style \| Style[])` | 选中要素的样式 |
|
|
24
|
+
| onSelect | `(event: SelectCallbackEvent) => void` | 选中要素时的回调函数 |
|
|
25
|
+
| onDeselect | `(event: SelectCallbackEvent) => void` | 取消选中要素时的回调函数 |
|
|
26
|
+
|
|
27
|
+
### ProgrammaticSelectOptions
|
|
28
|
+
|
|
29
|
+
| 属性名 | 类型 | 说明 |
|
|
30
|
+
| :--- | :--- | :--- |
|
|
31
|
+
| layerName | `string` | 图层名称,指定在哪个图层中选择要素 |
|
|
32
|
+
| selectStyle | `Style \| Style[] \| ((feature: FeatureLike) => Style \| Style[])` | 自定义选中样式(仅作用于此次选择) |
|
|
33
|
+
| fitView | `boolean` | 是否定位至选中要素,默认 `false` |
|
|
34
|
+
| fitDuration | `number` | 定位动画持续时间(毫秒),默认 500 |
|
|
35
|
+
| fitPadding | `number` | 定位时的边距(像素),默认 100 |
|
|
36
|
+
|
|
37
|
+
### SelectMode
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
type SelectMode = 'click' | 'hover' | 'ctrl';
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 方法
|
|
44
|
+
|
|
45
|
+
### enableSelect
|
|
46
|
+
|
|
47
|
+
启用要素选择。
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
enableSelect(mode: SelectMode = 'click', options?: SelectOptions): this
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- **mode**: 选择模式。
|
|
54
|
+
- **options**: 配置选项。
|
|
55
|
+
- **返回值**: `SelectHandler` 实例,支持链式调用。
|
|
56
|
+
|
|
57
|
+
### disableSelect
|
|
58
|
+
|
|
59
|
+
禁用要素选择。
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
disableSelect(): this
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- **返回值**: `SelectHandler` 实例。
|
|
66
|
+
|
|
67
|
+
### clearSelection
|
|
68
|
+
|
|
69
|
+
清除所有选择(包括交互式和编程式)。
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
clearSelection(): this
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- **返回值**: `SelectHandler` 实例。
|
|
76
|
+
|
|
77
|
+
### selectByIds
|
|
78
|
+
|
|
79
|
+
通过要素 ID 编程式选择要素。
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
selectByIds(featureIds: string[], options?: ProgrammaticSelectOptions): this
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- **featureIds**: 要素 ID 数组。
|
|
86
|
+
- **options**: 编程式选择选项。
|
|
87
|
+
- **返回值**: `SelectHandler` 实例。
|
|
88
|
+
|
|
89
|
+
### selectByProperty
|
|
90
|
+
|
|
91
|
+
通过属性编程式选择要素。
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
selectByProperty(propertyName: string, propertyValue: any, options?: ProgrammaticSelectOptions): this
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- **propertyName**: 属性名。
|
|
98
|
+
- **propertyValue**: 属性值。
|
|
99
|
+
- **options**: 编程式选择选项。
|
|
100
|
+
- **返回值**: `SelectHandler` 实例。
|
|
101
|
+
|
|
102
|
+
## 使用示例
|
|
103
|
+
|
|
104
|
+
### 启用点击选择
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { SelectHandler } from 'my-openlayers';
|
|
108
|
+
|
|
109
|
+
const selectHandler = new SelectHandler(map);
|
|
110
|
+
|
|
111
|
+
// 启用点击选择,仅针对 'cities' 图层
|
|
112
|
+
selectHandler.enableSelect('click', {
|
|
113
|
+
layerFilter: ['cities'],
|
|
114
|
+
onSelect: (event) => {
|
|
115
|
+
console.log('Selected:', event.selected);
|
|
116
|
+
},
|
|
117
|
+
onDeselect: (event) => {
|
|
118
|
+
console.log('Deselected:', event.deselected);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 启用悬停高亮
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
selectHandler.enableSelect('hover', {
|
|
127
|
+
selectStyle: new Style({
|
|
128
|
+
stroke: new Stroke({ color: 'yellow', width: 4 })
|
|
129
|
+
})
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 编程式选择并定位
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
// 选择 ID 为 'beijing' 的要素并自动定位
|
|
137
|
+
selectHandler.selectByIds(['beijing'], {
|
|
138
|
+
fitView: true,
|
|
139
|
+
fitPadding: 50
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 清除选择
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
selectHandler.clearSelection();
|
|
147
|
+
```
|