map-ol-utils 0.1.26 → 0.1.28

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/README.md CHANGED
@@ -0,0 +1,109 @@
1
+ # map-ol-utils
2
+
3
+ OpenLayers 地图工具库,封装常用的图层创建、要素交互与地图管理操作。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm add map-ol-utils
9
+ ```
10
+
11
+ ## 快速上手
12
+
13
+ ```ts
14
+ import { createMapInstance, createMassMarksLayer, addMassMarksLayer } from 'map-ol-utils'
15
+
16
+ // 创建地图(单例)
17
+ const map = createMapInstance({ target: 'map-container' })
18
+
19
+ // 添加点位图层
20
+ const layer = createMassMarksLayer(dataList, styles)
21
+ map.addLayer(layer)
22
+ ```
23
+
24
+ ## 主要 API
25
+
26
+ ### 地图管理
27
+
28
+ | 函数 | 说明 |
29
+ |------|------|
30
+ | `createMap(config)` | 创建 OL 地图实例 |
31
+ | `createMapInstance(config)` | 创建地图单例 |
32
+ | `getMapInstance()` | 获取当前单例 |
33
+ | `disposeMap()` | 销毁地图,释放资源 |
34
+ | `resetMap(config)` | 重置地图(清除图层并还原视图) |
35
+ | `resetZoomAndCenter(center)` | 动画还原缩放和中心点 |
36
+
37
+ ### 底图图层
38
+
39
+ | 函数 | 说明 |
40
+ |------|------|
41
+ | `createBaseLayer(type?)` | 创建杭州本地切片底图 |
42
+ | `createMapWorldLayer(options)` | 创建天地图图层 |
43
+ | `createZheJiangLayer(type?)` | 创建浙江省切片图层 |
44
+ | `switchBaseLayer(type)` | 切换底图类型 |
45
+
46
+ ### 矢量图层
47
+
48
+ | 函数 | 说明 |
49
+ |------|------|
50
+ | `createBusinessLayer(dataList, config)` | 从业务数据创建矢量图层(自动识别线/面类型) |
51
+ | `createVectorLineLayer(dataList, config)` | 创建线状图层 |
52
+ | `createVectorFaceLayer(dataList, config)` | 创建面状图层 |
53
+ | `appendFeaturesByLayer(layer, dataList)` | 向已有图层追加要素 |
54
+
55
+ ### 点位与聚合
56
+
57
+ | 函数 | 说明 |
58
+ |------|------|
59
+ | `createMassMarksLayer(dataList, styles)` | 创建大量点位图层 |
60
+ | `addMassMarksLayer(getImgUrlFn)` | 高阶函数,返回添加点位图层的方法 |
61
+ | `buildMassMarksStyles(getImgUrlFn)` | 构建多状态点位样式数组 |
62
+ | `updateMarksLayersByStatus(statusList)` | 按状态控制点位显隐 |
63
+ | `createClusterLayer(dataList, config)` | 创建聚合图层 |
64
+
65
+ ### 交互与选择
66
+
67
+ | 函数 | 说明 |
68
+ |------|------|
69
+ | `createSelectByLayer(layer)` | 为图层添加点击选中交互 |
70
+ | `activeFeatureByUid(uid)` | 通过 uid 程序化激活要素 |
71
+ | `resetActiveFeature()` | 清除选中状态 |
72
+ | `resetActiveVector()` | 清除矢量激活状态 |
73
+
74
+ ### 视图控制
75
+
76
+ | 函数 | 说明 |
77
+ |------|------|
78
+ | `setFitViewByCoords(coords)` | 缩放至坐标范围 |
79
+ | `setFitViewByGeom(geom)` | 缩放至几何范围 |
80
+ | `setFitViewByLayer(layer)` | 缩放至图层范围 |
81
+
82
+ ### OGC
83
+
84
+ | 函数 | 说明 |
85
+ |------|------|
86
+ | `createWmtsLayer(url, options)` | 从 GeoServer GetCapabilities 创建 WMTS 图层 |
87
+
88
+ ## 依赖
89
+
90
+ - [ol](https://openlayers.org/) `>=10.5.0`(peer dependency)
91
+ - [gcoord](https://github.com/hujiulong/gcoord) — 坐标系转换
92
+ - [mitt](https://github.com/developit/mitt) — 事件总线
93
+
94
+ ## 事件
95
+
96
+ 通过导出的 `emitter` 监听图层交互事件:
97
+
98
+ ```ts
99
+ import { emitter } from 'map-ol-utils'
100
+
101
+ emitter.on('selected-feature', (data) => {
102
+ console.log('选中要素:', data)
103
+ })
104
+ ```
105
+
106
+ | 事件名 | 触发时机 | 回调参数 |
107
+ |--------|----------|----------|
108
+ | `selected-feature` | 点击选中要素 | feature properties |
109
+ | `dynamic-marker` | 选中动态标注点 | marker data |
package/dist/index.cjs CHANGED
@@ -69,6 +69,7 @@ var index_exports = {};
69
69
  __export(index_exports, {
70
70
  GeometryType: () => GeometryType,
71
71
  activeFeatureByUid: () => activeFeatureByUid,
72
+ addFeaturesByLayer: () => addFeaturesByLayer,
72
73
  addMassMarksLayer: () => addMassMarksLayer,
73
74
  appendFeaturesByLayer: () => appendFeaturesByLayer,
74
75
  buildMassMarksStyles: () => buildMassMarksStyles,
@@ -455,13 +456,11 @@ var selectEventHandle = (vectorLayer, feature) => {
455
456
  }
456
457
  const isAutoFit = vectorLayer.get("_isAutoFit");
457
458
  if (isAutoFit) {
458
- const [x, y] = (0, import_extent.getCenter)(feature.getGeometry().getExtent());
459
- const [offsetX, offsetY] = vectorLayer.get("_offset") || [0, 0];
460
459
  const view = instance.getView();
461
460
  view.animate({
462
461
  duration: 1e3,
463
462
  zoom: view.getZoom(),
464
- center: [x + offsetX, y + offsetY]
463
+ center: (0, import_extent.getCenter)(feature.getGeometry().getExtent())
465
464
  });
466
465
  }
467
466
  };
@@ -510,8 +509,8 @@ var createSelectByLayer = (vectorLayer) => {
510
509
  vectorLayer.set("_selectInteraction", interaction);
511
510
  return interaction;
512
511
  };
513
- var createMassMarksLayer = (dataList, styleList = []) => {
514
- const features = dataList.map((item) => {
512
+ var createFeatures = (dataList, styleList = []) => {
513
+ return dataList.map((item) => {
515
514
  const { crsForm } = item;
516
515
  const coord = import_gcoord.default.transform(
517
516
  [+item.lnglat[0], +item.lnglat[1]],
@@ -528,10 +527,21 @@ var createMassMarksLayer = (dataList, styleList = []) => {
528
527
  feature.setStyle(styleList[item.style]);
529
528
  return feature;
530
529
  });
530
+ };
531
+ var addFeaturesByLayer = (targetLayer, dataList, config) => {
532
+ const massMarksStyles = targetLayer.get("_massMarksStyles");
533
+ const targetSource = targetLayer == null ? void 0 : targetLayer.getSource();
534
+ const { clear } = config;
535
+ if (clear) {
536
+ targetSource == null ? void 0 : targetSource.clear();
537
+ }
538
+ targetSource == null ? void 0 : targetSource.addFeatures(createFeatures(dataList, massMarksStyles));
539
+ };
540
+ var createMassMarksLayer = (dataList, styleList = []) => {
531
541
  const vectorLayer = new import_Vector.default({
532
542
  zIndex: 2e3,
533
543
  source: new import_Vector2.default({
534
- features
544
+ features: createFeatures(dataList, styleList)
535
545
  })
536
546
  });
537
547
  vectorLayer.setProperties({
@@ -614,12 +624,14 @@ var addMassMarksLayer = (getImgUrlFn) => {
614
624
  }
615
625
  massMarksLayer.setProperties({
616
626
  _isCustom: true,
627
+ _offset: offset,
617
628
  _hasLine: hasLine,
618
629
  _hasFace: hasFace,
619
630
  className: layerName,
620
631
  _layerName: layerName,
621
632
  _isVectorLayer: true,
622
- _isDynamic: isDynamic
633
+ _isDynamic: isDynamic,
634
+ _massMarksStyles: massMarksStyles
623
635
  });
624
636
  instance.addLayer(massMarksLayer);
625
637
  return massMarksLayer;
@@ -662,7 +674,8 @@ var createClusterLayer = (dataList, config) => {
662
674
  openClick,
663
675
  buildStyle,
664
676
  singleStyles,
665
- computedRadius
677
+ computedRadius,
678
+ layerName = "cluster-layer"
666
679
  } = config;
667
680
  const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
668
681
  styleCache[1] = singleStyles;
@@ -705,6 +718,7 @@ var createClusterLayer = (dataList, config) => {
705
718
  };
706
719
  const vectorLayer = new import_Vector.default({
707
720
  zIndex: 200,
721
+ className: layerName,
708
722
  source: new import_Cluster.default({
709
723
  distance: distance || 80,
710
724
  minDistance: minDistance || 0,
@@ -738,7 +752,6 @@ var import_source2 = require("ol/source");
738
752
  var import_tilegrid = require("ol/tilegrid");
739
753
  var import_layer = require("ol/layer");
740
754
  var import_WMTS = __toESM(require("ol/tilegrid/WMTS"), 1);
741
- var import_WebGLTile = __toESM(require("ol/layer/WebGLTile"), 1);
742
755
  var createBaseLayer = (layerName = "hzsyvector_dark") => {
743
756
  const config = {
744
757
  zIndex: -5,
@@ -785,7 +798,7 @@ var createBaseLayer = (layerName = "hzsyvector_dark") => {
785
798
  _layerName: layerName
786
799
  }
787
800
  };
788
- return isWebGLSupported() ? new import_WebGLTile.default(config) : new import_layer.Tile(config);
801
+ return new import_layer.Tile(config);
789
802
  };
790
803
  var createMapWorldLayer = (layerName, tk = "c77eddc667c5bed016fded560baf93e7") => {
791
804
  const [name, matrixSet] = layerName.split("_");
@@ -998,8 +1011,8 @@ var getLayersDataList = () => {
998
1011
  };
999
1012
  var determineGeometryType = (coordinates) => {
1000
1013
  const getArrayDepth = (arr) => {
1001
- if (!Array.isArray(arr)) return 0;
1002
- return 1 + Math.max(...arr.map((item) => getArrayDepth(item)), 0);
1014
+ if (!Array.isArray(arr) || arr.length === 0) return 0;
1015
+ return 1 + getArrayDepth(arr[0]);
1003
1016
  };
1004
1017
  const isClosedRing = (coords) => {
1005
1018
  if (!Array.isArray(coords) || coords.length < 3) return false;
@@ -1044,10 +1057,6 @@ var determineGeometryType = (coordinates) => {
1044
1057
  return "Invalid" /* Invalid */;
1045
1058
  }
1046
1059
  };
1047
- var isWebGLSupported = () => {
1048
- const canvas = document.createElement("canvas");
1049
- return !!canvas.getContext("webgl") || !!canvas.getContext("experimental-webgl");
1050
- };
1051
1060
 
1052
1061
  // src/ogc-utils.ts
1053
1062
  var import_source3 = require("ol/source");
@@ -1101,6 +1110,7 @@ var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* (
1101
1110
  0 && (module.exports = {
1102
1111
  GeometryType,
1103
1112
  activeFeatureByUid,
1113
+ addFeaturesByLayer,
1104
1114
  addMassMarksLayer,
1105
1115
  appendFeaturesByLayer,
1106
1116
  buildMassMarksStyles,
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Layer, Tile } from 'ol/layer';
2
2
  import { Style } from 'ol/style';
3
- import { Map as Map$1, Overlay, Feature } from 'ol';
3
+ import { Map as Map$1, Feature, Overlay } from 'ol';
4
4
  import { CRSTypes } from 'gcoord';
5
5
  import * as ol_source from 'ol/source';
6
6
  import { Source, XYZ, WMTS } from 'ol/source';
@@ -9,9 +9,8 @@ import { FeatureLike } from 'ol/Feature';
9
9
  import { Emitter, EventType } from 'mitt';
10
10
  import TileLayer from 'ol/layer/Tile';
11
11
  import * as ol_renderer_Layer from 'ol/renderer/Layer';
12
- import WebGLTileLayer from 'ol/layer/WebGLTile';
13
12
  import * as ol_geom from 'ol/geom';
14
- import { SimpleGeometry, Point } from 'ol/geom';
13
+ import { Point, SimpleGeometry } from 'ol/geom';
15
14
  import { Options } from 'ol/Overlay';
16
15
  import Cluster from 'ol/source/Cluster';
17
16
  import { Select } from 'ol/interaction';
@@ -62,6 +61,7 @@ type ClusterData = {
62
61
  };
63
62
  type ClusterConfig = {
64
63
  distance: number;
64
+ layerName?: string;
65
65
  openClick?: boolean;
66
66
  minDistance: number;
67
67
  singleStyles: Style[];
@@ -130,7 +130,7 @@ declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions
130
130
  * 创建杭州规自地图
131
131
  * @param layerName - 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark'
132
132
  */
133
- declare const createBaseLayer: (layerName?: HzsyType) => WebGLTileLayer | Tile<XYZ>;
133
+ declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
134
134
  /**
135
135
  * 创建全国天地图
136
136
  * @param layerName - 图层名称
@@ -147,7 +147,9 @@ declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Ti
147
147
  * 根据图层名称获取图层
148
148
  * @param name
149
149
  */
150
- declare const getLayerByName: (name: string) => Layer<ol_source.Source, ol_renderer_Layer.default<any>> | undefined;
150
+ declare const getLayerByName: (name: string) => Layer<ol_source.Source, ol_renderer_Layer.default<any>, {
151
+ [x: string]: any;
152
+ }> | undefined;
151
153
  /**
152
154
  * 根据图层名称删除图层
153
155
  * @param name
@@ -192,7 +194,11 @@ declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap,
192
194
  * @param fitOptions
193
195
  */
194
196
  declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
195
- declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
197
+ declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
198
+ [x: string]: any;
199
+ }>>, Feature<ol_geom.Geometry, {
200
+ [x: string]: any;
201
+ }>>;
196
202
  /**
197
203
  * 追加Features
198
204
  * @param targetLayer
@@ -205,13 +211,21 @@ declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassDa
205
211
  * @param dataList
206
212
  * @param config
207
213
  */
208
- declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
214
+ declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
215
+ [x: string]: any;
216
+ }>>, Feature<ol_geom.Geometry, {
217
+ [x: string]: any;
218
+ }>>;
209
219
  /**
210
220
  * 创建矢量线图层
211
221
  * @param dataList
212
222
  * @param config
213
223
  */
214
- declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
224
+ declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
225
+ [x: string]: any;
226
+ }>>, Feature<ol_geom.Geometry, {
227
+ [x: string]: any;
228
+ }>>;
215
229
  /**
216
230
  * 移除覆盖物以及自定义图层
217
231
  */
@@ -234,17 +248,34 @@ declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: I
234
248
  * @param vectorLayer
235
249
  */
236
250
  declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
251
+ /**
252
+ * 添加Features
253
+ * @param targetLayer
254
+ * @param dataList
255
+ * @param config
256
+ */
257
+ declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config: {
258
+ clear: false;
259
+ }) => void;
237
260
  /**
238
261
  * 创建massMarksLayer
239
262
  * @param dataList
240
263
  * @param styleList
241
264
  */
242
- declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point>>, Feature<Point>>;
265
+ declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point, {
266
+ [x: string]: any;
267
+ }>>, Feature<Point, {
268
+ [x: string]: any;
269
+ }>>;
243
270
  /**
244
271
  * 添加massMarksLayer
245
272
  * @param getImgUrlFn
246
273
  */
247
- declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point>>, Feature<Point>>;
274
+ declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point, {
275
+ [x: string]: any;
276
+ }>>, Feature<Point, {
277
+ [x: string]: any;
278
+ }>>;
248
279
  /**
249
280
  * 更新图层根据选中状态列表
250
281
  * @param checkedStatusList
@@ -260,6 +291,10 @@ declare const createOverlay: (config?: Options) => Overlay;
260
291
  * @param dataList
261
292
  * @param config
262
293
  */
263
- declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
294
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point, {
295
+ [x: string]: any;
296
+ }>>, Feature<ol_geom.Geometry, {
297
+ [x: string]: any;
298
+ }>>;
264
299
 
265
- export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type HzsyType, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, type WorldLayerType, type ZheJiangType, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
300
+ export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type HzsyType, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, type WorldLayerType, type ZheJiangType, activeFeatureByUid, addFeaturesByLayer, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Layer, Tile } from 'ol/layer';
2
2
  import { Style } from 'ol/style';
3
- import { Map as Map$1, Overlay, Feature } from 'ol';
3
+ import { Map as Map$1, Feature, Overlay } from 'ol';
4
4
  import { CRSTypes } from 'gcoord';
5
5
  import * as ol_source from 'ol/source';
6
6
  import { Source, XYZ, WMTS } from 'ol/source';
@@ -9,9 +9,8 @@ import { FeatureLike } from 'ol/Feature';
9
9
  import { Emitter, EventType } from 'mitt';
10
10
  import TileLayer from 'ol/layer/Tile';
11
11
  import * as ol_renderer_Layer from 'ol/renderer/Layer';
12
- import WebGLTileLayer from 'ol/layer/WebGLTile';
13
12
  import * as ol_geom from 'ol/geom';
14
- import { SimpleGeometry, Point } from 'ol/geom';
13
+ import { Point, SimpleGeometry } from 'ol/geom';
15
14
  import { Options } from 'ol/Overlay';
16
15
  import Cluster from 'ol/source/Cluster';
17
16
  import { Select } from 'ol/interaction';
@@ -62,6 +61,7 @@ type ClusterData = {
62
61
  };
63
62
  type ClusterConfig = {
64
63
  distance: number;
64
+ layerName?: string;
65
65
  openClick?: boolean;
66
66
  minDistance: number;
67
67
  singleStyles: Style[];
@@ -130,7 +130,7 @@ declare const createWmtsLayer: (serverUrl: string) => (config: WmtsSourceOptions
130
130
  * 创建杭州规自地图
131
131
  * @param layerName - 'hzsyraster' | 'hzsyvector' | 'hzsyvector_dark'
132
132
  */
133
- declare const createBaseLayer: (layerName?: HzsyType) => WebGLTileLayer | Tile<XYZ>;
133
+ declare const createBaseLayer: (layerName?: HzsyType) => Tile<XYZ>;
134
134
  /**
135
135
  * 创建全国天地图
136
136
  * @param layerName - 图层名称
@@ -147,7 +147,9 @@ declare const createZheJiangLayer: (layerName?: ZheJiangType, tk?: string) => Ti
147
147
  * 根据图层名称获取图层
148
148
  * @param name
149
149
  */
150
- declare const getLayerByName: (name: string) => Layer<ol_source.Source, ol_renderer_Layer.default<any>> | undefined;
150
+ declare const getLayerByName: (name: string) => Layer<ol_source.Source, ol_renderer_Layer.default<any>, {
151
+ [x: string]: any;
152
+ }> | undefined;
151
153
  /**
152
154
  * 根据图层名称删除图层
153
155
  * @param name
@@ -192,7 +194,11 @@ declare const setFitViewByGeom: (geom: SimpleGeometry, mapInstance?: CustomMap,
192
194
  * @param fitOptions
193
195
  */
194
196
  declare const setFitViewByLayer: (layer: VectorLayer, mapInstance?: CustomMap, fitOptions?: FitOptions) => void;
195
- declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
197
+ declare const createBusinessLayer: (dataList: MassData[], config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
198
+ [x: string]: any;
199
+ }>>, Feature<ol_geom.Geometry, {
200
+ [x: string]: any;
201
+ }>>;
196
202
  /**
197
203
  * 追加Features
198
204
  * @param targetLayer
@@ -205,13 +211,21 @@ declare const appendFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassDa
205
211
  * @param dataList
206
212
  * @param config
207
213
  */
208
- declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
214
+ declare const createVectorFaceLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
215
+ [x: string]: any;
216
+ }>>, Feature<ol_geom.Geometry, {
217
+ [x: string]: any;
218
+ }>>;
209
219
  /**
210
220
  * 创建矢量线图层
211
221
  * @param dataList
212
222
  * @param config
213
223
  */
214
- declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry>>, Feature<ol_geom.Geometry>>;
224
+ declare const createVectorLineLayer: (dataList: MassData[] | undefined, config: VectorConfig) => VectorLayer<VectorSource<Feature<ol_geom.Geometry, {
225
+ [x: string]: any;
226
+ }>>, Feature<ol_geom.Geometry, {
227
+ [x: string]: any;
228
+ }>>;
215
229
  /**
216
230
  * 移除覆盖物以及自定义图层
217
231
  */
@@ -234,17 +248,34 @@ declare const buildMassMarksStyles: (getImgUrlFn: GetImgUrlFn) => (iconConfig: I
234
248
  * @param vectorLayer
235
249
  */
236
250
  declare const createSelectByLayer: (vectorLayer: VectorLayer) => Select;
251
+ /**
252
+ * 添加Features
253
+ * @param targetLayer
254
+ * @param dataList
255
+ * @param config
256
+ */
257
+ declare const addFeaturesByLayer: (targetLayer: VectorLayer, dataList: MassData[], config: {
258
+ clear: false;
259
+ }) => void;
237
260
  /**
238
261
  * 创建massMarksLayer
239
262
  * @param dataList
240
263
  * @param styleList
241
264
  */
242
- declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point>>, Feature<Point>>;
265
+ declare const createMassMarksLayer: (dataList: MassData[], styleList?: StyleLike[]) => VectorLayer<VectorSource<Feature<Point, {
266
+ [x: string]: any;
267
+ }>>, Feature<Point, {
268
+ [x: string]: any;
269
+ }>>;
243
270
  /**
244
271
  * 添加massMarksLayer
245
272
  * @param getImgUrlFn
246
273
  */
247
- declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point>>, Feature<Point>>;
274
+ declare const addMassMarksLayer: (getImgUrlFn: GetImgUrlFn) => (dataList: never[] | undefined, iconConfig: IconConfig, openClick?: boolean) => VectorLayer<VectorSource<Feature<Point, {
275
+ [x: string]: any;
276
+ }>>, Feature<Point, {
277
+ [x: string]: any;
278
+ }>>;
248
279
  /**
249
280
  * 更新图层根据选中状态列表
250
281
  * @param checkedStatusList
@@ -260,6 +291,10 @@ declare const createOverlay: (config?: Options) => Overlay;
260
291
  * @param dataList
261
292
  * @param config
262
293
  */
263
- declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
294
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point, {
295
+ [x: string]: any;
296
+ }>>, Feature<ol_geom.Geometry, {
297
+ [x: string]: any;
298
+ }>>;
264
299
 
265
- export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type HzsyType, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, type WorldLayerType, type ZheJiangType, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
300
+ export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type HzsyType, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, type WorldLayerType, type ZheJiangType, activeFeatureByUid, addFeaturesByLayer, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, createZheJiangLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
package/dist/index.js CHANGED
@@ -70,13 +70,7 @@ import VectorSource from "ol/source/Vector";
70
70
  import { Point } from "ol/geom";
71
71
  import { singleClick } from "ol/events/condition";
72
72
  import { boundingExtent, getCenter } from "ol/extent";
73
- import {
74
- Icon,
75
- Text,
76
- Fill,
77
- Style,
78
- Stroke
79
- } from "ol/style";
73
+ import { Icon, Text, Fill, Style, Stroke } from "ol/style";
80
74
  var removeOverlays = (key = "") => {
81
75
  if (instance) {
82
76
  const overlays = instance.getOverlays().getArray().filter((overlay) => overlay.get(key || "position"));
@@ -393,13 +387,11 @@ var selectEventHandle = (vectorLayer, feature) => {
393
387
  }
394
388
  const isAutoFit = vectorLayer.get("_isAutoFit");
395
389
  if (isAutoFit) {
396
- const [x, y] = getCenter(feature.getGeometry().getExtent());
397
- const [offsetX, offsetY] = vectorLayer.get("_offset") || [0, 0];
398
390
  const view = instance.getView();
399
391
  view.animate({
400
392
  duration: 1e3,
401
393
  zoom: view.getZoom(),
402
- center: [x + offsetX, y + offsetY]
394
+ center: getCenter(feature.getGeometry().getExtent())
403
395
  });
404
396
  }
405
397
  };
@@ -448,8 +440,8 @@ var createSelectByLayer = (vectorLayer) => {
448
440
  vectorLayer.set("_selectInteraction", interaction);
449
441
  return interaction;
450
442
  };
451
- var createMassMarksLayer = (dataList, styleList = []) => {
452
- const features = dataList.map((item) => {
443
+ var createFeatures = (dataList, styleList = []) => {
444
+ return dataList.map((item) => {
453
445
  const { crsForm } = item;
454
446
  const coord = gcoord.transform(
455
447
  [+item.lnglat[0], +item.lnglat[1]],
@@ -466,10 +458,21 @@ var createMassMarksLayer = (dataList, styleList = []) => {
466
458
  feature.setStyle(styleList[item.style]);
467
459
  return feature;
468
460
  });
461
+ };
462
+ var addFeaturesByLayer = (targetLayer, dataList, config) => {
463
+ const massMarksStyles = targetLayer.get("_massMarksStyles");
464
+ const targetSource = targetLayer == null ? void 0 : targetLayer.getSource();
465
+ const { clear } = config;
466
+ if (clear) {
467
+ targetSource == null ? void 0 : targetSource.clear();
468
+ }
469
+ targetSource == null ? void 0 : targetSource.addFeatures(createFeatures(dataList, massMarksStyles));
470
+ };
471
+ var createMassMarksLayer = (dataList, styleList = []) => {
469
472
  const vectorLayer = new VectorLayer({
470
473
  zIndex: 2e3,
471
474
  source: new VectorSource({
472
- features
475
+ features: createFeatures(dataList, styleList)
473
476
  })
474
477
  });
475
478
  vectorLayer.setProperties({
@@ -552,12 +555,14 @@ var addMassMarksLayer = (getImgUrlFn) => {
552
555
  }
553
556
  massMarksLayer.setProperties({
554
557
  _isCustom: true,
558
+ _offset: offset,
555
559
  _hasLine: hasLine,
556
560
  _hasFace: hasFace,
557
561
  className: layerName,
558
562
  _layerName: layerName,
559
563
  _isVectorLayer: true,
560
- _isDynamic: isDynamic
564
+ _isDynamic: isDynamic,
565
+ _massMarksStyles: massMarksStyles
561
566
  });
562
567
  instance.addLayer(massMarksLayer);
563
568
  return massMarksLayer;
@@ -600,7 +605,8 @@ var createClusterLayer = (dataList, config) => {
600
605
  openClick,
601
606
  buildStyle,
602
607
  singleStyles,
603
- computedRadius
608
+ computedRadius,
609
+ layerName = "cluster-layer"
604
610
  } = config;
605
611
  const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
606
612
  styleCache[1] = singleStyles;
@@ -643,6 +649,7 @@ var createClusterLayer = (dataList, config) => {
643
649
  };
644
650
  const vectorLayer = new VectorLayer({
645
651
  zIndex: 200,
652
+ className: layerName,
646
653
  source: new Cluster({
647
654
  distance: distance || 80,
648
655
  minDistance: minDistance || 0,
@@ -676,7 +683,6 @@ import { WMTS } from "ol/source";
676
683
  import { TileGrid } from "ol/tilegrid";
677
684
  import { Tile } from "ol/layer";
678
685
  import WMTSTileGrid from "ol/tilegrid/WMTS";
679
- import WebGLTileLayer from "ol/layer/WebGLTile";
680
686
  var createBaseLayer = (layerName = "hzsyvector_dark") => {
681
687
  const config = {
682
688
  zIndex: -5,
@@ -723,7 +729,7 @@ var createBaseLayer = (layerName = "hzsyvector_dark") => {
723
729
  _layerName: layerName
724
730
  }
725
731
  };
726
- return isWebGLSupported() ? new WebGLTileLayer(config) : new Tile(config);
732
+ return new Tile(config);
727
733
  };
728
734
  var createMapWorldLayer = (layerName, tk = "c77eddc667c5bed016fded560baf93e7") => {
729
735
  const [name, matrixSet] = layerName.split("_");
@@ -936,8 +942,8 @@ var getLayersDataList = () => {
936
942
  };
937
943
  var determineGeometryType = (coordinates) => {
938
944
  const getArrayDepth = (arr) => {
939
- if (!Array.isArray(arr)) return 0;
940
- return 1 + Math.max(...arr.map((item) => getArrayDepth(item)), 0);
945
+ if (!Array.isArray(arr) || arr.length === 0) return 0;
946
+ return 1 + getArrayDepth(arr[0]);
941
947
  };
942
948
  const isClosedRing = (coords) => {
943
949
  if (!Array.isArray(coords) || coords.length < 3) return false;
@@ -982,10 +988,6 @@ var determineGeometryType = (coordinates) => {
982
988
  return "Invalid" /* Invalid */;
983
989
  }
984
990
  };
985
- var isWebGLSupported = () => {
986
- const canvas = document.createElement("canvas");
987
- return !!canvas.getContext("webgl") || !!canvas.getContext("experimental-webgl");
988
- };
989
991
 
990
992
  // src/ogc-utils.ts
991
993
  import { WMTS as WMTS2 } from "ol/source";
@@ -1038,6 +1040,7 @@ var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* (
1038
1040
  export {
1039
1041
  GeometryType,
1040
1042
  activeFeatureByUid,
1043
+ addFeaturesByLayer,
1041
1044
  addMassMarksLayer,
1042
1045
  appendFeaturesByLayer,
1043
1046
  buildMassMarksStyles,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-ol-utils",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "type": "module",
5
5
  "description": "Openlayers utils library",
6
6
  "files": [
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "gcoord": "^1.0.7",
29
29
  "mitt": "^3.0.1",
30
- "ol": "^10.6.1"
30
+ "ol": "^10.9.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "ol": ">=10.5.0"