map-ol-utils 0.1.8 → 0.1.10

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/dist/index.cjs CHANGED
@@ -75,6 +75,7 @@ __export(index_exports, {
75
75
  createAnimationMarker: () => createAnimationMarker,
76
76
  createBaseLayer: () => createBaseLayer,
77
77
  createBusinessLayer: () => createBusinessLayer,
78
+ createClusterLayer: () => createClusterLayer,
78
79
  createMap: () => createMap,
79
80
  createMapInstance: () => createMapInstance,
80
81
  createMapWorldLayer: () => createMapWorldLayer,
@@ -127,14 +128,16 @@ var import_control = require("ol/control");
127
128
  // src/layer-utils.ts
128
129
  var import_format = require("ol/format");
129
130
  var import_ol = require("ol");
131
+ var import_Cluster = __toESM(require("ol/source/Cluster"), 1);
130
132
  var import_interaction = require("ol/interaction");
133
+ var import_Circle = __toESM(require("ol/style/Circle"), 1);
131
134
  var import_gcoord = __toESM(require("gcoord"), 1);
132
135
  var import_Vector = __toESM(require("ol/layer/Vector"), 1);
133
136
  var import_Vector2 = __toESM(require("ol/source/Vector"), 1);
134
137
  var import_geom = require("ol/geom");
135
138
  var import_condition = require("ol/events/condition");
136
- var import_style = require("ol/style");
137
139
  var import_extent = require("ol/extent");
140
+ var import_style = require("ol/style");
138
141
  var removeOverlays = (key = "") => {
139
142
  if (instance) {
140
143
  const overlays = instance.getOverlays().getArray().filter((overlay) => overlay.get(key || "position"));
@@ -630,6 +633,61 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
630
633
  )
631
634
  );
632
635
  };
636
+ var createClusterLayer = (dataList, config) => {
637
+ const count = dataList.length;
638
+ const styleCache = {};
639
+ const { distance, minDistance, buildStyle, singleStyles, computedRadius } = config;
640
+ const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
641
+ styleCache[1] = singleStyles;
642
+ const innerBuildStyle = (feature) => {
643
+ const size = feature.get("features").length;
644
+ let style = styleCache[size];
645
+ const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
646
+ if (!style) {
647
+ style = new import_style.Style({
648
+ image: new import_Circle.default({
649
+ radius: tempRadius * 20,
650
+ stroke: new import_style.Stroke({
651
+ width: 2,
652
+ color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
653
+ }),
654
+ fill: new import_style.Fill({
655
+ color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
656
+ })
657
+ }),
658
+ text: new import_style.Text({
659
+ text: size.toString(),
660
+ fill: new import_style.Fill({
661
+ color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
662
+ }),
663
+ textBaseline: "middle"
664
+ })
665
+ });
666
+ styleCache[size] = style;
667
+ }
668
+ if (Array.isArray(style)) {
669
+ const tempFeature = feature.get("features")[0];
670
+ const index = tempFeature.get("styleIndex");
671
+ return style[index];
672
+ }
673
+ return style;
674
+ };
675
+ return new import_Vector.default({
676
+ zIndex: 200,
677
+ style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature),
678
+ source: new import_Cluster.default({
679
+ distance: distance || 80,
680
+ minDistance: minDistance || 0,
681
+ source: new import_Vector2.default({
682
+ features: dataList.map((item) => {
683
+ const feature = new import_ol.Feature(new import_geom.Point(item.lnglat));
684
+ feature.setProperties(item);
685
+ return feature;
686
+ })
687
+ })
688
+ })
689
+ });
690
+ };
633
691
 
634
692
  // src/create-map.ts
635
693
  var import_interaction2 = require("ol/interaction");
