my-openlayer 2.4.12 → 2.5.1
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 +251 -251
- package/LICENSE +21 -21
- package/MyOl.d.ts +9 -9
- package/MyOl.js +17 -14
- package/README.md +174 -148
- package/core/line/Line.d.ts +40 -0
- package/core/line/Line.js +144 -0
- package/core/line/LineFeatureFactory.d.ts +17 -0
- package/core/line/LineFeatureFactory.js +75 -0
- package/core/line/LineFlowAnimator.d.ts +53 -0
- package/core/line/LineFlowAnimator.js +297 -0
- package/core/line/LineStyleFactory.d.ts +43 -0
- package/core/line/LineStyleFactory.js +135 -0
- package/core/{RiverLayerManager.d.ts → line/RiverLayerManager.d.ts} +2 -2
- package/core/{RiverLayerManager.js → line/RiverLayerManager.js} +3 -5
- package/core/line/index.d.ts +6 -0
- package/core/line/index.js +5 -0
- package/core/{ConfigManager.d.ts → map/ConfigManager.d.ts} +25 -1
- package/core/{ConfigManager.js → map/ConfigManager.js} +22 -1
- package/core/{EventManager.d.ts → map/EventManager.d.ts} +1 -1
- package/core/{EventManager.js → map/EventManager.js} +2 -2
- package/core/{MapBaseLayers.d.ts → map/MapBaseLayers.d.ts} +1 -1
- package/core/{MapBaseLayers.js → map/MapBaseLayers.js} +3 -3
- package/core/{MapTools.d.ts → map/MapTools.d.ts} +5 -2
- package/core/{MapTools.js → map/MapTools.js} +11 -5
- package/core/{MeasureHandler.d.ts → map/MeasureHandler.d.ts} +1 -1
- package/core/{MeasureHandler.js → map/MeasureHandler.js} +41 -41
- package/core/map/index.d.ts +5 -0
- package/core/map/index.js +5 -0
- package/core/{Point.d.ts → point/Point.d.ts} +6 -14
- package/core/point/Point.js +272 -0
- package/core/point/PointClusterLayer.d.ts +10 -0
- package/core/point/PointClusterLayer.js +52 -0
- package/core/point/PointOverlay.d.ts +13 -0
- package/core/point/PointOverlay.js +57 -0
- package/core/point/PointPulseLayer.d.ts +13 -0
- package/core/point/PointPulseLayer.js +207 -0
- package/core/point/index.d.ts +4 -0
- package/core/point/index.js +4 -0
- package/core/{Polygon.d.ts → polygon/Polygon.d.ts} +4 -50
- package/core/polygon/Polygon.js +248 -0
- package/core/polygon/PolygonHeatmapLayer.d.ts +11 -0
- package/core/polygon/PolygonHeatmapLayer.js +40 -0
- package/core/polygon/PolygonImageLayer.d.ts +9 -0
- package/core/polygon/PolygonImageLayer.js +61 -0
- package/core/polygon/PolygonMaskLayer.d.ts +20 -0
- package/core/polygon/PolygonMaskLayer.js +107 -0
- package/core/polygon/PolygonStyleFactory.d.ts +12 -0
- package/core/polygon/PolygonStyleFactory.js +100 -0
- package/core/polygon/index.d.ts +5 -0
- package/core/polygon/index.js +5 -0
- package/core/{SelectHandler.d.ts → select/SelectHandler.d.ts} +2 -3
- package/core/{SelectHandler.js → select/SelectHandler.js} +4 -4
- package/core/select/index.d.ts +1 -0
- package/core/select/index.js +1 -0
- package/core/{VueTemplatePoint.d.ts → vue-template-point/VueTemplatePoint.d.ts} +1 -1
- package/core/{VueTemplatePoint.js → vue-template-point/VueTemplatePoint.js} +4 -4
- package/core/vue-template-point/index.d.ts +1 -0
- package/core/vue-template-point/index.js +1 -0
- 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 +215 -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 +136 -136
- 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 +73 -73
- package/index.d.ts +10 -15
- package/index.js +7 -13
- package/package.json +11 -1
- package/types/base.d.ts +47 -0
- package/types/base.js +1 -0
- package/types/common.d.ts +59 -0
- package/types/common.js +1 -0
- package/types/index.d.ts +9 -0
- package/types/index.js +1 -0
- package/types/line.d.ts +41 -0
- package/types/line.js +1 -0
- package/types/map.d.ts +77 -0
- package/types/map.js +1 -0
- package/types/point.d.ts +54 -0
- package/types/point.js +1 -0
- package/types/polygon.d.ts +8 -0
- package/types/polygon.js +1 -0
- package/types/select.d.ts +25 -0
- package/types/select.js +1 -0
- package/types/vue-template-point.d.ts +54 -0
- package/{types.js → types/vue-template-point.js} +0 -3
- package/utils/ProjectionUtils.d.ts +28 -0
- package/utils/ProjectionUtils.js +34 -0
- package/utils/ValidationUtils.d.ts +33 -86
- package/utils/ValidationUtils.js +60 -165
- package/core/Line.d.ts +0 -49
- package/core/Line.js +0 -114
- package/core/Point.js +0 -560
- package/core/Polygon.js +0 -646
- package/docs/.vitepress/dist/404.html +0 -22
- package/docs/.vitepress/dist/ConfigManager.html +0 -46
- package/docs/.vitepress/dist/ErrorHandler.html +0 -52
- package/docs/.vitepress/dist/EventManager.html +0 -58
- package/docs/.vitepress/dist/Line.html +0 -92
- package/docs/.vitepress/dist/MapBaseLayers.html +0 -52
- package/docs/.vitepress/dist/MapTools.html +0 -81
- package/docs/.vitepress/dist/MeasureHandler.html +0 -32
- package/docs/.vitepress/dist/MyOl.html +0 -62
- package/docs/.vitepress/dist/Point.html +0 -81
- package/docs/.vitepress/dist/Polygon.html +0 -102
- package/docs/.vitepress/dist/RiverLayerManager.html +0 -66
- package/docs/.vitepress/dist/SelectHandler.html +0 -46
- package/docs/.vitepress/dist/ValidationUtils.html +0 -47
- package/docs/.vitepress/dist/VueTemplatePoint.html +0 -112
- package/docs/.vitepress/dist/assets/ConfigManager.md.BOMdGTaa.js +0 -22
- package/docs/.vitepress/dist/assets/ConfigManager.md.BOMdGTaa.lean.js +0 -1
- package/docs/.vitepress/dist/assets/ErrorHandler.md.yUiuJ9w9.js +0 -28
- package/docs/.vitepress/dist/assets/ErrorHandler.md.yUiuJ9w9.lean.js +0 -1
- package/docs/.vitepress/dist/assets/EventManager.md.BhCUVy1f.js +0 -34
- package/docs/.vitepress/dist/assets/EventManager.md.BhCUVy1f.lean.js +0 -1
- package/docs/.vitepress/dist/assets/Line.md.BAQOzmSt.js +0 -68
- package/docs/.vitepress/dist/assets/Line.md.BAQOzmSt.lean.js +0 -1
- package/docs/.vitepress/dist/assets/MapBaseLayers.md.Bw0L_m0b.js +0 -28
- package/docs/.vitepress/dist/assets/MapBaseLayers.md.Bw0L_m0b.lean.js +0 -1
- package/docs/.vitepress/dist/assets/MapTools.md.DaYgiDPe.js +0 -57
- package/docs/.vitepress/dist/assets/MapTools.md.DaYgiDPe.lean.js +0 -1
- package/docs/.vitepress/dist/assets/MeasureHandler.md.7Sf4ymRv.js +0 -8
- package/docs/.vitepress/dist/assets/MeasureHandler.md.7Sf4ymRv.lean.js +0 -1
- package/docs/.vitepress/dist/assets/MyOl.md.D-14Gzjy.js +0 -38
- package/docs/.vitepress/dist/assets/MyOl.md.D-14Gzjy.lean.js +0 -1
- package/docs/.vitepress/dist/assets/Point.md.Bi9juuuv.js +0 -57
- package/docs/.vitepress/dist/assets/Point.md.Bi9juuuv.lean.js +0 -1
- package/docs/.vitepress/dist/assets/Polygon.md.-JIqEvzD.js +0 -78
- package/docs/.vitepress/dist/assets/Polygon.md.-JIqEvzD.lean.js +0 -1
- package/docs/.vitepress/dist/assets/RiverLayerManager.md.CfUu2RxH.js +0 -42
- package/docs/.vitepress/dist/assets/RiverLayerManager.md.CfUu2RxH.lean.js +0 -1
- package/docs/.vitepress/dist/assets/SelectHandler.md.COR4ez_p.js +0 -22
- package/docs/.vitepress/dist/assets/SelectHandler.md.COR4ez_p.lean.js +0 -1
- package/docs/.vitepress/dist/assets/ValidationUtils.md.ReTVWa73.js +0 -23
- package/docs/.vitepress/dist/assets/ValidationUtils.md.ReTVWa73.lean.js +0 -1
- package/docs/.vitepress/dist/assets/VueTemplatePoint.md.CtxSb5Pm.js +0 -88
- package/docs/.vitepress/dist/assets/VueTemplatePoint.md.CtxSb5Pm.lean.js +0 -1
- package/docs/.vitepress/dist/assets/app.YvjVuxaB.js +0 -1
- package/docs/.vitepress/dist/assets/chunks/framework.C_W0ODpn.js +0 -18
- package/docs/.vitepress/dist/assets/chunks/theme.Bf87fILP.js +0 -1
- package/docs/.vitepress/dist/assets/index.md.BJz6tHSr.js +0 -26
- package/docs/.vitepress/dist/assets/index.md.BJz6tHSr.lean.js +0 -1
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/docs/.vitepress/dist/assets/style.C2pAQzDq.css +0 -1
- package/docs/.vitepress/dist/hashmap.json +0 -1
- package/docs/.vitepress/dist/index.html +0 -50
- package/docs/.vitepress/dist/vp-icons.css +0 -1
- package/types.d.ts +0 -431
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 可携带投影参数的配置对象。
|
|
3
|
+
*/
|
|
4
|
+
export interface ProjectionOptionLike {
|
|
5
|
+
dataProjection?: string;
|
|
6
|
+
featureProjection?: string;
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated 新项目请使用 dataProjection / featureProjection。
|
|
9
|
+
*/
|
|
10
|
+
projectionOptOptions?: {
|
|
11
|
+
dataProjection?: string;
|
|
12
|
+
featureProjection?: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 投影处理工具,统一显式字段与旧 projectionOptOptions 的兼容逻辑。
|
|
18
|
+
*/
|
|
19
|
+
export default class ProjectionUtils {
|
|
20
|
+
/**
|
|
21
|
+
* 生成 GeoJSON 读取投影参数。显式字段优先于旧 projectionOptOptions。
|
|
22
|
+
*/
|
|
23
|
+
static getGeoJSONReadOptions(options?: ProjectionOptionLike): Record<string, unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* 将输入坐标转换到目标要素投影。未传目标投影时保持原坐标。
|
|
26
|
+
*/
|
|
27
|
+
static transformCoordinate(coordinate: number[], options?: ProjectionOptionLike): number[];
|
|
28
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { transform } from 'ol/proj';
|
|
2
|
+
/**
|
|
3
|
+
* 投影处理工具,统一显式字段与旧 projectionOptOptions 的兼容逻辑。
|
|
4
|
+
*/
|
|
5
|
+
export default class ProjectionUtils {
|
|
6
|
+
/**
|
|
7
|
+
* 生成 GeoJSON 读取投影参数。显式字段优先于旧 projectionOptOptions。
|
|
8
|
+
*/
|
|
9
|
+
static getGeoJSONReadOptions(options) {
|
|
10
|
+
const legacyOptions = options?.projectionOptOptions ?? {};
|
|
11
|
+
const readOptions = { ...legacyOptions };
|
|
12
|
+
if (options?.dataProjection) {
|
|
13
|
+
readOptions.dataProjection = options.dataProjection;
|
|
14
|
+
}
|
|
15
|
+
if (options?.featureProjection) {
|
|
16
|
+
readOptions.featureProjection = options.featureProjection;
|
|
17
|
+
}
|
|
18
|
+
return readOptions;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 将输入坐标转换到目标要素投影。未传目标投影时保持原坐标。
|
|
22
|
+
*/
|
|
23
|
+
static transformCoordinate(coordinate, options) {
|
|
24
|
+
const featureProjection = options?.featureProjection ?? options?.projectionOptOptions?.featureProjection;
|
|
25
|
+
if (!featureProjection) {
|
|
26
|
+
return coordinate;
|
|
27
|
+
}
|
|
28
|
+
const dataProjection = options?.dataProjection ?? options?.projectionOptOptions?.dataProjection ?? 'EPSG:4326';
|
|
29
|
+
if (dataProjection === featureProjection) {
|
|
30
|
+
return coordinate;
|
|
31
|
+
}
|
|
32
|
+
return transform(coordinate, dataProjection, featureProjection);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,159 +1,106 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 验证工具类
|
|
3
|
+
* 统一管理参数校验逻辑,错误记录由调用方或 ErrorHandler 负责。
|
|
4
|
+
*/
|
|
5
|
+
export default class ValidationUtils {
|
|
2
6
|
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
* 判断值是否为有效数字。
|
|
8
|
+
*/
|
|
9
|
+
private static isFiniteNumber;
|
|
10
|
+
/**
|
|
11
|
+
* 验证坐标是否有效。
|
|
7
12
|
*/
|
|
8
13
|
static isValidCoordinate(longitude: number, latitude: number): boolean;
|
|
9
14
|
/**
|
|
10
|
-
*
|
|
11
|
-
* @param lgtd 经度
|
|
12
|
-
* @param lttd 纬度
|
|
13
|
-
* @returns 是否有效
|
|
15
|
+
* 验证经纬度坐标,保留布尔返回以兼容旧调用。
|
|
14
16
|
*/
|
|
15
17
|
static validateLngLat(lgtd: number, lttd: number): boolean;
|
|
16
18
|
/**
|
|
17
|
-
*
|
|
18
|
-
* @param pointData 点数据数组
|
|
19
|
-
* @returns 是否有效
|
|
19
|
+
* 验证点数据数组,保留布尔返回以兼容旧调用。
|
|
20
20
|
*/
|
|
21
21
|
static validatePointData(pointData: any[]): boolean;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param item 包含坐标的数据项
|
|
25
|
-
* @returns 是否有效
|
|
23
|
+
* 验证单个点的坐标,保留布尔返回以兼容旧调用。
|
|
26
24
|
*/
|
|
27
25
|
static validateCoordinates(item: any): boolean;
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
30
|
-
* @param color 颜色字符串
|
|
31
|
-
* @returns 是否有效
|
|
27
|
+
* 验证颜色字符串是否有效。
|
|
32
28
|
*/
|
|
33
29
|
static isValidColor(color: string): boolean;
|
|
34
30
|
/**
|
|
35
|
-
*
|
|
36
|
-
* @param layerName 图层名称
|
|
37
|
-
* @returns 是否有效
|
|
31
|
+
* 验证图层名称是否有效。
|
|
38
32
|
*/
|
|
39
33
|
static isValidLayerName(layerName: string): boolean;
|
|
40
34
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @param extent 范围数组 [minX, minY, maxX, maxY]
|
|
43
|
-
* @returns 是否有效
|
|
35
|
+
* 验证范围是否有效。
|
|
44
36
|
*/
|
|
45
37
|
static isValidExtent(extent: number[]): boolean;
|
|
46
38
|
/**
|
|
47
|
-
* 验证GeoJSON
|
|
48
|
-
* @param data GeoJSON数据
|
|
49
|
-
* @returns 是否有效
|
|
39
|
+
* 验证 GeoJSON 数据,保留布尔返回以兼容旧调用。
|
|
50
40
|
*/
|
|
51
41
|
static validateGeoJSONData(data: any): boolean;
|
|
52
42
|
/**
|
|
53
|
-
*
|
|
54
|
-
* @param options 配置选项
|
|
55
|
-
* @returns 是否有效
|
|
43
|
+
* 验证配置选项,保留布尔返回以兼容旧调用。
|
|
56
44
|
*/
|
|
57
45
|
static validateOptions(options: any): boolean;
|
|
58
46
|
/**
|
|
59
|
-
*
|
|
60
|
-
* @param value 数值
|
|
61
|
-
* @param min 最小值
|
|
62
|
-
* @param max 最大值
|
|
63
|
-
* @returns 是否有效
|
|
47
|
+
* 验证数值范围。
|
|
64
48
|
*/
|
|
65
49
|
static validateNumberRange(value: number, min: number, max: number): boolean;
|
|
66
50
|
/**
|
|
67
|
-
* 验证DOM元素ID
|
|
68
|
-
* @param id 元素ID
|
|
69
|
-
* @returns 是否有效
|
|
51
|
+
* 验证 DOM 元素 ID,保留布尔返回以兼容旧调用。
|
|
70
52
|
*/
|
|
71
53
|
static validateElementId(id: string): boolean;
|
|
72
54
|
/**
|
|
73
|
-
* 验证Vue
|
|
74
|
-
* @param pointInfoList 点位信息列表
|
|
75
|
-
* @param template Vue组件模板
|
|
76
|
-
* @param Vue Vue实例
|
|
77
|
-
* @returns 是否有效
|
|
55
|
+
* 验证 Vue 相关参数,保留布尔返回以兼容旧调用。
|
|
78
56
|
*/
|
|
79
57
|
static validateVueParams(pointInfoList: any[], template: any, Vue: any): boolean;
|
|
80
58
|
/**
|
|
81
|
-
*
|
|
82
|
-
* @param layerName 图层名称
|
|
83
|
-
* @throws 如果图层名称无效则抛出异常
|
|
59
|
+
* 验证图层名称(抛出异常版本)。
|
|
84
60
|
*/
|
|
85
61
|
static validateLayerName(layerName: string): void;
|
|
86
62
|
/**
|
|
87
|
-
*
|
|
88
|
-
* @param imageData 图像数据
|
|
89
|
-
* @param allowEmptyImg 是否允许img为空
|
|
90
|
-
* @throws 如果图像数据无效则抛出异常
|
|
63
|
+
* 验证图像数据。
|
|
91
64
|
*/
|
|
92
65
|
static validateImageData(imageData: any, allowEmptyImg?: boolean): void;
|
|
93
66
|
/**
|
|
94
|
-
*
|
|
95
|
-
* @param data 遮罩数据
|
|
96
|
-
* @throws 如果遮罩数据无效则抛出异常
|
|
67
|
+
* 验证遮罩数据。
|
|
97
68
|
*/
|
|
98
69
|
static validateMaskData(data: any): void;
|
|
99
70
|
/**
|
|
100
|
-
*
|
|
101
|
-
* @param map 地图实例
|
|
102
|
-
* @throws 如果地图实例无效则抛出异常
|
|
71
|
+
* 验证地图实例。
|
|
103
72
|
*/
|
|
104
73
|
static validateMapInstance(map: any): void;
|
|
105
74
|
/**
|
|
106
|
-
*
|
|
107
|
-
* @param value 要验证的值
|
|
108
|
-
* @param message 错误消息
|
|
109
|
-
* @throws 如果值为空则抛出异常
|
|
75
|
+
* 验证必需参数。
|
|
110
76
|
*/
|
|
111
77
|
static validateRequired(value: any, message: string): void;
|
|
112
78
|
/**
|
|
113
|
-
*
|
|
114
|
-
* @param longitude 经度
|
|
115
|
-
* @param latitude 纬度
|
|
116
|
-
* @throws 如果坐标无效则抛出异常
|
|
79
|
+
* 验证坐标(抛出异常版本)。
|
|
117
80
|
*/
|
|
118
81
|
static validateCoordinate(longitude: number, latitude: number): void;
|
|
119
82
|
/**
|
|
120
|
-
*
|
|
121
|
-
* @param value 要验证的值
|
|
122
|
-
* @param expectedType 期望的类型
|
|
123
|
-
* @param message 错误消息
|
|
124
|
-
* @throws 如果类型不匹配则抛出异常
|
|
83
|
+
* 验证类型。
|
|
125
84
|
*/
|
|
126
85
|
static validateType(value: any, expectedType: string, message: string): void;
|
|
127
86
|
/**
|
|
128
|
-
*
|
|
129
|
-
* @param str 字符串
|
|
130
|
-
* @param message 错误消息
|
|
131
|
-
* @throws 如果字符串为空则抛出异常
|
|
87
|
+
* 验证非空字符串。
|
|
132
88
|
*/
|
|
133
89
|
static validateNonEmptyString(str: string, message: string): void;
|
|
134
90
|
/**
|
|
135
|
-
*
|
|
136
|
-
* @param map 地图实例
|
|
137
|
-
* @throws 如果地图实例无效则抛出异常
|
|
91
|
+
* 验证地图实例(通用版本)。
|
|
138
92
|
*/
|
|
139
93
|
static validateMap(map: any): void;
|
|
140
94
|
/**
|
|
141
|
-
*
|
|
142
|
-
* @param type 测量类型
|
|
143
|
-
* @throws 如果测量类型无效则抛出异常
|
|
95
|
+
* 验证测量类型。
|
|
144
96
|
*/
|
|
145
97
|
static validateMeasureType(type: string): void;
|
|
146
98
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @param value 数值
|
|
149
|
-
* @param message 错误消息
|
|
150
|
-
* @throws 如果数值不是正数则抛出异常
|
|
99
|
+
* 验证正数。
|
|
151
100
|
*/
|
|
152
101
|
static validatePositiveNumber(value: number, message: string): void;
|
|
153
102
|
/**
|
|
154
|
-
*
|
|
155
|
-
* @param layerName 图层名称(字符串或字符串数组)
|
|
156
|
-
* @throws 如果图层名称参数无效则抛出异常
|
|
103
|
+
* 验证图层名称参数。
|
|
157
104
|
*/
|
|
158
105
|
static validateLayerNameParam(layerName: string | string[]): void;
|
|
159
106
|
}
|
package/utils/ValidationUtils.js
CHANGED
|
@@ -1,188 +1,112 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 验证工具类
|
|
3
|
-
*
|
|
3
|
+
* 统一管理参数校验逻辑,错误记录由调用方或 ErrorHandler 负责。
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
export class ValidationUtils {
|
|
5
|
+
export default class ValidationUtils {
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
* 判断值是否为有效数字。
|
|
8
|
+
*/
|
|
9
|
+
static isFiniteNumber(value) {
|
|
10
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 验证坐标是否有效。
|
|
12
14
|
*/
|
|
13
15
|
static isValidCoordinate(longitude, latitude) {
|
|
14
|
-
return (
|
|
15
|
-
|
|
16
|
-
!isNaN(longitude) &&
|
|
17
|
-
!isNaN(latitude) &&
|
|
16
|
+
return (ValidationUtils.isFiniteNumber(longitude) &&
|
|
17
|
+
ValidationUtils.isFiniteNumber(latitude) &&
|
|
18
18
|
longitude >= -180 &&
|
|
19
19
|
longitude <= 180 &&
|
|
20
20
|
latitude >= -90 &&
|
|
21
21
|
latitude <= 90);
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param lgtd 经度
|
|
26
|
-
* @param lttd 纬度
|
|
27
|
-
* @returns 是否有效
|
|
24
|
+
* 验证经纬度坐标,保留布尔返回以兼容旧调用。
|
|
28
25
|
*/
|
|
29
26
|
static validateLngLat(lgtd, lttd) {
|
|
30
|
-
|
|
31
|
-
ErrorHandler.getInstance().error('Invalid longitude or latitude coordinates');
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
27
|
+
return ValidationUtils.isValidCoordinate(lgtd, lttd);
|
|
35
28
|
}
|
|
36
29
|
/**
|
|
37
|
-
*
|
|
38
|
-
* @param pointData 点数据数组
|
|
39
|
-
* @returns 是否有效
|
|
30
|
+
* 验证点数据数组,保留布尔返回以兼容旧调用。
|
|
40
31
|
*/
|
|
41
32
|
static validatePointData(pointData) {
|
|
42
|
-
|
|
43
|
-
ErrorHandler.getInstance().warn('Point data is empty or undefined');
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
return true;
|
|
33
|
+
return Array.isArray(pointData) && pointData.length > 0;
|
|
47
34
|
}
|
|
48
35
|
/**
|
|
49
|
-
*
|
|
50
|
-
* @param item 包含坐标的数据项
|
|
51
|
-
* @returns 是否有效
|
|
36
|
+
* 验证单个点的坐标,保留布尔返回以兼容旧调用。
|
|
52
37
|
*/
|
|
53
38
|
static validateCoordinates(item) {
|
|
54
|
-
if (!item.lgtd ||
|
|
55
|
-
ErrorHandler.getInstance().warn('Invalid coordinates for point:', item);
|
|
39
|
+
if (!item || item.lgtd === undefined || item.lgtd === null || item.lttd === undefined || item.lttd === null) {
|
|
56
40
|
return false;
|
|
57
41
|
}
|
|
58
|
-
return
|
|
42
|
+
return ValidationUtils.isValidCoordinate(Number(item.lgtd), Number(item.lttd));
|
|
59
43
|
}
|
|
60
44
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param color 颜色字符串
|
|
63
|
-
* @returns 是否有效
|
|
45
|
+
* 验证颜色字符串是否有效。
|
|
64
46
|
*/
|
|
65
47
|
static isValidColor(color) {
|
|
66
48
|
if (!color || typeof color !== 'string') {
|
|
67
49
|
return false;
|
|
68
50
|
}
|
|
69
|
-
// 简单的颜色格式验证
|
|
70
51
|
const colorRegex = /^(#[0-9A-Fa-f]{3,8}|rgba?\([^)]+\)|[a-zA-Z]+)$/;
|
|
71
52
|
return colorRegex.test(color);
|
|
72
53
|
}
|
|
73
54
|
/**
|
|
74
|
-
*
|
|
75
|
-
* @param layerName 图层名称
|
|
76
|
-
* @returns 是否有效
|
|
55
|
+
* 验证图层名称是否有效。
|
|
77
56
|
*/
|
|
78
57
|
static isValidLayerName(layerName) {
|
|
79
|
-
return
|
|
80
|
-
layerName.length > 0 &&
|
|
81
|
-
layerName.trim().length > 0);
|
|
58
|
+
return typeof layerName === 'string' && layerName.trim().length > 0;
|
|
82
59
|
}
|
|
83
60
|
/**
|
|
84
|
-
*
|
|
85
|
-
* @param extent 范围数组 [minX, minY, maxX, maxY]
|
|
86
|
-
* @returns 是否有效
|
|
61
|
+
* 验证范围是否有效。
|
|
87
62
|
*/
|
|
88
63
|
static isValidExtent(extent) {
|
|
89
64
|
return (Array.isArray(extent) &&
|
|
90
65
|
extent.length === 4 &&
|
|
91
|
-
extent.every(coord =>
|
|
92
|
-
extent[0] < extent[2] &&
|
|
93
|
-
extent[1] < extent[3]
|
|
94
|
-
);
|
|
66
|
+
extent.every(coord => ValidationUtils.isFiniteNumber(coord)) &&
|
|
67
|
+
extent[0] < extent[2] &&
|
|
68
|
+
extent[1] < extent[3]);
|
|
95
69
|
}
|
|
96
70
|
/**
|
|
97
|
-
* 验证GeoJSON
|
|
98
|
-
* @param data GeoJSON数据
|
|
99
|
-
* @returns 是否有效
|
|
71
|
+
* 验证 GeoJSON 数据,保留布尔返回以兼容旧调用。
|
|
100
72
|
*/
|
|
101
73
|
static validateGeoJSONData(data) {
|
|
102
|
-
|
|
103
|
-
ErrorHandler.getInstance().warn('GeoJSON data is required');
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
if (!data.features || !Array.isArray(data.features)) {
|
|
107
|
-
ErrorHandler.getInstance().warn('Invalid GeoJSON data: features array is required');
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
return true;
|
|
74
|
+
return !!data && Array.isArray(data.features);
|
|
111
75
|
}
|
|
112
76
|
/**
|
|
113
|
-
*
|
|
114
|
-
* @param options 配置选项
|
|
115
|
-
* @returns 是否有效
|
|
77
|
+
* 验证配置选项,保留布尔返回以兼容旧调用。
|
|
116
78
|
*/
|
|
117
79
|
static validateOptions(options) {
|
|
118
|
-
|
|
119
|
-
ErrorHandler.getInstance().warn('Options are required and must be an object');
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
return true;
|
|
80
|
+
return !!options && typeof options === 'object';
|
|
123
81
|
}
|
|
124
82
|
/**
|
|
125
|
-
*
|
|
126
|
-
* @param value 数值
|
|
127
|
-
* @param min 最小值
|
|
128
|
-
* @param max 最大值
|
|
129
|
-
* @returns 是否有效
|
|
83
|
+
* 验证数值范围。
|
|
130
84
|
*/
|
|
131
85
|
static validateNumberRange(value, min, max) {
|
|
132
|
-
return (
|
|
133
|
-
!isNaN(value) &&
|
|
134
|
-
value >= min &&
|
|
135
|
-
value <= max);
|
|
86
|
+
return ValidationUtils.isFiniteNumber(value) && value >= min && value <= max;
|
|
136
87
|
}
|
|
137
88
|
/**
|
|
138
|
-
* 验证DOM元素ID
|
|
139
|
-
* @param id 元素ID
|
|
140
|
-
* @returns 是否有效
|
|
89
|
+
* 验证 DOM 元素 ID,保留布尔返回以兼容旧调用。
|
|
141
90
|
*/
|
|
142
91
|
static validateElementId(id) {
|
|
143
|
-
|
|
144
|
-
ErrorHandler.getInstance().error('Element ID is required');
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
return true;
|
|
92
|
+
return typeof id === 'string' && id.trim().length > 0;
|
|
148
93
|
}
|
|
149
94
|
/**
|
|
150
|
-
* 验证Vue
|
|
151
|
-
* @param pointInfoList 点位信息列表
|
|
152
|
-
* @param template Vue组件模板
|
|
153
|
-
* @param Vue Vue实例
|
|
154
|
-
* @returns 是否有效
|
|
95
|
+
* 验证 Vue 相关参数,保留布尔返回以兼容旧调用。
|
|
155
96
|
*/
|
|
156
97
|
static validateVueParams(pointInfoList, template, Vue) {
|
|
157
|
-
|
|
158
|
-
ErrorHandler.getInstance().error('Valid point info list is required');
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
if (!template) {
|
|
162
|
-
ErrorHandler.getInstance().error('Vue template is required');
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
if (!Vue) {
|
|
166
|
-
ErrorHandler.getInstance().error('Vue instance is required');
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
return true;
|
|
98
|
+
return Array.isArray(pointInfoList) && pointInfoList.length > 0 && !!template && !!Vue;
|
|
170
99
|
}
|
|
171
100
|
/**
|
|
172
|
-
*
|
|
173
|
-
* @param layerName 图层名称
|
|
174
|
-
* @throws 如果图层名称无效则抛出异常
|
|
101
|
+
* 验证图层名称(抛出异常版本)。
|
|
175
102
|
*/
|
|
176
103
|
static validateLayerName(layerName) {
|
|
177
|
-
if (!layerName) {
|
|
104
|
+
if (!ValidationUtils.isValidLayerName(layerName)) {
|
|
178
105
|
throw new Error('Layer name is required');
|
|
179
106
|
}
|
|
180
107
|
}
|
|
181
108
|
/**
|
|
182
|
-
*
|
|
183
|
-
* @param imageData 图像数据
|
|
184
|
-
* @param allowEmptyImg 是否允许img为空
|
|
185
|
-
* @throws 如果图像数据无效则抛出异常
|
|
109
|
+
* 验证图像数据。
|
|
186
110
|
*/
|
|
187
111
|
static validateImageData(imageData, allowEmptyImg = false) {
|
|
188
112
|
if (!imageData) {
|
|
@@ -191,53 +115,38 @@ export class ValidationUtils {
|
|
|
191
115
|
if (!allowEmptyImg && !imageData.img) {
|
|
192
116
|
throw new Error('Invalid image data: img is required');
|
|
193
117
|
}
|
|
194
|
-
if (imageData.extent &&
|
|
118
|
+
if (imageData.extent && !ValidationUtils.isValidExtent(imageData.extent)) {
|
|
195
119
|
throw new Error('Invalid extent: must be an array of 4 numbers [minX, minY, maxX, maxY]');
|
|
196
120
|
}
|
|
197
121
|
}
|
|
198
122
|
/**
|
|
199
|
-
*
|
|
200
|
-
* @param data 遮罩数据
|
|
201
|
-
* @throws 如果遮罩数据无效则抛出异常
|
|
123
|
+
* 验证遮罩数据。
|
|
202
124
|
*/
|
|
203
125
|
static validateMaskData(data) {
|
|
204
|
-
if (
|
|
126
|
+
if (data === undefined || data === null) {
|
|
205
127
|
throw new Error('Mask data is required');
|
|
206
128
|
}
|
|
207
129
|
}
|
|
208
130
|
/**
|
|
209
|
-
*
|
|
210
|
-
* @param map 地图实例
|
|
211
|
-
* @throws 如果地图实例无效则抛出异常
|
|
131
|
+
* 验证地图实例。
|
|
212
132
|
*/
|
|
213
133
|
static validateMapInstance(map) {
|
|
214
|
-
|
|
215
|
-
throw new Error('Map instance is required');
|
|
216
|
-
}
|
|
134
|
+
ValidationUtils.validateMap(map);
|
|
217
135
|
}
|
|
218
136
|
/**
|
|
219
|
-
*
|
|
220
|
-
* @param value 要验证的值
|
|
221
|
-
* @param message 错误消息
|
|
222
|
-
* @throws 如果值为空则抛出异常
|
|
137
|
+
* 验证必需参数。
|
|
223
138
|
*/
|
|
224
139
|
static validateRequired(value, message) {
|
|
225
|
-
if (
|
|
140
|
+
if (value === undefined || value === null || value === '') {
|
|
226
141
|
throw new Error(message);
|
|
227
142
|
}
|
|
228
143
|
}
|
|
229
144
|
/**
|
|
230
|
-
*
|
|
231
|
-
* @param longitude 经度
|
|
232
|
-
* @param latitude 纬度
|
|
233
|
-
* @throws 如果坐标无效则抛出异常
|
|
145
|
+
* 验证坐标(抛出异常版本)。
|
|
234
146
|
*/
|
|
235
147
|
static validateCoordinate(longitude, latitude) {
|
|
236
|
-
if (
|
|
237
|
-
throw new Error('Longitude and latitude must be numbers');
|
|
238
|
-
}
|
|
239
|
-
if (isNaN(longitude) || isNaN(latitude)) {
|
|
240
|
-
throw new Error('Valid longitude and latitude are required');
|
|
148
|
+
if (!ValidationUtils.isFiniteNumber(longitude) || !ValidationUtils.isFiniteNumber(latitude)) {
|
|
149
|
+
throw new Error('Longitude and latitude must be valid numbers');
|
|
241
150
|
}
|
|
242
151
|
if (longitude < -180 || longitude > 180) {
|
|
243
152
|
throw new Error('Longitude must be between -180 and 180');
|
|
@@ -247,11 +156,7 @@ export class ValidationUtils {
|
|
|
247
156
|
}
|
|
248
157
|
}
|
|
249
158
|
/**
|
|
250
|
-
*
|
|
251
|
-
* @param value 要验证的值
|
|
252
|
-
* @param expectedType 期望的类型
|
|
253
|
-
* @param message 错误消息
|
|
254
|
-
* @throws 如果类型不匹配则抛出异常
|
|
159
|
+
* 验证类型。
|
|
255
160
|
*/
|
|
256
161
|
static validateType(value, expectedType, message) {
|
|
257
162
|
if (typeof value !== expectedType) {
|
|
@@ -259,20 +164,15 @@ export class ValidationUtils {
|
|
|
259
164
|
}
|
|
260
165
|
}
|
|
261
166
|
/**
|
|
262
|
-
*
|
|
263
|
-
* @param str 字符串
|
|
264
|
-
* @param message 错误消息
|
|
265
|
-
* @throws 如果字符串为空则抛出异常
|
|
167
|
+
* 验证非空字符串。
|
|
266
168
|
*/
|
|
267
169
|
static validateNonEmptyString(str, message) {
|
|
268
|
-
if (!str
|
|
170
|
+
if (!ValidationUtils.isValidLayerName(str)) {
|
|
269
171
|
throw new Error(message);
|
|
270
172
|
}
|
|
271
173
|
}
|
|
272
174
|
/**
|
|
273
|
-
*
|
|
274
|
-
* @param map 地图实例
|
|
275
|
-
* @throws 如果地图实例无效则抛出异常
|
|
175
|
+
* 验证地图实例(通用版本)。
|
|
276
176
|
*/
|
|
277
177
|
static validateMap(map) {
|
|
278
178
|
if (!map) {
|
|
@@ -280,33 +180,28 @@ export class ValidationUtils {
|
|
|
280
180
|
}
|
|
281
181
|
}
|
|
282
182
|
/**
|
|
283
|
-
*
|
|
284
|
-
* @param type 测量类型
|
|
285
|
-
* @throws 如果测量类型无效则抛出异常
|
|
183
|
+
* 验证测量类型。
|
|
286
184
|
*/
|
|
287
185
|
static validateMeasureType(type) {
|
|
288
|
-
if (
|
|
186
|
+
if (type !== 'LineString' && type !== 'Polygon') {
|
|
289
187
|
throw new Error('Invalid measure type. Must be "LineString" or "Polygon"');
|
|
290
188
|
}
|
|
291
189
|
}
|
|
292
190
|
/**
|
|
293
|
-
*
|
|
294
|
-
* @param value 数值
|
|
295
|
-
* @param message 错误消息
|
|
296
|
-
* @throws 如果数值不是正数则抛出异常
|
|
191
|
+
* 验证正数。
|
|
297
192
|
*/
|
|
298
193
|
static validatePositiveNumber(value, message) {
|
|
299
|
-
if (!value || value <= 0) {
|
|
194
|
+
if (!ValidationUtils.isFiniteNumber(value) || value <= 0) {
|
|
300
195
|
throw new Error(message);
|
|
301
196
|
}
|
|
302
197
|
}
|
|
303
198
|
/**
|
|
304
|
-
*
|
|
305
|
-
* @param layerName 图层名称(字符串或字符串数组)
|
|
306
|
-
* @throws 如果图层名称参数无效则抛出异常
|
|
199
|
+
* 验证图层名称参数。
|
|
307
200
|
*/
|
|
308
201
|
static validateLayerNameParam(layerName) {
|
|
309
|
-
|
|
202
|
+
const isValidString = typeof layerName === 'string' && layerName.trim().length > 0;
|
|
203
|
+
const isValidArray = Array.isArray(layerName) && layerName.length > 0 && layerName.every(ValidationUtils.isValidLayerName);
|
|
204
|
+
if (!isValidString && !isValidArray) {
|
|
310
205
|
throw new Error('Valid layer name is required');
|
|
311
206
|
}
|
|
312
207
|
}
|
package/core/Line.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import Map from "ol/Map";
|
|
2
|
-
import VectorSource from "ol/source/Vector";
|
|
3
|
-
import VectorLayer from "ol/layer/Vector";
|
|
4
|
-
import { LineOptions, MapJSONData } from "../types";
|
|
5
|
-
/**
|
|
6
|
-
* 线要素管理类
|
|
7
|
-
* 用于在地图上添加和管理线要素
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const lineManager = new Line(map);
|
|
12
|
-
* const layer = lineManager.addLine(geoJsonData, {
|
|
13
|
-
* type: 'road',
|
|
14
|
-
* strokeColor: '#ff0000',
|
|
15
|
-
* strokeWidth: 3
|
|
16
|
-
* });
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export default class Line {
|
|
20
|
-
/** OpenLayers 地图实例 */
|
|
21
|
-
private readonly map;
|
|
22
|
-
private mergeDefaultOptions;
|
|
23
|
-
private createStyleFunction;
|
|
24
|
-
private createLayer;
|
|
25
|
-
/**
|
|
26
|
-
* 构造函数
|
|
27
|
-
* @param map OpenLayers地图实例
|
|
28
|
-
*/
|
|
29
|
-
constructor(map: Map);
|
|
30
|
-
/**
|
|
31
|
-
* 添加线要素
|
|
32
|
-
* @param data GeoJSON格式的线数据
|
|
33
|
-
* @param options 配置项
|
|
34
|
-
* @returns 创建的矢量图层
|
|
35
|
-
*/
|
|
36
|
-
addLine(data: MapJSONData, options?: LineOptions): VectorLayer<VectorSource>;
|
|
37
|
-
/**
|
|
38
|
-
* 从URL添加线要素
|
|
39
|
-
* @param url 数据URL
|
|
40
|
-
* @param options 配置项
|
|
41
|
-
* @returns 创建的矢量图层
|
|
42
|
-
*/
|
|
43
|
-
addLineByUrl(url: string, options?: LineOptions): VectorLayer<VectorSource>;
|
|
44
|
-
/**
|
|
45
|
-
* 移除线图层
|
|
46
|
-
* @param layerName 图层名称
|
|
47
|
-
*/
|
|
48
|
-
removeLineLayer(layerName: string): void;
|
|
49
|
-
}
|