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 +60 -1
- package/dist/index.d.cts +27 -2
- package/dist/index.d.ts +27 -2
- package/dist/index.js +59 -1
- 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,
|
|
@@ -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
|
|
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
|
|
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,
|