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 +57 -0
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +56 -0
- 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,
|
|
@@ -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,
|