map-ol-utils 0.1.9 → 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,
@@ -632,6 +633,61 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
632
633
  )
633
634
  );
634
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
+ };
635
691
 
636
692
  // src/create-map.ts
637
693
  var import_interaction2 = require("ol/interaction");
@@ -985,6 +1041,7 @@ var createWmtsLayer = (serverUrl) => (config) => __async(null, null, function* (
985
1041
  createAnimationMarker,
986
1042
  createBaseLayer,
987
1043
  createBusinessLayer,
1044
+ createClusterLayer,
988
1045
  createMap,
989
1046
  createMapInstance,
990
1047
  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';
@@ -241,5 +242,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
241
242
  * @param config
242
243
  */
243
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>>;
244
251
 
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 };
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
@@ -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';
@@ -241,5 +242,11 @@ declare const updateMarksLayersByStatus: (checkedStatusList?: string[]) => MassD
241
242
  * @param config
242
243
  */
243
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>>;
244
251
 
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 };
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
@@ -566,6 +566,61 @@ var createOverlay = (config = { id: "popup-container", positioning: "top-center"
566
566
  )
567
567
  );
568
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
+ };
569
624
 
570
625
  // src/create-map.ts
571
626
  import { defaults as interactionDefaults } from "ol/interaction";
@@ -918,6 +973,7 @@ export {
918
973
  createAnimationMarker,
919
974
  createBaseLayer,
920
975
  createBusinessLayer,
976
+ createClusterLayer,
921
977
  createMap,
922
978
  createMapInstance,
923
979
  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.10",
4
4
  "type": "module",
5
5
  "description": "Openlayers utils library",
6
6
  "files": [