map-ol-utils 0.1.9 → 0.1.11

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,
@@ -143,9 +144,7 @@ var removeOverlays = (key = "") => {
143
144
  overlays.forEach((overlay) => instance.removeOverlay(overlay));
144
145
  }
145
146
  };
146
- var removeAnimationMarker = () => {
147
- removeOverlays("_isAnimationMarker");
148
- };
147
+ var removeAnimationMarker = () => removeOverlays("_isAnimationMarker");
149
148
  var createAnimationMarker = (imgUrl, data) => {
150
149
  removeAnimationMarker();
151
150
  const { width, height, lnglat, crsForm } = data;
@@ -632,6 +631,73 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
632
631
  )
633
632
  );
634
633
  };
634
+ var createClusterLayer = (dataList, config) => {
635
+ const count = dataList.length;
636
+ const styleCache = {};
637
+ const { distance, minDistance, openClick, buildStyle, singleStyles, computedRadius } = config;
638
+ const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
639
+ styleCache[1] = singleStyles;
640
+ const innerBuildStyle = (feature) => {
641
+ const size = feature.get("features").length;
642
+ let style = styleCache[size];
643
+ const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
644
+ if (!style) {
645
+ style = new import_style.Style({
646
+ image: new import_Circle.default({
647
+ radius: tempRadius * 20,
648
+ stroke: new import_style.Stroke({
649
+ width: 2,
650
+ color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
651
+ }),
652
+ fill: new import_style.Fill({
653
+ color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
654
+ })
655
+ }),
656
+ text: new import_style.Text({
657
+ text: size.toString(),
658
+ fill: new import_style.Fill({
659
+ color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
660
+ }),
661
+ textBaseline: "middle"
662
+ })
663
+ });
664
+ styleCache[size] = style;
665
+ }
666
+ if (Array.isArray(style)) {
667
+ const tempFeature = feature.get("features")[0];
668
+ const index = tempFeature.get("styleIndex");
669
+ tempFeature.setProperties({
670
+ unActiveStyle: style[index],
671
+ activeStyle: style[index + style.length / 2]
672
+ });
673
+ return style[index];
674
+ }
675
+ return style;
676
+ };
677
+ const vectorLayer = new import_Vector.default({
678
+ zIndex: 200,
679
+ style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature),
680
+ source: new import_Cluster.default({
681
+ distance: distance || 80,
682
+ minDistance: minDistance || 0,
683
+ source: new import_Vector2.default({
684
+ features: dataList.map((item) => {
685
+ const feature = new import_ol.Feature(new import_geom.Point(item.lnglat));
686
+ feature.setProperties(item);
687
+ return feature;
688
+ })
689
+ })
690
+ })
691
+ });
692
+ vectorLayer.setProperties({
693
+ _isCustom: true,
694
+ _isVectorLayer: true
695
+ });
696
+ if (openClick) {
697
+ createSelectByLayer(vectorLayer);
698
+ }
699
+ return vectorLayer;
700
+ };
635
701
 
636
702
  // src/create-map.ts
637
703
  var import_interaction2 = require("ol/interaction");
@@ -985,6 +1051,7 @@ var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* (
985
1051
  createAnimationMarker,
986
1052
  createBaseLayer,
987
1053
  createBusinessLayer,
1054
+ createClusterLayer,
988
1055
  createMap,
989
1056
  createMapInstance,
990
1057
  createMapWorldLayer,
package/dist/index.d.cts CHANGED
@@ -12,6 +12,7 @@ import * as ol_renderer_Layer from 'ol/renderer/Layer';
12
12
  import * as ol_geom from 'ol/geom';
13
13
  import { SimpleGeometry, Point } from 'ol/geom';
14
14
  import { Options } from 'ol/Overlay';
15
+ import Cluster from 'ol/source/Cluster';
15
16
  import { Select } from 'ol/interaction';
16
17
  import VectorLayer from 'ol/layer/Vector';
17
18
  import { StyleLike } from 'ol/style/Style';
@@ -60,6 +61,7 @@ type ClusterData = {
60
61
  };
61
62
  type ClusterConfig = {
62
63
  distance: number;
64
+ openClick?: boolean;
63
65
  minDistance: number;
64
66
  singleStyles: Style[];
65
67
  computedRadius?: (size: number) => number;
@@ -241,5 +243,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
241
243
  * @param config
242
244
  */
243
245
  declare const createOverlay: (config?: Options) => Overlay;
246
+ /**
247
+ * 创建聚合图层
248
+ * @param dataList
249
+ * @param config
250
+ */
251
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
244
252
 
245
- 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, 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 };
253
+ 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
@@ -12,6 +12,7 @@ import * as ol_renderer_Layer from 'ol/renderer/Layer';
12
12
  import * as ol_geom from 'ol/geom';
13
13
  import { SimpleGeometry, Point } from 'ol/geom';
14
14
  import { Options } from 'ol/Overlay';
15
+ import Cluster from 'ol/source/Cluster';
15
16
  import { Select } from 'ol/interaction';
16
17
  import VectorLayer from 'ol/layer/Vector';
17
18
  import { StyleLike } from 'ol/style/Style';
@@ -60,6 +61,7 @@ type ClusterData = {
60
61
  };
61
62
  type ClusterConfig = {
62
63
  distance: number;
64
+ openClick?: boolean;
63
65
  minDistance: number;
64
66
  singleStyles: Style[];
65
67
  computedRadius?: (size: number) => number;
@@ -241,5 +243,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
241
243
  * @param config
242
244
  */
243
245
  declare const createOverlay: (config?: Options) => Overlay;
246
+ /**
247
+ * 创建聚合图层
248
+ * @param dataList
249
+ * @param config
250
+ */
251
+ declare const createClusterLayer: (dataList: ClusterData[], config: ClusterConfig) => VectorLayer<Cluster<Feature<Point>>, Feature<ol_geom.Geometry>>;
244
252
 
245
- 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, 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 };
253
+ 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
@@ -77,9 +77,7 @@ var removeOverlays = (key = "") => {
77
77
  overlays.forEach((overlay) => instance.removeOverlay(overlay));
78
78
  }
79
79
  };