@@ -983,6 +1041,7 @@ var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* (
983
1041
  createAnimationMarker,
984
1042
  createBaseLayer,
985
1043
  createBusinessLayer,
1044
+ createClusterLayer,
986
1045
  createMap,
987
1046
  createMapInstance,
988
1047
  createMapWorldLayer,
package/dist/index.d.cts CHANGED
@@ -4,17 +4,20 @@ import { CRSTypes } from 'gcoord';
4
4
  import * as ol_source from 'ol/source';
5
5
  import { Source, XYZ, WMTS } from 'ol/source';
6
6
  import { Coordinate } from 'ol/coordinate';
7
+ import { Style } from 'ol/style';
8
+ import { FeatureLike } from 'ol/Feature';
7
9
  import { Emitter, EventType } from 'mitt';
8
10
  import TileLayer from 'ol/layer/Tile';
9
11
  import * as ol_renderer_Layer from 'ol/renderer/Layer';
10
12
  import * as ol_geom from 'ol/geom';
11
13
  import { SimpleGeometry, Point } from 'ol/geom';
12
14
  import { Options } from 'ol/Overlay';
13
- import { FitOptions, AnimationOptions } from 'ol/View';
15
+ import Cluster from 'ol/source/Cluster';
14
16
  import { Select } from 'ol/interaction';
15
17
  import VectorLayer from 'ol/layer/Vector';
16
18
  import { StyleLike } from 'ol/style/Style';
17
19
  import VectorSource from 'ol/source/Vector';
20
+ import { FitOptions, AnimationOptions } from 'ol/View';
18
21
 
19
22
  interface CustomMap extends Map$1 {
20
23
  activeBaseLayer?: string;
@@ -47,6 +50,22 @@ type VectorConfig = {
47
50
  activeStrokeWeight?: number;
48
51
  colorMap?: Map<string, string>;
49
52
  };
53
+ type ClusterData = {
54
+ _uuid: string;
55
+ name: string;
56
+ style: number;
57
+ lnglat: Array<number>;
58
+ rawData: {
59
+ [key: string]: any;
60
+ };
61
+ };
62
+ type ClusterConfig = {
63
+ distance: number;
64
+ minDistance: number;
65
+ singleStyles: Style[];
66
+ computedRadius?: (size: number) => number;
67
+ buildStyle?: (feature: FeatureLike) => Style;
68
+ };
50
69
  type IconConfig = {
51
70
  baseUrl: string;
52
71
  hasLine?: boolean;
@@ -223,5 +242,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
223
242
  * @param config
224
243
  */
225
244
  declare const createOverlay: (config?: Options) => Overlay;
245
+ /**
246
+ * 创建聚合图层
247
+ * @param dataList
248
+ * @param config
249
+ */
250
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
226
251
 
227
- export { type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
252
+ export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
package/dist/index.d.ts CHANGED
@@ -4,17 +4,20 @@ import { CRSTypes } from 'gcoord';
4
4
  import * as ol_source from 'ol/source';
5
5
  import { Source, XYZ, WMTS } from 'ol/source';
6
6
  import { Coordinate } from 'ol/coordinate';
7
+ import { Style } from 'ol/style';
8
+ import { FeatureLike } from 'ol/Feature';
7
9
  import { Emitter, EventType } from 'mitt';
8
10
  import TileLayer from 'ol/layer/Tile';
9
11
  import * as ol_renderer_Layer from 'ol/renderer/Layer';
10
12
  import * as ol_geom from 'ol/geom';
11
13
  import { SimpleGeometry, Point } from 'ol/geom';
12
14
  import { Options } from 'ol/Overlay';
13
- import { FitOptions, AnimationOptions } from 'ol/View';
15
+ import Cluster from 'ol/source/Cluster';
14
16
  import { Select } from 'ol/interaction';
15
17
  import VectorLayer from 'ol/layer/Vector';
16
18
  import { StyleLike } from 'ol/style/Style';
17
19
  import VectorSource from 'ol/source/Vector';
20
+ import { FitOptions, AnimationOptions } from 'ol/View';
18
21
 
19
22
  interface CustomMap extends Map$1 {
20
23
  activeBaseLayer?: string;
@@ -47,6 +50,22 @@ type VectorConfig = {
47
50
  activeStrokeWeight?: number;
48
51
  colorMap?: Map<string, string>;
49
52
  };
53
+ type ClusterData = {
54
+ _uuid: string;
55
+ name: string;
56
+ style: number;
57
+ lnglat: Array<number>;
58
+ rawData: {
59
+ [key: string]: any;
60
+ };
61
+ };
62
+ type ClusterConfig = {
63
+ distance: number;
64
+ minDistance: number;
65
+ singleStyles: Style[];
66
+ computedRadius?: (size: number) => number;
67
+ buildStyle?: (feature: FeatureLike) => Style;
68
+ };
50
69
  type IconConfig = {
51
70
  baseUrl: string;
52
71
  hasLine?: boolean;
@@ -223,5 +242,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
223
242
  * @param config
224
243
  */
225
244
  declare const createOverlay: (config?: Options) => Overlay;
245
+ /**
246
+ * 创建聚合图层
247
+ * @param dataList
248
+ * @param config
249
+ */
250
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
226
251
 
227
- export { type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
252
+ export { type ClusterConfig, type ClusterData, type CustomMap, type GeometryCoordinates, GeometryType, type GetImgUrl, type GetImgUrlFn, type IconConfig, type MassData, type VectorConfig, type WmtsSourceOptions, activeFeatureByUid, addMassMarksLayer, appendFeaturesByLayer, buildMassMarksStyles, createAnimationMarker, createBaseLayer, createBusinessLayer, createClusterLayer, createMap, createMapInstance, createMapWorldLayer, createMassMarksLayer, createOverlay, createSelectByLayer, createVectorFaceLayer, createVectorLineLayer, createWmtsLayer, disposeMap, emitter, getLayerByName, getLayersDataList, getMapInstance, instance, removeAllLayers, removeLayerByName, removeOverlays, resetActiveFeature, resetActiveVector, resetMap, resetZoomAndCenter, setFitViewByCoords, setFitViewByGeom, setFitViewByLayer, updateMarksLayersByStatus };
package/dist/index.js CHANGED
@@ -61,14 +61,16 @@ import { defaults } from "ol/control";
61
61
  // src/layer-utils.ts
62
62
  import { GeoJSON } from "ol/format";
63
63
  import { Feature, Overlay } from "ol";
64
+ import Cluster from "ol/source/Cluster";
64
65
  import { Select } from "ol/interaction";
66
+ import CircleStyle from "ol/style/Circle";
65
67
  import gcoord from "gcoord";
66
68
  import VectorLayer from "ol/layer/Vector";
67
69
  import VectorSource from "ol/source/Vector";
68
70
  import { Point } from "ol/geom";
69
71
  import { singleClick } from "ol/events/condition";
70
- import { Fill, Icon, Stroke, Style } from "ol/style";
71
72
  import { boundingExtent, getCenter } from "ol/extent";
73
+ import { Icon, Text, Fill, Style, Stroke } from "ol/style";
72
74
  var removeOverlays = (key = "") => {
73
75
  if (instance) {
74
76
  const overlays = instance.getOverlays().getArray().filter((overlay) => overlay.get(key || "position"));
@@ -564,6 +566,61 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
564
566
  )
565
567
  );
566
568
  };
569
+ var createClusterLayer = (dataList, config) => {
570
+ const count = dataList.length;
571
+ const styleCache = {};
572
+ const { distance, minDistance, buildStyle, singleStyles, computedRadius } = config;
573
+ const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
574
+ styleCache[1] = singleStyles;
575
+ const innerBuildStyle = (feature) => {
576
+ const size = feature.get("features").length;
577
+ let style = styleCache[size];
578
+ const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
579
+ if (!style) {
580
+ style = new Style({
581
+ image: new CircleStyle({
582
+ radius: tempRadius * 20,
583
+ stroke: new Stroke({
584
+ width: 2,
585
+ color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
586
+ }),
587
+ fill: new Fill({
588
+ color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
589
+ })
590
+ }),
591
+ text: new Text({
592
+ text: size.toString(),
593
+ fill: new Fill({
594
+ color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
595
+ }),
596
+ textBaseline: "middle"
597
+ })
598
+ });
599
+ styleCache[size] = style;
600
+ }
601
+ if (Array.isArray(style)) {
602
+ const tempFeature = feature.get("features")[0];
603
+ const index = tempFeature.get("styleIndex");
604
+ return style[index];
605
+ }
606
+ return style;
607
+ };
608
+ return new VectorLayer({
609
+ zIndex: 200,
610
+ style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature),
611
+ source: new Cluster({
612
+ distance: distance || 80,
613
+ minDistance: minDistance || 0,
614
+ source: new VectorSource({
615
+ features: dataList.map((item) => {
616
+ const feature = new Feature(new Point(item.lnglat));
617
+ feature.setProperties(item);
618
+ return feature;
619
+ })
620
+ })
621
+ })
622
+ });
623
+ };
567
624
 
568
625
  // src/create-map.ts
569
626
  import { defaults as interactionDefaults } from "ol/interaction";
@@ -916,6 +973,7 @@ export {
916
973
  createAnimationMarker,
917
974
  createBaseLayer,
918
975
  createBusinessLayer,
976
+ createClusterLayer,
919
977
  createMap,
920
978
  createMapInstance,
921
979
  createMapWorldLayer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-ol-utils",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "description": "Openlayers utils library",
6
6
  "files": [