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 +109 -0
- package/dist/index.cjs +26 -16
- package/dist/index.d.cts +47 -12
- package/dist/index.d.ts +47 -12
- package/dist/index.js +26 -23
- package/package.json +2 -2
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:
|
|
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
|
|
514
|
-
|
|
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
|
|
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 +
|
|
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,
|
|
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 {
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 {
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
452
|
-
|
|
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
|
|
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 +
|
|
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.
|
|
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.
|
|
30
|
+
"ol": "^10.9.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"ol": ">=10.5.0"
|