80
- var removeAnimationMarker = () => {
81
- removeOverlays("_isAnimationMarker");
82
- };
80
+ var removeAnimationMarker = () => removeOverlays("_isAnimationMarker");
83
81
  var createAnimationMarker = (imgUrl, data) => {
84
82
  removeAnimationMarker();
85
83
  const { width, height, lnglat, crsForm } = data;
@@ -566,6 +564,73 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
566
564
  )
567
565
  );
568
566
  };
567
+ var createClusterLayer = (dataList, config) => {
568
+ const count = dataList.length;
569
+ const styleCache = {};
570
+ const { distance, minDistance, openClick, buildStyle, singleStyles, computedRadius } = config;
571
+ const innerComputedRadius = (size) => Math.pow(size / count, 1 / 18);
572
+ styleCache[1] = singleStyles;
573
+ const innerBuildStyle = (feature) => {
574
+ const size = feature.get("features").length;
575
+ let style = styleCache[size];
576
+ const tempRadius = computedRadius ? computedRadius(size) : innerComputedRadius(size);
577
+ if (!style) {
578
+ style = new Style({
579
+ image: new CircleStyle({
580
+ radius: tempRadius * 20,
581
+ stroke: new Stroke({
582
+ width: 2,
583
+ color: `hsla(${180 - tempRadius * 180}, 100%, 40%, 1)`
584
+ }),
585
+ fill: new Fill({
586
+ color: `hsla(${180 - tempRadius * 180}, 100%, 50%, 1)`
587
+ })
588
+ }),
589
+ text: new Text({
590
+ text: size.toString(),
591
+ fill: new Fill({
592
+ color: `hsla(${180 - tempRadius * 180}, 100%, 10%, 1)`
593
+ }),
594
+ textBaseline: "middle"
595
+ })
596
+ });
597
+ styleCache[size] = style;
598
+ }
599
+ if (Array.isArray(style)) {
600
+ const tempFeature = feature.get("features")[0];
601
+ const index = tempFeature.get("styleIndex");
602
+ tempFeature.setProperties({
603
+ unActiveStyle: style[index],
604
+ activeStyle: style[index + style.length / 2]
605
+ });
606
+ return style[index];
607
+ }
608
+ return style;
609
+ };
610
+ const vectorLayer = new VectorLayer({
611
+ zIndex: 200,
612
+ style: (feature) => buildStyle ? buildStyle(feature) : innerBuildStyle(feature),
613
+ source: new Cluster({
614
+ distance: distance || 80,
615
+ minDistance: minDistance || 0,
616
+ source: new VectorSource({
617
+ features: dataList.map((item) => {
618
+ const feature = new Feature(new Point(item.lnglat));
619
+ feature.setProperties(item);
620
+ return feature;
621
+ })
622
+ })
623
+ })
624
+ });
625
+ vectorLayer.setProperties({
626
+ _isCustom: true,
627
+ _isVectorLayer: true
628
+ });
629
+ if (openClick) {
630
+ createSelectByLayer(vectorLayer);
631
+ }
632
+ return vectorLayer;
633
+ };
569
634
 
570
635
  // src/create-map.ts
571
636
  import { defaults as interactionDefaults } from "ol/interaction";
@@ -918,6 +983,7 @@ export {
918
983
  createAnimationMarker,
919
984
  createBaseLayer,
920
985
  createBusinessLayer,
986
+ createClusterLayer,
921
987
  createMap,
922
988
  createMapInstance,
923
989
  createMapWorldLayer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-ol-utils",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "type": "module",
5
5
  "description": "Openlayers utils library",
6
6
  "files": [