my-openlayer 1.0.14 → 1.0.15

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.
Files changed (2) hide show
  1. package/README.md +271 -48
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # my-openlayer
2
2
 
3
- my-openlayer 是一个基于 [OpenLayers](https://openlayers.org/) 的现代地图组件库,专为 Web GIS 应用开发者设计。提供完整的 TypeScript 支持、模块化的类型定义、强大的错误处理和事件管理系统,支持天地图底图加载、要素绘制、图层管理、事件监听等丰富功能,极大提升地图开发效率。
3
+ my-openlayer 是一个基于 [OpenLayers](https://openlayers.org/) 的现代地图组件库,专为 Web GIS 应用开发者设计。提供完整的 TypeScript 支持、模块化的类型定义、强大的错误处理和事件管理系统,支持天地图底图加载、要素绘制、图层管理、事件监听等丰富功能,极大提升地图开发效率。支持 TypeScript,具备完整的类型定义和模块化设计。
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/my-openlayer.svg)](https://www.npmjs.com/package/my-openlayer)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
@@ -28,32 +28,32 @@ my-openlayer 是一个基于 [OpenLayers](https://openlayers.org/) 的现代地
28
28
 
29
29
  ## 功能亮点
30
30
 
31
- - **🗺️ 底图管理**
32
- - 支持天地图矢量、影像、地形底图
33
- - 动态切换底图与注记图层
31
+ - **🗺️ 底图管理 (MapBaseLayers)**
32
+ - 支持天地图矢量、影像、地形底图切换
33
+ - 动态切换底图与注记图层管理
34
34
  - 地图裁剪与自定义范围显示
35
- - 支持自定义底图源
35
+ - 支持自定义底图源和配置
36
36
 
37
37
  - **📍 要素操作**
38
- - 点位标注(支持自定义图标、文字、聚合、闪烁)
39
- - 线要素绘制(支持样式自定义、河流分级显示)
40
- - 面要素绘制与分区高亮
41
- - DOM 点位(支持 Vue 组件渲染)
38
+ - **点位管理 (Point)**:点位标注(支持自定义图标、文字、聚合、闪烁)
39
+ - **线要素绘制 (Line)**:线要素绘制(支持样式自定义、河流分级显示)
40
+ - **面要素 (Polygon)**:面要素绘制与分区高亮
41
+ - **Vue组件支持 (VueTemplatePoint)**:DOM 点位(支持 Vue 组件渲染,完整生命周期管理)
42
42
  - 热力图、图片图层
43
43
  - 动态要素颜色更新
44
44
 
45
45
  - **🛠️ 地图工具**
46
- - 图层管理(获取、移除、显隐控制)
47
- - 地图事件监听(点击、悬停、移动等)
48
- - 坐标转换、视图控制
49
- - 测量工具(距离、面积)
50
- - 配置管理器
46
+ - **测量工具 (MeasureHandler)**:距离和面积测量
47
+ - **地图工具 (MapTools)**:图层管理(获取、移除、显隐控制)
48
+ - **事件管理 (EventManager)**:地图事件监听(点击、悬停、移动等)
49
+ - **配置管理 (ConfigManager)**:坐标转换、视图控制、配置管理器
51
50
 
52
51
  - **⚡ 高级特性**
53
52
  - **TypeScript 完全支持**:模块化类型定义,更好的开发体验
54
- - **错误处理系统**:统一的错误处理和日志记录
55
- - **事件管理系统**:强大的事件监听和管理机制
56
- - **配置管理**:默认配置、配置合并、验证工具
53
+ - **错误处理系统 (ErrorHandler)**:统一的错误处理和日志记录
54
+ - **验证工具 (ValidationUtils)**:参数验证和数据校验
55
+ - **模块化设计**:支持按需加载和懒加载
56
+ - **坐标系支持**:CGCS2000坐标系和投影转换
57
57
  - **向后兼容**:保持 API 稳定性
58
58
 
59
59
  - **🔧 开发友好**
@@ -69,6 +69,47 @@ my-openlayer 是一个基于 [OpenLayers](https://openlayers.org/) 的现代地
69
69
 
70
70
  ```bash
71
71
  npm install my-openlayer
72
+ # 或
73
+ yarn add my-openlayer
74
+ # 或
75
+ pnpm add my-openlayer
76
+ ```
77
+
78
+ ### 依赖要求
79
+
80
+ - **OpenLayers**: ^7.0.0 或更高版本
81
+ - **proj4**: ^2.8.0 或更高版本
82
+ - **@turf/turf**: ^6.5.0 或更高版本(用于高级几何计算)
83
+
84
+ ### 环境配置
85
+
86
+ 使用天地图服务需要配置API Token:
87
+
88
+ ```bash
89
+ # 在项目根目录创建 .env 文件
90
+ VUE_APP_TIANDITU_TOKEN=your_tianditu_token_here
91
+
92
+ # 其他可选配置
93
+ VUE_APP_MAP_CENTER_LON=119.81
94
+ VUE_APP_MAP_CENTER_LAT=29.969
95
+ VUE_APP_MAP_ZOOM=10
96
+ ```
97
+
98
+ ### 配置选项
99
+
100
+ #### 基础配置
101
+
102
+ ```javascript
103
+ const config = {
104
+ target: 'map', // 地图容器ID
105
+ center: [119.81, 29.969], // 地图中心点
106
+ zoom: 10, // 缩放级别
107
+ tiandituToken: process.env.VUE_APP_TIANDITU_TOKEN, // 天地图token(从环境变量获取)
108
+ minZoom: 1, // 最小缩放级别
109
+ maxZoom: 20, // 最大缩放级别
110
+ annotation: true, // 是否显示注记
111
+ coordinateSystem: 'EPSG:4326', // 坐标系(默认WGS84,支持CGCS2000)
112
+ };
72
113
  ```
73
114
 
74
115
  ---
@@ -90,7 +131,7 @@ const mapConfig: MapInitType = {
90
131
  zoom: 10,
91
132
  minZoom: 8,
92
133
  maxZoom: 20,
93
- token: 'your-tianditu-token',
134
+ token: process.env.VUE_APP_TIANDITU_TOKEN, // 从环境变量获取天地图token
94
135
  annotation: true,
95
136
  layers: {
96
137
  vec_c: [],
@@ -511,6 +552,20 @@ measure.destory();
511
552
  new MyOl(id: string, options: MapInitType)
512
553
  ```
513
554
 
555
+ **参数说明:**
556
+
557
+ - `id`: 地图容器的 DOM 元素 ID
558
+ - `options`: 地图初始化配置对象
559
+ - `center`: 地图中心点坐标 `[longitude, latitude]`
560
+ - `zoom`: 初始缩放级别
561
+ - `token`: 天地图 API Token(建议从环境变量获取)
562
+ - `minZoom`: 最小缩放级别(可选,默认:1)
563
+ - `maxZoom`: 最大缩放级别(可选,默认:20)
564
+ - `annotation`: 是否显示注记图层(可选,默认:true)
565
+ - `layers`: 图层配置(可选)
566
+ - `extent`: 地图范围限制(可选)
567
+ - `mapClipData`: 地图裁剪数据(可选)
568
+
514
569
  #### 方法
515
570
 
516
571
  - **getPoint()**
@@ -532,17 +587,35 @@ new MyOl(id: string, options: MapInitType)
532
587
  ```
533
588
 
534
589
  - **getTools()**
535
- > 获取地图工具实例。
590
+ > 获取地图工具实例,提供图层管理、事件监听等功能。
536
591
  ```javascript
537
592
  const tools = map.getTools();
538
593
  ```
539
594
 
540
595
  - **getMapBaseLayers()**
541
- > 获取底图图层管理实例。
596
+ > 获取底图图层管理实例,用于底图切换和管理。
542
597
  ```javascript
543
598
  const baseLayers = map.getMapBaseLayers();
544
599
  ```
545
600
 
601
+ - **getEventManager()**
602
+ > 获取事件管理器实例,用于统一的事件监听和管理。
603
+ ```javascript
604
+ const eventManager = map.getEventManager();
605
+ ```
606
+
607
+ - **getConfigManager()**
608
+ > 获取配置管理器实例,用于配置验证和管理。
609
+ ```javascript
610
+ const configManager = map.getConfigManager();
611
+ ```
612
+
613
+ - **getMap()**
614
+ > 获取原生 OpenLayers 地图实例。
615
+ ```javascript
616
+ const olMap = map.getMap();
617
+ ```
618
+
546
619
  - **resetPosition(duration?: number)**
547
620
  > 重置地图位置。
548
621
  ```javascript
@@ -568,7 +641,7 @@ new MyOl(id: string, options: MapInitType)
568
641
  ### MapBaseLayers
569
642
 
570
643
  - **switchBaseLayer(type: TiandituType)**
571
- > 切换底图。
644
+ > 切换底图类型,自动处理注记图层。
572
645
  ```javascript
573
646
  baseLayers.switchBaseLayer('img_c');
574
647
  ```
@@ -583,6 +656,19 @@ new MyOl(id: string, options: MapInitType)
583
656
  });
584
657
  ```
585
658
 
659
+ - **toggleAnnotation(show?: boolean)**
660
+ > 切换注记图层显示状态。
661
+ ```javascript
662
+ baseLayers.toggleAnnotation(true); // 显示注记
663
+ baseLayers.toggleAnnotation(false); // 隐藏注记
664
+ ```
665
+
666
+ - **getCurrentBaseLayer()**
667
+ > 获取当前底图类型。
668
+ ```javascript
669
+ const currentType = baseLayers.getCurrentBaseLayer();
670
+ ```
671
+
586
672
  - **initLayer()**
587
673
  > 初始化底图图层。
588
674
  ```javascript
@@ -594,7 +680,7 @@ new MyOl(id: string, options: MapInitType)
594
680
  ### Point
595
681
 
596
682
  - **addPoint(pointData: PointData[], options: OptionsType)**
597
- > 添加普通点位。
683
+ > 添加普通点位到指定图层,支持自定义样式和图标。
598
684
  ```javascript
599
685
  point.addPoint([
600
686
  { lgtd: 119.81, lttd: 29.969, name: '测试点位' }
@@ -607,7 +693,7 @@ new MyOl(id: string, options: MapInitType)
607
693
  ```
608
694
 
609
695
  - **addClusterPoint(pointData: PointData[], options: OptionsType)**
610
- > 添加聚合点位。
696
+ > 添加聚合点位,自动根据缩放级别聚合显示。
611
697
  ```javascript
612
698
  point.addClusterPoint([
613
699
  { lgtd: 119.81, lttd: 29.969, name: 'A' },
@@ -620,6 +706,19 @@ new MyOl(id: string, options: MapInitType)
620
706
  });
621
707
  ```
622
708
 
709
+ - **addTwinklePoint(pointData: PointData[], options: OptionsType)**
710
+ > 添加闪烁点位,具有动画效果。
711
+ ```javascript
712
+ point.addTwinklePoint([
713
+ { lgtd: 119.81, lttd: 29.969, name: '闪烁点位' }
714
+ ], {
715
+ layerName: 'twinkle-point',
716
+ nameKey: 'name',
717
+ img: 'twinkle.png',
718
+ hasImg: true
719
+ });
720
+ ```
721
+
623
722
  - **setDomPointVue(pointInfoList: any[], template: any, Vue: any)**
624
723
  > 添加 Vue 组件点位。
625
724
  ```javascript
@@ -776,31 +875,77 @@ new MyOl(id: string, options: MapInitType)
776
875
 
777
876
  ### MeasureHandler
778
877
 
878
+ 测量工具类,提供距离和面积测量功能,支持实时测量显示。
879
+
779
880
  - **start(type: 'Polygon' | 'LineString')**
780
- > 开始测量。
881
+ > 开始测量,支持距离和面积测量。
781
882
  ```javascript
782
- measure.start('Polygon');
783
- measure.start('LineString');
883
+ measure.start('Polygon'); // 面积测量
884
+ measure.start('LineString'); // 距离测量
784
885
  ```
785
886
 
786
887
  - **end()**
787
- > 结束测量。
888
+ > 结束当前测量操作。
788
889
  ```javascript
789
890
  measure.end();
790
891
  ```
791
892
 
792
893
  - **clean()**
793
- > 清除所有测量结果。
894
+ > 清除所有测量结果和图形。
794
895
  ```javascript
795
896
  measure.clean();
796
897
  ```
797
898
 
798
899
  - **destory()**
799
- > 销毁测量工具。
900
+ > 销毁测量工具,释放资源。
800
901
  ```javascript
801
902
  measure.destory();
802
903
  ```
803
904
 
905
+ ### ErrorHandler
906
+
907
+ 错误处理工具类,提供统一的错误处理和日志记录。
908
+
909
+ - **getInstance()**
910
+ > 获取错误处理器单例实例。
911
+ ```javascript
912
+ const errorHandler = ErrorHandler.getInstance();
913
+ ```
914
+
915
+ - **handleError(error: MyOpenLayersError)**
916
+ > 处理错误,记录日志并触发回调。
917
+ ```javascript
918
+ errorHandler.handleError(error);
919
+ ```
920
+
921
+ - **validate(condition: boolean, message: string, context?: any)**
922
+ > 验证条件,失败时抛出错误。
923
+ ```javascript
924
+ ErrorHandler.validate(isValid, '验证失败', { data });
925
+ ```
926
+
927
+ ### ValidationUtils
928
+
929
+ 验证工具类,提供各种数据验证方法。
930
+
931
+ - **isValidCoordinate(longitude: number, latitude: number)**
932
+ > 验证坐标是否有效。
933
+ ```javascript
934
+ const isValid = ValidationUtils.isValidCoordinate(119.81, 29.969);
935
+ ```
936
+
937
+ - **validateMapInstance(map: any)**
938
+ > 验证地图实例。
939
+ ```javascript
940
+ ValidationUtils.validateMapInstance(map);
941
+ ```
942
+
943
+ - **validateLayerName(layerName: string)**
944
+ > 验证图层名称。
945
+ ```javascript
946
+ ValidationUtils.validateLayerName('myLayer');
947
+ ```
948
+
804
949
  ---
805
950
 
806
951
  ## 类型定义
@@ -820,7 +965,8 @@ interface MapInitType {
820
965
  extent?: number[],
821
966
  mapClipData?: MapJSONData,
822
967
  token?: string,
823
- annotation?: boolean
968
+ annotation?: boolean,
969
+ coordinateSystem?: string // 坐标系(支持CGCS2000)
824
970
  }
825
971
 
826
972
  // 点位数据
@@ -937,6 +1083,50 @@ interface HeatMapOptions {
937
1083
  }
938
1084
  ```
939
1085
 
1086
+ ### VueTemplatePointOptions
1087
+
1088
+ Vue 组件点位配置类型,支持 Vue 2 和 Vue 3。
1089
+
1090
+ ```typescript
1091
+ interface VueTemplatePointOptions {
1092
+ coordinate: [number, number]; // 点位坐标
1093
+ template: any; // Vue 组件模板
1094
+ data?: any; // 传递给组件的数据
1095
+ vue: VueInstance | VueApp; // Vue 实例(Vue 2/3)
1096
+ layerName?: string; // 图层名称
1097
+ id?: string; // 点位唯一标识
1098
+ className?: string; // CSS 类名
1099
+ stopEvent?: boolean; // 是否阻止事件冒泡
1100
+ }
1101
+ ```
1102
+
1103
+ ### ErrorType
1104
+
1105
+ 错误类型枚举。
1106
+
1107
+ ```typescript
1108
+ enum ErrorType {
1109
+ VALIDATION_ERROR = 'VALIDATION_ERROR',
1110
+ MAP_ERROR = 'MAP_ERROR',
1111
+ LAYER_ERROR = 'LAYER_ERROR',
1112
+ COORDINATE_ERROR = 'COORDINATE_ERROR',
1113
+ DATA_ERROR = 'DATA_ERROR',
1114
+ COMPONENT_ERROR = 'COMPONENT_ERROR'
1115
+ }
1116
+ ```
1117
+
1118
+ ### MyOpenLayersError
1119
+
1120
+ 自定义错误类。
1121
+
1122
+ ```typescript
1123
+ class MyOpenLayersError extends Error {
1124
+ public readonly type: ErrorType;
1125
+ public readonly timestamp: Date;
1126
+ public readonly context?: any;
1127
+ }
1128
+ ```
1129
+
940
1130
  ### 兼容性类型
941
1131
 
942
1132
  ```typescript
@@ -957,8 +1147,6 @@ type OptionsType = BaseOptions & StyleOptions & TextOptions & {
957
1147
 
958
1148
  ## 迁移指南
959
1149
 
960
- 如果您正在从旧版本的 `OptionsType` 迁移到新的模块化类型接口,请参考详细的 [迁移指南](MIGRATION_GUIDE.md)。
961
-
962
1150
  ### 快速迁移示例
963
1151
 
964
1152
  ```typescript
@@ -992,20 +1180,23 @@ const options: PointOptions = {
992
1180
 
993
1181
  ### 运行时依赖
994
1182
 
995
- - **[OpenLayers](https://openlayers.org/)** `^6.15.1` - 核心地图库
996
- - **[proj4](https://github.com/proj4js/proj4js)** `^2.7.5` - 坐标系转换
997
- - **[turf](https://turfjs.org/)** `^3.0.14` - 地理空间分析
1183
+ - **ol**: ^7.5.2 - OpenLayers 地图库
1184
+ - **proj4**: ^2.9.2 - 坐标系转换库
1185
+ - **@turf/turf**: ^6.5.0 - 地理空间分析库
998
1186
 
999
1187
  ### 开发依赖
1000
1188
 
1001
- - **[TypeScript](https://www.typescriptlang.org/)** `~5.6.2` - 类型支持
1002
- - **[Vite](https://vitejs.dev/)** `^5.4.10` - 构建工具
1003
- - **[@types/proj4](https://www.npmjs.com/package/@types/proj4)** `^2.5.2` - proj4 类型定义
1004
- - **[@types/turf](https://www.npmjs.com/package/@types/turf)** `^3.5.32` - turf 类型定义
1189
+ - **@types/ol**: ^6.5.3 - OpenLayers TypeScript 类型定义
1190
+ - **typescript**: ^5.0.0 - TypeScript 编译器
1191
+ - **vite**: ^4.4.5 - 构建工具
1192
+ - **@vitejs/plugin-vue**: ^4.2.3 - Vue 插件支持
1193
+ - **vue-tsc**: ^1.8.5 - Vue TypeScript 编译器
1005
1194
 
1006
1195
  ### 对等依赖
1007
1196
 
1008
- - **[OpenLayers](https://openlayers.org/)** `^6.15.1` - 确保版本兼容性
1197
+ - **vue**: ^2.6.0 || ^3.0.0 - Vue.js 框架(可选,用于 Vue 组件支持)
1198
+ - **element-ui**: ^2.15.0 - Element UI 组件库(Vue 2)
1199
+ - **element-plus**: ^2.0.0 - Element Plus 组件库(Vue 3)
1009
1200
 
1010
1201
  > **注意**:本库与 OpenLayers 6.15.1 完全兼容,建议使用相同版本以获得最佳体验。
1011
1202
 
@@ -1206,14 +1397,46 @@ A:
1206
1397
 
1207
1398
  ## 更新日志
1208
1399
 
1209
- ### v1.0.0 (最新)
1210
- - ✨ 重构类型定义,采用模块化设计
1211
- - 🛠️ 新增错误处理系统
1212
- - 📊 新增事件管理系统
1213
- - ⚙️ 新增配置管理器
1214
- - 📝 完善 TypeScript 类型支持
1215
- - 📖 新增详细的迁移指南
1216
- - 🔧 优化 API 设计,提升开发体验
1400
+ ### v1.0.15 (2025-08-20)
1401
+
1402
+ #### 新增功能
1403
+ - 完整的 TypeScript 支持和类型定义
1404
+ - 模块化架构设计,支持按需引入
1405
+ - 天地图底图支持(矢量、影像、地形)
1406
+ - 点要素操作(普通点位、聚合点位、闪烁点位)
1407
+ - Vue 组件集成支持(Vue 2/3 兼容)
1408
+ - ✨ 线要素和面要素绘制
1409
+ - ✨ 热力图和图片图层支持
1410
+ - ✨ 测量工具(距离、面积)
1411
+ - ✨ 事件管理和配置管理系统
1412
+ - ✨ 错误处理和验证工具
1413
+ - ✨ CGCS2000 坐标系支持
1414
+
1415
+ #### 技术特性
1416
+ - 🔧 支持 Vue 2 和 Vue 3
1417
+ - 🔧 完整的 TypeScript 类型定义
1418
+ - 🔧 模块化设计,懒加载支持
1419
+ - 🔧 统一的错误处理机制
1420
+ - 🔧 向后兼容性保证
1421
+ - 🔧 环境变量配置支持
1422
+
1423
+ #### 核心类库
1424
+ - 📦 MyOl - 地图核心管理类
1425
+ - 📦 MapBaseLayers - 底图管理
1426
+ - 📦 Point/Line/Polygon - 要素操作
1427
+ - 📦 VueTemplatePoint - Vue 组件支持
1428
+ - 📦 MapTools - 地图工具集
1429
+ - 📦 MeasureHandler - 测量工具
1430
+ - 📦 EventManager - 事件管理
1431
+ - 📦 ConfigManager - 配置管理
1432
+ - 📦 ErrorHandler - 错误处理
1433
+ - 📦 ValidationUtils - 验证工具
1434
+
1435
+ #### 文档
1436
+ - 📚 完整的 API 文档和类型定义
1437
+ - 📚 详细的使用示例和最佳实践
1438
+ - 📚 环境配置和部署指南
1439
+ - 📚 FAQ 和常见问题解决方案
1217
1440
 
1218
1441
  查看完整的 [更新日志](CHANGELOG.md)
1219
1442
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "my-openlayer",
3
3
  "private": false,
4
- "version": "1.0.14",
4
+ "version": "1.0.15",
5
5
  "type": "module",
6
6
  "main": "index.js",
7
7
  "types": "index.d.ts",