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 +70 -3
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +69 -3
- package/package.json +1 -1
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,
|