qm-map-maplibre-gl 0.0.2 → 0.0.3
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/context/mapContext.d.ts +13 -0
- package/dist/maplibregl/MapWrapper.d.ts +29 -0
- package/dist/maplibregl/layer/BaseLayer.d.ts +20 -0
- package/dist/maplibregl/layer/LayerGroupWrapper.d.ts +22 -2
- package/dist/maplibregl/layer/LayerWrapper.d.ts +9 -2
- package/dist/qm-map.es.js +17 -16
- package/dist/qm-map.umd.js +2 -2
- package/dist/utils.d.ts +14 -3
- package/dist/widget/BaseWidget/index.d.ts +1 -0
- package/dist/widget/MapWidget/index.d.ts +12 -0
- package/dist/widget/PopupPanel/index.d.ts +4 -0
- package/dist/widget/PopupWrapper/index.d.ts +12 -0
- package/dist/widget/Print/MapGenerator/CrosshairManager.d.ts +12 -0
- package/dist/widget/Print/MapGenerator/ImageExporter.d.ts +16 -0
- package/dist/widget/Print/MapGenerator/PDFGenerator.d.ts +30 -0
- package/dist/widget/Print/MapGenerator/PrintableAreaManager.d.ts +22 -0
- package/dist/widget/Print/MapGenerator/SVGExporter.d.ts +13 -0
- package/package.json +1 -1
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { default as MapWrapper } from '../maplibregl/MapWrapper';
|
|
2
|
+
/**
|
|
3
|
+
* 地图上下文类型定义
|
|
4
|
+
* @property map - 地图包装器实例
|
|
5
|
+
*/
|
|
2
6
|
export interface TMapContext {
|
|
3
7
|
map: MapWrapper | null;
|
|
4
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* 地图上下文
|
|
11
|
+
* 用于在组件树中共享地图实例
|
|
12
|
+
*/
|
|
5
13
|
export declare const MapContext: import('react').Context<TMapContext>;
|
|
14
|
+
/**
|
|
15
|
+
* 使用地图上下文的 Hook
|
|
16
|
+
* @returns 返回地图上下文对象
|
|
17
|
+
* @throws 如果在非函数组件中使用会抛出错误
|
|
18
|
+
*/
|
|
6
19
|
export declare const useMap: () => TMapContext;
|
|
@@ -34,11 +34,40 @@ declare class MapWrapper extends Map {
|
|
|
34
34
|
private _layers;
|
|
35
35
|
get layers(): (LayerWrapper | LayerGroupWrapper)[];
|
|
36
36
|
constructor(options: TMapOptions);
|
|
37
|
+
/**
|
|
38
|
+
* 根据ID递归查找图层或图层组
|
|
39
|
+
* @param layers - 图层数组
|
|
40
|
+
* @param id - 要查找的图层ID
|
|
41
|
+
* @returns 找到的图层或图层组,未找到返回 undefined
|
|
42
|
+
*/
|
|
37
43
|
getLayerWrapper(layers: Array<LayerWrapper | LayerGroupWrapper>, id: string): LayerWrapper | LayerGroupWrapper | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* 添加图层包装器到地图
|
|
46
|
+
* @param layer - 图层或图层组包装器
|
|
47
|
+
* @param beforeId - 可选的图层ID,用于指定插入位置
|
|
48
|
+
*/
|
|
38
49
|
addLayerWrapper(layer: LayerWrapper | LayerGroupWrapper, beforeId?: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* 从地图移除图层包装器
|
|
52
|
+
* @param layer - 图层或图层组包装器
|
|
53
|
+
* @param removeSource - 是否同时移除数据源
|
|
54
|
+
*/
|
|
39
55
|
removeLayerWrapper(layer: LayerWrapper | LayerGroupWrapper, removeSource?: boolean): void;
|
|
56
|
+
/**
|
|
57
|
+
* 加载图层配置
|
|
58
|
+
* 根据配置创建图层或图层组并添加到地图
|
|
59
|
+
* @param mapLayerSettting - 图层配置数组
|
|
60
|
+
*/
|
|
40
61
|
load(mapLayerSettting: TMapLayerSettting): void;
|
|
62
|
+
/**
|
|
63
|
+
* 高亮选中要素
|
|
64
|
+
* 在地图上显示选中的 GeoJSON 要素
|
|
65
|
+
* @param geo - GeoJSON 要素或要素集合
|
|
66
|
+
*/
|
|
41
67
|
selectFeature(geo: GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry> | string): void;
|
|
68
|
+
/**
|
|
69
|
+
* 清除选中要素的高亮显示
|
|
70
|
+
*/
|
|
42
71
|
clearSelect(): void;
|
|
43
72
|
/**
|
|
44
73
|
* 查找有效beforeId
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import { default as MapWrapper } from '../MapWrapper';
|
|
2
2
|
import { TLayerOptions } from '../typings/TLayerOptions';
|
|
3
|
+
/**
|
|
4
|
+
* 图层基类
|
|
5
|
+
* 所有图层类型的抽象基类,定义了图层的通用行为和接口
|
|
6
|
+
*/
|
|
3
7
|
declare abstract class BaseLayer {
|
|
4
8
|
protected _options: TLayerOptions;
|
|
5
9
|
get options(): TLayerOptions;
|
|
6
10
|
constructor(options: TLayerOptions);
|
|
11
|
+
/**
|
|
12
|
+
* 抽象方法:添加图层到地图
|
|
13
|
+
* @param map - 地图包装器实例
|
|
14
|
+
* @param beforeId - 可选的图层ID,用于指定图层插入位置
|
|
15
|
+
*/
|
|
7
16
|
protected abstract add(map: MapWrapper, beforeId?: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* 添加图层到地图的公共方法
|
|
19
|
+
* 处理图层状态检查和插入位置查找
|
|
20
|
+
* @param map - 地图包装器实例
|
|
21
|
+
* @param beforeId - 可选的图层ID
|
|
22
|
+
*/
|
|
8
23
|
onAdd(map: MapWrapper, beforeId?: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* 从地图移除图层
|
|
26
|
+
* @param map - 地图包装器实例
|
|
27
|
+
* @param removeSource - 是否同时移除数据源
|
|
28
|
+
*/
|
|
9
29
|
onRemove(map: MapWrapper, removeSource?: boolean): void;
|
|
10
30
|
}
|
|
11
31
|
export default BaseLayer;
|
|
@@ -2,17 +2,37 @@ import { default as MapWrapper } from '../MapWrapper';
|
|
|
2
2
|
import { TLayerGroupOptions } from '../typings/TLayerOptions';
|
|
3
3
|
import { default as LayerWrapper } from './LayerWrapper';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 图层组包装类
|
|
6
|
+
* 用于将多个图层作为一个整体进行控制
|
|
7
|
+
* 支持嵌套的图层组结构
|
|
7
8
|
*/
|
|
8
9
|
declare class LayerGroupWrapper {
|
|
9
10
|
private _options;
|
|
10
11
|
get options(): TLayerGroupOptions;
|
|
11
12
|
private _layers;
|
|
12
13
|
get layers(): (LayerWrapper | LayerGroupWrapper)[];
|
|
14
|
+
/**
|
|
15
|
+
* 创建图层组实例
|
|
16
|
+
* @param options - 图层组配置选项
|
|
17
|
+
*/
|
|
13
18
|
constructor(options: TLayerGroupOptions);
|
|
19
|
+
/**
|
|
20
|
+
* 将图层组添加到地图
|
|
21
|
+
* 递归添加所有子图层
|
|
22
|
+
* @param map - 地图包装器实例
|
|
23
|
+
* @param beforeId - 可选的图层ID,用于指定插入位置
|
|
24
|
+
*/
|
|
14
25
|
onAdd(map: MapWrapper, beforeId?: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* 从地图移除图层组
|
|
28
|
+
* 递归移除所有子图层
|
|
29
|
+
* @param map - 地图包装器实例
|
|
30
|
+
*/
|
|
15
31
|
onRemove(map: MapWrapper): void;
|
|
32
|
+
/**
|
|
33
|
+
* 更新图层组的状态
|
|
34
|
+
* 根据子图层的添加状态更新组的 isAdd 属性
|
|
35
|
+
*/
|
|
16
36
|
private updateOptions;
|
|
17
37
|
}
|
|
18
38
|
export default LayerGroupWrapper;
|
|
@@ -2,11 +2,18 @@ import { default as MapWrapper } from '../MapWrapper';
|
|
|
2
2
|
import { TLayerOptions } from '../typings/TLayerOptions';
|
|
3
3
|
import { default as BaseLayer } from './BaseLayer';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 图层包装类
|
|
6
|
+
* 继承自 BaseLayer,负责单个图层的添加和管理
|
|
7
|
+
* 处理数据源的创建和图层添加到地图的逻辑
|
|
7
8
|
*/
|
|
8
9
|
declare class LayerWrapper extends BaseLayer {
|
|
9
10
|
constructor(options: TLayerOptions);
|
|
11
|
+
/**
|
|
12
|
+
* 添加图层到地图
|
|
13
|
+
* 如果数据源不存在则创建,然后将图层添加到地图
|
|
14
|
+
* @param map - 地图包装器实例
|
|
15
|
+
* @param beforeId - 可选的图层ID,用于指定图层插入位置
|
|
16
|
+
*/
|
|
10
17
|
protected add(map: MapWrapper, beforeId?: string): void;
|
|
11
18
|
}
|
|
12
19
|
export default LayerWrapper;
|
package/dist/qm-map.es.js
CHANGED
|
@@ -10,12 +10,12 @@ var m = {
|
|
|
10
10
|
LayerList: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTMyNjkyNzI3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijg5OTAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTg1Mi42IDQ2Mi45bDEyLjEgNy42YzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDc2NC4xYy0xNy4zIDEwLjgtMzkuMiAxMC44LTU2LjQgMEwxNTkuMyA1NjBjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDEyLjEtNy42TDQ4My45IDY1OWMxNy4zIDEwLjggMzkuMiAxMC44IDU2LjQgMGwzMTIuMi0xOTYgMC4xLTAuMXogbTAgMTU2LjFsMTIuMSA3LjZjMjQuOCAxNS42IDMyLjMgNDguMyAxNi43IDczLjItNC4yIDYuNy05LjkgMTIuNC0xNi43IDE2LjdMNTQwLjQgOTIwLjJjLTE3LjMgMTAuOC0zOS4yIDEwLjggNTYuNCAwTDE1OS4zIDcxNi4xYy0yNC44LTE1LjYtMzIuMy00OC4zLTE2LjctNzMuMiA0LjItNi43IDkuOS0xMi40IDE2LjctMTYuN2wxMi4xLTcuNkw0ODMuOSA4MTVjMTcuMyAxMC44IDM5LjIgMTAuOCA1Ni40IDBsMzEyLjItMTk2aDAuMXpNNTQwIDEwNi40bDMyNC42IDIwNC4xYzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDYwNGMtMTcuMyAxMC44LTM5LjIgMTAuOC01Ni40IDBMMTU5LjMgMzk5LjhjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDMyNC40LTIwMy43YzE3LjMtMTAuOCAzOS4yLTEwLjggNTYuNCAwbC0wLjEgMC4yeiIgcC1pZD0iODk5MSI+PC9wYXRoPjwvc3ZnPg==",
|
|
11
11
|
Print: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzc5NjgwOTI2ODcwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE2ODkiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTI5MS42MTk2NCAxMDI0aDQzOC43NThhNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NTItNzQuMjUxVjczMS4wNDRIMjE5LjM5MjY0Vjk0OS43NUE3Mi45MDEgNzIuOTAxIDAgMCAwIDI5MS42MjA2NCAxMDI0ek03MzAuMzc3NjQgMC4wMDVIMjkxLjYyMDY0YTcxLjU1MSA3MS41NTEgMCAwIDAtNzIuMjI3IDY3LjUwMXYyMjIuMDhoNTgzLjIxMlY3Mi4yM0E3Mi4yMjYgNzIuMjI2IDAgMCAwIDczNS4xMDI2NCAwLjAwNXogbTE0Ny4xNTMgMjg5LjU4djc0LjkyN0gxNDUuODE2NjR2LTc0LjkyN0g3Mi4yMzk2NEE3My41NzYgNzMuNTc2IDAgMCAwIDAuMDEzNjQgMzY0LjUxMnY1MTMuMDFBNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NjQ2NCA5NTEuMWg3NC4yNTJWNjU3LjQ2OEg4NzcuNTMwNjR2MjkyLjk1Nmg3NC4yNTJhNzMuNTc2IDczLjU3NiAwIDAgMCA3Mi4yMjYtNzIuOTAydi01MTMuMDFhNzQuOTI2IDc0LjkyNiAwIDAgMC03NC4yNTEtNzQuOTI3eiBtMCAyMjIuNzU1SDY1Ny40NzY2NHYtNzQuMjUySDg3Ny41MzA2NHoiIHAtaWQ9IjE2OTAiPjwvcGF0aD48L3N2Zz4="
|
|
12
12
|
}, h = t((e) => {
|
|
13
|
-
let { position: t, children: n, name: r, icon: i, width: a, height: s, openHandle: u } = e, [
|
|
13
|
+
let { position: t, children: n, name: r, icon: i, width: a, height: s, openHandle: u, title: d } = e, [f, p] = o(!1), [m, h] = o(!1);
|
|
14
14
|
return /* @__PURE__ */ l("div", {
|
|
15
15
|
className: "maplibregl-control",
|
|
16
16
|
style: {
|
|
17
|
-
width:
|
|
18
|
-
height:
|
|
17
|
+
width: f ? a ?? 30 : 30,
|
|
18
|
+
height: f ? s ?? 30 : 30,
|
|
19
19
|
...t
|
|
20
20
|
},
|
|
21
21
|
children: [/* @__PURE__ */ l("div", {
|
|
@@ -23,15 +23,15 @@ var m = {
|
|
|
23
23
|
children: [/* @__PURE__ */ c("div", {
|
|
24
24
|
className: "maplibregl-bar-button",
|
|
25
25
|
onClick: () => {
|
|
26
|
-
u ? (u(!
|
|
26
|
+
u ? (u(!m), h(!m)) : p(!f);
|
|
27
27
|
},
|
|
28
|
-
title: r
|
|
28
|
+
title: d || r || "",
|
|
29
29
|
style: { backgroundImage: `url(${i})` }
|
|
30
30
|
}), r && /* @__PURE__ */ c("div", {
|
|
31
31
|
className: "maplibregl-bar-title",
|
|
32
32
|
children: r
|
|
33
33
|
})]
|
|
34
|
-
}),
|
|
34
|
+
}), f && n]
|
|
35
35
|
});
|
|
36
36
|
});
|
|
37
37
|
//#endregion
|
|
@@ -438,6 +438,7 @@ var k = t(O), A = (e, t) => {
|
|
|
438
438
|
icon: m.LayerList,
|
|
439
439
|
width: 200,
|
|
440
440
|
height: t.length * 28 < 280 ? 280 : t.length * 28,
|
|
441
|
+
title: "点击展开/收起图层列表,勾选控制图层显示",
|
|
441
442
|
children: /* @__PURE__ */ c(I, {
|
|
442
443
|
checkable: !0,
|
|
443
444
|
checkedKeys: t,
|
|
@@ -519,6 +520,7 @@ var k = t(O), A = (e, t) => {
|
|
|
519
520
|
icon: m.Legend,
|
|
520
521
|
width: 180,
|
|
521
522
|
height: s,
|
|
523
|
+
title: "点击展开/收起图例面板",
|
|
522
524
|
children: /* @__PURE__ */ c("div", {
|
|
523
525
|
className: "maplibregl-legend",
|
|
524
526
|
children: r
|
|
@@ -943,6 +945,7 @@ var k = t(O), A = (e, t) => {
|
|
|
943
945
|
position: e.position,
|
|
944
946
|
icon: m.Print,
|
|
945
947
|
openHandle: y,
|
|
948
|
+
title: "点击打开打印设置面板",
|
|
946
949
|
children: /* @__PURE__ */ c(s, {})
|
|
947
950
|
}), /* @__PURE__ */ l("div", {
|
|
948
951
|
className: `qm-print-panel ${r ? "open" : ""}`,
|
|
@@ -999,6 +1002,7 @@ var k = t(O), A = (e, t) => {
|
|
|
999
1002
|
type: "button",
|
|
1000
1003
|
className: "qm-print-export-button",
|
|
1001
1004
|
onClick: v,
|
|
1005
|
+
title: "根据设置导出地图",
|
|
1002
1006
|
children: "导 出"
|
|
1003
1007
|
})]
|
|
1004
1008
|
})] });
|
|
@@ -1202,6 +1206,7 @@ var ce = t((e) => {
|
|
|
1202
1206
|
position: { ...e.position },
|
|
1203
1207
|
icon: m.Swipe,
|
|
1204
1208
|
openHandle: g,
|
|
1209
|
+
title: "点击打开卷帘对比面板,对比两期地图数据",
|
|
1205
1210
|
children: /* @__PURE__ */ c(s, {})
|
|
1206
1211
|
}), /* @__PURE__ */ c(ce, {
|
|
1207
1212
|
title: "卷帘对比",
|
|
@@ -1251,25 +1256,25 @@ var ce = t((e) => {
|
|
|
1251
1256
|
}, $ = [
|
|
1252
1257
|
{
|
|
1253
1258
|
id: "point",
|
|
1254
|
-
title: "
|
|
1259
|
+
title: "绘制点:点击地图绘制点要素",
|
|
1255
1260
|
mode: "draw_point",
|
|
1256
1261
|
icon: Q.Point
|
|
1257
1262
|
},
|
|
1258
1263
|
{
|
|
1259
1264
|
id: "line",
|
|
1260
|
-
title: "
|
|
1265
|
+
title: "绘制线:点击地图开始,双击结束绘制线要素",
|
|
1261
1266
|
mode: "draw_line_string",
|
|
1262
1267
|
icon: Q.Line
|
|
1263
1268
|
},
|
|
1264
1269
|
{
|
|
1265
1270
|
id: "polygon",
|
|
1266
|
-
title: "
|
|
1271
|
+
title: "绘制面:点击地图开始,双击结束绘制面要素",
|
|
1267
1272
|
mode: "draw_polygon",
|
|
1268
1273
|
icon: Q.Polygon
|
|
1269
1274
|
},
|
|
1270
1275
|
{
|
|
1271
1276
|
id: "reset",
|
|
1272
|
-
title: "
|
|
1277
|
+
title: "清除:删除所有绘制的要素",
|
|
1273
1278
|
mode: "simple_select",
|
|
1274
1279
|
icon: Q.Reset
|
|
1275
1280
|
}
|
|
@@ -1492,11 +1497,7 @@ var ce = t((e) => {
|
|
|
1492
1497
|
}
|
|
1493
1498
|
}
|
|
1494
1499
|
], de = t((e) => {
|
|
1495
|
-
let { position: t, onDraw: n, initFeature: r, modes: o } = e, s = o ? $.filter((e) => o.includes(e.mode) || e.id === "reset") : $, { map: l } = D(), u = a(null)
|
|
1496
|
-
i(() => {
|
|
1497
|
-
r && d(r);
|
|
1498
|
-
}, [r]);
|
|
1499
|
-
let d = (e) => {
|
|
1500
|
+
let { position: t, onDraw: n, initFeature: r, modes: o } = e, s = o ? $.filter((e) => o.includes(e.mode) || e.id === "reset") : $, { map: l } = D(), u = a(null), d = (e) => {
|
|
1500
1501
|
if (l && e.features && u.current) {
|
|
1501
1502
|
let t = b(e.features[0]);
|
|
1502
1503
|
t && l.fitBounds(t, { maxZoom: 16 });
|
|
@@ -1520,7 +1521,7 @@ var ce = t((e) => {
|
|
|
1520
1521
|
}), l.addControl(u.current, "bottom-left"), l.on("draw.create", m), l.on("draw.delete", m), l.on("draw.update", m), l.on("draw.modechange", (e) => {
|
|
1521
1522
|
let t = l.getCanvas();
|
|
1522
1523
|
e.mode === "simple_select" ? t.style.cursor = "" : t.style.cursor = "crosshair";
|
|
1523
|
-
})), () => {}), []), /* @__PURE__ */ c("div", {
|
|
1524
|
+
}), r && d(r)), () => {}), []), /* @__PURE__ */ c("div", {
|
|
1524
1525
|
className: "mapboxgl-draw",
|
|
1525
1526
|
style: { ...t },
|
|
1526
1527
|
children: /* @__PURE__ */ c("div", {
|
package/dist/qm-map.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime"),require("maplibre-gl"),require("react-dom"),require("@mapbox/mapbox-gl-draw")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`,`maplibre-gl`,`react-dom`,`@mapbox/mapbox-gl-draw`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.QmMap={},e.react,e.react_jsx_runtime,e.maplibre_gl,e[`react-dom`],e._mapbox_mapbox_gl_draw))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=Object.create,s=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,u=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty,f=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=l(t),a=0,o=i.length,u;a<o;a++)u=i[a],!d.call(e,u)&&u!==n&&s(e,u,{get:(e=>t[e]).bind(null,u),enumerable:!(r=c(t,u))||r.enumerable});return e},p=(e,t,n)=>(n=e==null?{}:o(u(e)),f(t||!e||!e.__esModule?s(n,`default`,{value:e,enumerable:!0}):n,e));t=p(t,1),a=p(a,1);var m={Swipe:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTk3MzE2MzYyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijk2NTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTUzNy4xIDkxMC4yYzAgNy44IDcuOSAwIDAgMHogbS00OS4yIDBjLTcuOSAwIDAgNy44IDAgMHogbTQzOC40LTY1Mi40Yy0yLjctMi41LTYuNC00LTEwLjEtNC0yLjggMC01LjQgMC44LTcuOCAyLjRsLTM3MS4zIDI0M1YxMjMuMWMwLTcuOC0xNi43IDAtMjQuNiAwLTcuOSAwLTI0LjYtNy44LTI0LjYgMHYzNzYuMmwtMzcxLjMtMjQzYy0yLjUtMS42LTUuMS0yLjQtNy45LTIuNC02LjkgMC0xNC40IDUuNC0xNC40IDE0LjJ2NDk3LjRjMCA4LjcgNy41IDE0LjEgMTQuNSAxNC4xIDIuNyAwIDUuNC0wLjggNy44LTIuNGwzNzEuMy0yNDN2Mzc2LjJoNDkuMlY1MzRsMzcxLjMgMjQzYzIuNSAxLjYgNS4xIDIuNCA3LjkgMi40IDMuNyAwIDcuNC0xLjUgMTAuMS00IDItMS44IDQuMy01LjEgNC4zLTEwLjFWMjY4YzAtNS4xLTIuNC04LjMtNC40LTEwLjJ6IiBmaWxsPSIjMTQwQTBBIiBwLWlkPSI5NjUzIj48L3BhdGg+PC9zdmc+`,Legend:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTEwNzAzMTU0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTExMiAxMTJtMzIgMGw3MzYgMHEzMiAwIDMyIDMybDAgNzM2cTAgMzItMzIgMzJsLTczNiAwcS0zMiAwLTMyLTMybDAtNzM2cTAtMzIgMzItMzJaIiBmaWxsPSIjRkZGRkZGIiBwLWlkPSI0OTczIj48L3BhdGg+PHBhdGggZD0iTTEyOCA5Nmg3NjhhMzIgMzIgMCAwIDEgMzIgMzJ2NzY4YTMyIDMyIDAgMCAxLTMyIDMySDEyOGEzMiAzMiAwIDAgMS0zMi0zMlYxMjhhMzIgMzIgMCAwIDEgMzItMzJ6IG0wIDMydjc2OGg3NjhWMTI4SDEyOHoiIGZpbGw9IiM1RDZEN0UiIHAtaWQ9IjQ5NzQiPjwvcGF0aD48cGF0aCBkPSJNMjI0IDM4NGg2NHY2NEgyMjRWMzg0eiBtMCAxMjhoNjR2NjRIMjI0di02NHogbTAgMTI4aDY0djY0SDIyNHYtNjR6IG0wIDEyOGg2NHY2NEgyMjR2LTY0ek01NDQgMzg0aDY0djY0aC02NFYzODR6IG0wIDEyOGg2NHY2NGgtNjR2LTY0eiBtMCAxMjhoNjR2NjRoLTY0di02NHogbTAgMTI4aDY0djY0aC02NHYtNjR6IiBmaWxsPSIjODA4RkExIiBwLWlkPSI0OTc1Ij48L3BhdGg+PHBhdGggZD0iTTMyMCAzODRoMTYwdjY0SDMyMFYzODR6IG0wIDEyOGgxNjB2NjRIMzIwdi02NHogbTAgMTI4aDE2MHY2NEgzMjB2LTY0eiBtMCAxMjhoMTYwdjY0SDMyMHYtNjR6TTY0MCAzODRoMTYwdjY0aC0xNjBWMzg0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiIgZmlsbD0iI0FDQjRDMCIgcC1pZD0iNDk3NiI+PC9wYXRoPjxwYXRoIGQ9Ik0yMjQgMjI0aDU3NnY5NkgyMjR6IiBmaWxsPSIjMzBBRDk4IiBwLWlkPSI0OTc3Ij48L3BhdGg+PC9zdmc+`,LayerList:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTMyNjkyNzI3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijg5OTAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTg1Mi42IDQ2Mi45bDEyLjEgNy42YzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDc2NC4xYy0xNy4zIDEwLjgtMzkuMiAxMC44LTU2LjQgMEwxNTkuMyA1NjBjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDEyLjEtNy42TDQ4My45IDY1OWMxNy4zIDEwLjggMzkuMiAxMC44IDU2LjQgMGwzMTIuMi0xOTYgMC4xLTAuMXogbTAgMTU2LjFsMTIuMSA3LjZjMjQuOCAxNS42IDMyLjMgNDguMyAxNi43IDczLjItNC4yIDYuNy05LjkgMTIuNC0xNi43IDE2LjdMNTQwLjQgOTIwLjJjLTE3LjMgMTAuOC0zOS4yIDEwLjggNTYuNCAwTDE1OS4zIDcxNi4xYy0yNC44LTE1LjYtMzIuMy00OC4zLTE2LjctNzMuMiA0LjItNi43IDkuOS0xMi40IDE2LjctMTYuN2wxMi4xLTcuNkw0ODMuOSA4MTVjMTcuMyAxMC44IDM5LjIgMTAuOCA1Ni40IDBsMzEyLjItMTk2aDAuMXpNNTQwIDEwNi40bDMyNC42IDIwNC4xYzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDYwNGMtMTcuMyAxMC44LTM5LjIgMTAuOC01Ni40IDBMMTU5LjMgMzk5LjhjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDMyNC40LTIwMy43YzE3LjMtMTAuOCAzOS4yLTEwLjggNTYuNCAwbC0wLjEgMC4yeiIgcC1pZD0iODk5MSI+PC9wYXRoPjwvc3ZnPg==`,Print:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzc5NjgwOTI2ODcwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE2ODkiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTI5MS42MTk2NCAxMDI0aDQzOC43NThhNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NTItNzQuMjUxVjczMS4wNDRIMjE5LjM5MjY0Vjk0OS43NUE3Mi45MDEgNzIuOTAxIDAgMCAwIDI5MS42MjA2NCAxMDI0ek03MzAuMzc3NjQgMC4wMDVIMjkxLjYyMDY0YTcxLjU1MSA3MS41NTEgMCAwIDAtNzIuMjI3IDY3LjUwMXYyMjIuMDhoNTgzLjIxMlY3Mi4yM0E3Mi4yMjYgNzIuMjI2IDAgMCAwIDczNS4xMDI2NCAwLjAwNXogbTE0Ny4xNTMgMjg5LjU4djc0LjkyN0gxNDUuODE2NjR2LTc0LjkyN0g3Mi4yMzk2NEE3My41NzYgNzMuNTc2IDAgMCAwIDAuMDEzNjQgMzY0LjUxMnY1MTMuMDFBNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NjQ2NCA5NTEuMWg3NC4yNTJWNjU3LjQ2OEg4NzcuNTMwNjR2MjkyLjk1Nmg3NC4yNTJhNzMuNTc2IDczLjU3NiAwIDAgMCA3Mi4yMjYtNzIuOTAydi01MTMuMDFhNzQuOTI2IDc0LjkyNiAwIDAgMC03NC4yNTEtNzQuOTI3eiBtMCAyMjIuNzU1SDY1Ny40NzY2NHYtNzQuMjUySDg3Ny41MzA2NHoiIHAtaWQ9IjE2OTAiPjwvcGF0aD48L3N2Zz4=`},h=(0,t.memo)(e=>{let{position:r,children:i,name:a,icon:o,width:s,height:c,openHandle:l}=e,[u,d]=(0,t.useState)(!1),[f,p]=(0,t.useState)(!1),m={width:u?s??30:30,height:u?c??30:30,...r};return(0,n.jsxs)(`div`,{className:`maplibregl-control`,style:m,children:[(0,n.jsxs)(`div`,{className:`maplibregl-bar`,children:[(0,n.jsx)(`div`,{className:`maplibregl-bar-button`,onClick:()=>{l?(l(!f),p(!f)):d(!u)},title:a??``,style:{backgroundImage:`url(${o})`}}),a&&(0,n.jsx)(`div`,{className:`maplibregl-bar-title`,children:a})]}),u&&i]})});function g(e,t=new WeakMap){if(typeof e!=`object`||!e)return e;if(t.has(e))return t.get(e);let n;return e instanceof Date?n=new Date(e.getTime()):e instanceof RegExp?(n=new RegExp(e.source,e.flags),n.lastIndex=e.lastIndex):e instanceof Map?(n=new Map,t.set(e,n),e.forEach((e,r)=>{n.set(g(r,t),g(e,t))})):e instanceof Set?(n=new Set,t.set(e,n),e.forEach(e=>{n.add(g(e,t))})):Array.isArray(e)?(n=[],t.set(e,n),e.forEach((e,r)=>{n[r]=g(e,t)})):(n=Object.create(Object.getPrototypeOf(e)),t.set(e,n),Reflect.ownKeys(e).forEach(r=>{let i=e[r];n[r]=g(i,t)})),n}var _=(e,t)=>{let n=null;return r=>{n&&clearTimeout(n),n=setTimeout(()=>{e(r)},t)}},v=(e,t)=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{e.push(t),t.layers instanceof Array&&v(e,t.layers)})},y=(e,t)=>{t[0]instanceof Array?t.forEach(t=>{t[0]instanceof Array?y(e,t):e.extend(t)}):e.extend(t)},b=e=>{let t=new r.LngLatBounds;return y(t,e.geometry.coordinates),t},x=class{_options;get options(){return this._options}constructor(e){this._options=e}onAdd(e,t){if(this._options.isAdd===!1){this._options.isAdd=!1;return}t=e.findValidBeforeId(this._options.id),this.add(e,t),this._options.isAdd=!0}onRemove(e,t){if(this._options.isAdd)return;e.getLayer(this._options.id)&&e.removeLayer(this._options.id);let n=this._options.id+`-ds`;t&&e.removeSource(n),this._options.isAdd=!1}},S=class extends x{constructor(e){super(e),this._options=e}add(e,t){let{id:n,source:r}=this._options,i=this._options.id+`-ds`;typeof r==`string`&&(i=r),!e.getSource(i)&&r&&typeof r!=`string`&&e.addSource(i,r);let a=e.getLayer(n),o=e.getSource(i);if(!a&&o){let n={...this._options,source:i};e.addLayer(n,t)}}},C=class e{_options;get options(){return this._options}_layers=[];get layers(){return this._layers}constructor(t){this._options=t,t.layers.forEach(t=>{let n;n=`layers`in t?new e(t):new S(t),this._layers.push(n)})}onAdd(e,t){this._layers.forEach(n=>{e.addLayerWrapper(n,t)}),this.updateOptions()}onRemove(e){this._layers.forEach(t=>{e.removeLayerWrapper(t,!1)}),this.updateOptions()}updateOptions(){let e=this._layers.findIndex(e=>e.options.isAdd)>-1;this._options.isAdd=e}},w={MAPINITED:`MAPINITED`,MAPCLICKED:`MAPCLICKED`,MAPLAYERCHANGED:`MAPLAYERCHANGED`,MAPDESTRORY:`MAPDESTRORY`},T=class extends r.Map{_id;get id(){return this._id}_options;get options(){return this._options}_mapLayerSetting;get mapLayerSetting(){return this._mapLayerSetting}_images=[];get images(){return this._images}_layers=[];get layers(){return this._layers}constructor(e){super(e),this._options=e,this._id=e.id,this._mapLayerSetting=[],this.fire(w.MAPINITED,{map:this})}getLayerWrapper(e,t){for(let n of e)if(n.options.id===t)return n;else if(`layers`in n){let e=this.getLayerWrapper(n.layers,t);if(e)return e}}addLayerWrapper(e,t){e.onAdd(this,t),this.fire(w.MAPLAYERCHANGED,{map:this,layer:e})}removeLayerWrapper(e,t){e.onRemove(this,t),this.fire(w.MAPLAYERCHANGED,{map:this,layer:e})}load(e){this._mapLayerSetting=e,e.forEach(e=>{let t;t=`layers`in e?new C(e):new S(e),this.addLayerWrapper(t),this._layers.push(t)})}selectFeature(e){this.clearSelect();let t=`location-ds`;this.addSource(t,{type:`geojson`,data:e}),this.addLayer({id:`location-lyr`,type:`line`,paint:{"line-color":`#00ffff`,"line-width":2},source:t})}clearSelect(){let e=`location-lyr`;this.getLayer(e)&&(this.removeLayer(e),this.removeSource(`location-ds`))}findValidBeforeId(e){let t=this.getLayerList(),n=t.findIndex(t=>t.options.id===e);if(n>-1)for(let e=n;e<t.length;e++){let n=this.getLayer(t[e].options.id);if(n)return n.id}}getLayerList(){let e=[];return v(e,this.layers),e}destory(){this.fire(w.MAPDESTRORY,{map:this}),this.remove()}},E=(0,t.createContext)({map:null}),D=()=>{let e=(0,t.useContext)(E);if(!e)throw Error(`只能在函数组件中使用`);return e};function O(e){let{mapOptions:r,mapLayerSettting:i,children:a,onMapLoad:o,className:s}=e,c=(0,t.useRef)(null),[l,u]=(0,t.useState)(!1),{current:d}=(0,t.useRef)({map:null});return(0,t.useEffect)(()=>{let e=new T({pitch:0,bearing:0,doubleClickZoom:!1,attributionControl:!1,renderWorldCopies:!1,trackResize:!0,...r,container:c.current,style:{version:8,glyphs:`/font/{fontstack}/{range}.pbf`,sources:{},layers:[]}}),t=()=>{e.load(g(i)),u(!0),o?.(e),d&&(d.map=e)};e.on(`load`,t),e.on(`click`,()=>{console.log(`center:`,e.getCenter(),`zoom:`,e.getZoom())});let n=_(()=>{e.resize()},10);return new ResizeObserver(n).observe(c?.current),()=>{e.off(`load`,t)}},[]),(0,n.jsx)(`div`,{ref:c,className:s??`map-wrapper`,id:`map-wrapper`,children:l&&d&&(0,n.jsx)(E.Provider,{value:d,children:a})})}var k=(0,t.memo)(O),A=(e,t)=>{for(let n of e){if(n.key===t)return n;if(n.children){let e=A(n.children,t);if(e)return e}}return null},j=e=>{let t=[];return e.children&&e.children.length>0&&e.children.forEach(e=>{t.push(e.key),t.push(...j(e))}),t},M=e=>!e.children||e.children.length===0,N=(e,t)=>t.includes(e.key),P=(e,t)=>{if(M(e))return!1;let n=j(e);if(n.length===0)return!1;let r=n.filter(e=>t.includes(e));return r.length>0&&r.length<n.length},F=(0,t.memo)(e=>{let{node:r,level:i,checkedKeys:a,checkable:o,onCheck:s}=e,[c,l]=(0,t.useState)(!0),u=!M(r),d=N(r,a),f=P(r,a);return(0,n.jsxs)(`div`,{className:`qm-tree-node`,children:[(0,n.jsxs)(`div`,{className:`qm-tree-node-content`,style:{paddingLeft:i*18},children:[(0,n.jsx)(`span`,{className:`qm-tree-switcher ${u?``:`qm-tree-switcher-noop`} ${c?`qm-tree-switcher-expanded`:``}`,onClick:()=>{u&&l(!c)},children:u&&(0,n.jsx)(`svg`,{viewBox:`0 0 1024 1024`,width:`12`,height:`12`,fill:`currentColor`,children:(0,n.jsx)(`path`,{d:`M715.8 493.5L435.6 213.3c-12.4-12.4-32.8-12.4-45.2 0s-12.4 32.8 0 45.2l245.8 245.8-245.8 245.8c-12.4 12.4-12.4 32.8 0 45.2 6.2 6.2 14.3 9.3 22.6 9.3s16.4-3.1 22.6-9.3l280.2-280.2c12.4-12.4 12.4-32.8 0-45.2z`})})}),o&&(0,n.jsx)(`span`,{className:`qm-tree-checkbox ${d?`qm-tree-checkbox-checked`:``} ${f?`qm-tree-checkbox-indeterminate`:``}`,onClick:()=>{s(r.key)},children:(0,n.jsxs)(`span`,{className:`qm-tree-checkbox-inner`,children:[d&&(0,n.jsx)(`svg`,{viewBox:`0 0 1024 1024`,width:`10`,height:`10`,fill:`white`,children:(0,n.jsx)(`path`,{d:`M912 224l-448 448-192-192-64 64 256 256 512-512z`})}),f&&(0,n.jsx)(`span`,{className:`qm-tree-checkbox-indeterminate-icon`})]})}),(0,n.jsx)(`span`,{className:`qm-tree-node-title`,title:typeof r.title==`string`?r.title:``,children:r.title})]}),u&&c&&(0,n.jsx)(`div`,{className:`qm-tree-children`,children:r.children.map(e=>(0,n.jsx)(F,{node:e,level:i+1,checkedKeys:a,checkable:o,onCheck:s},e.key))})]})}),I=(0,t.memo)(e=>{let{treeData:r,checkable:i=!1,checkedKeys:a,onCheck:o,style:s}=e,[c,l]=(0,t.useState)([]),u=a!==void 0,d=u?a:c,f=(e,t)=>{let n=A(r,t);if(!n)return e;let i=e.includes(t),a;if(i){let r=j(n),i=new Set([t,...r]);a=e.filter(e=>!i.has(e))}else{let r=j(n);a=Array.from(new Set([...e,t,...r]))}return a},p=(0,t.useCallback)(e=>{if(u){let t=f(d,e);o?.(t)}else l(t=>{let n=f(t,e);return o?.(n),n})},[d,r,u,o]);return(0,n.jsx)(`div`,{className:`qm-tree`,style:s,children:r.map(e=>(0,n.jsx)(F,{node:e,level:0,checkedKeys:d,checkable:i,onCheck:p},e.key))})}),L=(0,t.memo)(e=>{let[r,i]=(0,t.useState)([]),{map:a}=D(),[o,s]=(0,t.useState)([]),c=(0,t.useCallback)((e,t)=>{let n,r=[];return e.forEach(e=>{n=void 0,n=`layers`in e&&e.options.type===`logicGroup`?{title:e.options.name,key:e.options.id,selectable:!1,children:c(e.layers,t)}:{title:e.options.name,key:e.options.id,selectable:!1},n&&r.push(n),e.options.isAdd&&e.options.type!==`logicGroup`&&t.push(e.options.id)}),r},[]),l=e=>{i(e);let t=new Set([...r,...e]),n=new Set([...t].filter(e=>!r.includes(e))),o=new Set([...t].filter(t=>!e.includes(t)));n.forEach(e=>{let t=a?.getLayerWrapper(a.layers,e);t&&`layers`in t?(t.layers.forEach(e=>{e.options.isAdd=!0}),a?.addLayerWrapper(t)):t&&(t.options.isAdd=!0,a?.addLayerWrapper(t))}),o.forEach(e=>{let t=a?.getLayerWrapper(a.layers,e);t&&`layers`in t?(t.layers.forEach(e=>{e.options.isAdd=!1}),a?.removeLayerWrapper(t)):t&&(t.options.isAdd=!1,a?.removeLayerWrapper(t))}),a.layers.forEach(e=>{u(e)})},u=e=>{`layers`in e&&e.layers.findIndex(e=>e.options.type===`logicGroup`)>-1?e.layers.forEach(e=>{u(e)}):`layers`in e&&e.options.type===`logicGroup`&&(e.layers.findIndex(e=>e.options.isAdd)===-1?e.options.isAdd=!1:e.options.isAdd=!0)};return(0,t.useEffect)(()=>{let e=()=>{let e=[];s(a?c(a.layers,e):[]),i(e)},t=_(()=>{e()},300);return a?.on(w.MAPLAYERCHANGED,t),e(),()=>{a?.off(w.MAPLAYERCHANGED,t)}},[]),(0,n.jsx)(h,{name:`图层控制`,position:e.position,icon:m.LayerList,width:200,height:r.length*28<280?280:r.length*28,children:(0,n.jsx)(I,{checkable:!0,checkedKeys:r,onCheck:e=>l(e),treeData:o,style:{fontSize:12,maxHeight:400,overflowX:`hidden`,overflowY:`auto`}})})}),R=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(),[o,s]=(0,t.useState)(0),c=(0,t.useCallback)((e,t,i)=>{let a;e.forEach(e=>{if(a=void 0,`layers`in e&&!e.options.legend)c(e.layers,t,i);else if(e.options.legend&&(e.options.isAdd||`layers`in e&&e.layers.filter(e=>e.options.isAdd).length)){let{title:i,items:o}=e.options.legend;if(o)a=(0,n.jsxs)(`div`,{className:`maplibregl-legend-group`,children:[(0,n.jsx)(`div`,{className:`maplibregl-legend-tilte`,children:i||e.options.name}),o?.map(e=>{t.push(26);let i=r?.images.find(t=>t.id===e.imageId);return(0,n.jsxs)(`div`,{className:`maplibregl-legend-item`,children:[i?(0,n.jsx)(`img`,{src:i.data,alt:``,className:`maplibregl-legend-item-img`}):(0,n.jsx)(`div`,{className:`maplibregl-legend-item-geo`,style:e.style}),(0,n.jsx)(`div`,{className:`maplibregl-legend-item-text`,children:e.text})]},e.text)})]},e.options.id),t.push(50);else{let{style:o,imageId:s,text:c}=e.options.legend,l=r?.images.find(e=>e.id===s);t.push(26),a=(0,n.jsxs)(`div`,{className:`maplibregl-legend-item`,children:[l?(0,n.jsx)(`img`,{src:l.data,alt:``,className:`maplibregl-legend-item-img`}):(0,n.jsx)(`div`,{className:`maplibregl-legend-item-geo`,style:o}),(0,n.jsx)(`div`,{className:`maplibregl-legend-item-text`,children:c||e.options.name})]},c||i||e.options.id)}}else a=void 0;a&&i.push(a)})},[]);return(0,t.useEffect)(()=>{let e=()=>{let e=[],t=[];c(r.layers,e,t),a(t),s(e.reduce((e,t)=>e+t,0)+40)},t=_(()=>{e()},200);return r?.on(w.MAPLAYERCHANGED,t),e(),()=>{r?.off(w.MAPLAYERCHANGED,t)}},[]),(0,n.jsx)(h,{name:`图例`,position:e.position,icon:m.Legend,width:180,height:o,children:(0,n.jsx)(`div`,{className:`maplibregl-legend`,children:i})})}),z={JPEG:`jpg`,PNG:`png`,PDF:`pdf`,SVG:`svg`},B={mm:`mm`},V={A2:[594,420],A3:[420,297],A4:[297,210],A5:[210,148],A6:[148,105],B2:[707,500],B3:[500,353],B4:[353,250],B5:[250,176],B6:[176,125],Letter:[279,216]},H={横向:`landscape`,纵向:`portrait`},U={72:72,96:96,200:200,300:300,400:400},W=class{map;svgCanvas;constructor(e){this.map=e,this.svgCanvas=null}create(){if(!this.map)return;let e=this.map.getCanvasContainer(),t=this.map.getCanvas().clientWidth,n=this.map.getCanvas().clientHeight,r=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);r.setAttribute(`class`,`qm-print-crosshair`),r.style.cssText=`position:absolute;top:0;left:0;width:${t}px;height:${n}px;pointer-events:none;`;let i=t/2,a=n/2,o=document.createElementNS(`http://www.w3.org/2000/svg`,`line`);o.setAttribute(`x1`,`${i}`),o.setAttribute(`y1`,`0`),o.setAttribute(`x2`,`${i}`),o.setAttribute(`y2`,`${n}`),o.setAttribute(`stroke`,`#dddddd`),o.setAttribute(`stroke-width`,`2`),o.setAttribute(`stroke-dasharray`,`5,5`);let s=document.createElementNS(`http://www.w3.org/2000/svg`,`line`);s.setAttribute(`x1`,`0`),s.setAttribute(`y1`,`${a}`),s.setAttribute(`x2`,`${t}`),s.setAttribute(`y2`,`${a}`),s.setAttribute(`stroke`,`#dddddd`),s.setAttribute(`stroke-width`,`2`),s.setAttribute(`stroke-dasharray`,`5,5`),r.appendChild(o),r.appendChild(s),e.appendChild(r),this.svgCanvas=r}destroy(){this.svgCanvas?.remove(),this.svgCanvas=null,this.map=null}},G=class{map;svgCanvas;path;constructor(e){this.map=e,this.svgCanvas=null,this.path=null}updateArea(e,t,n=B.mm){if(!this.map||!this.svgCanvas)return;let r=this.map.getCanvas().clientWidth,i=this.map.getCanvas().clientHeight,a=this.toPixels(e,n),o=this.toPixels(t,n),s=r/a,c=i/o,l=Math.min(s,c,1),u=a*l,d=o*l,f=(r-u)/2,p=(i-d)/2,m=f+u,h=p+d,g=`M 0 0 L ${r} 0 L ${r} ${i} L 0 ${i} Z M ${f} ${p} L ${m} ${p} L ${m} ${h} L ${f} ${h} Z`;this.path?.setAttribute(`d`,g)}create(){if(!this.map)return;let e=this.map.getCanvasContainer(),t=this.map.getCanvas().clientWidth,n=this.map.getCanvas().clientHeight,r=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);r.style.cssText=`position:absolute;top:0;left:0;width:${t}px;height:${n}px;pointer-events:none;`;let i=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);i.setAttribute(`fill`,`#888888`),i.setAttribute(`fill-opacity`,`0.5`),i.setAttribute(`stroke-width`,`0`),i.setAttribute(`fill-rule`,`evenodd`),r.appendChild(i),e.appendChild(r),this.svgCanvas=r,this.path=i}destroy(){this.svgCanvas?.remove(),this.svgCanvas=null,this.path=null,this.map=null}toPixels(e,t){return t===B.mm?96/25.4*e:96*e}},K=class{toPNG(e,t){e.toBlob(e=>{if(e){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}})}toJPEG(e,t,n=.85){let r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);i&&(i.fillStyle=`#FFFFFF`,i.fillRect(0,0,r.width,r.height),i.drawImage(e,0,0));let a=r.toDataURL(`image/jpeg`,Math.max(0,Math.min(1,n))),o=document.createElement(`a`);o.href=a,o.download=t,o.click()}},q=`<svg width="800px" height="800px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--gis" preserveAspectRatio="xMidYMid meet"><path d="M47.655 1.634l-35 95c-.828 2.24 1.659 4.255 3.68 2.98l33.667-21.228l33.666 21.228c2.02 1.271 4.503-.74 3.678-2.98l-35-95C51.907.514 51.163.006 50 .008c-1.163.001-1.99.65-2.345 1.626zm-.155 14.88v57.54L19.89 91.461z" fill="none" stroke="white" stroke-width="1.5"/><path d="M47.655 1.634l-35 95c-.828 2.24 1.659 4.255 3.68 2.98l33.667-21.228l33.666 21.228c2.02 1.271 4.503-.74 3.678-2.98l-35-95C51.907.514 51.163.006 50 .008c-1.163.001-1.99.65-2.345 1.626zm-.155 14.88v57.54L19.89 91.461z" fill="#000000" fill-rule="evenodd"></path></svg>`,J={image:q,imageName:`gl-export-north-icon`,imageSizeFraction:.05,visibility:`visible`,position:`top-right`},Y=class{options;constructor(e){this.options={...J,...e,image:e?.image??q}}async addToMap(e,t,n){let r=this.options.visibility??`visible`;e.getZoom()<2&&t>n&&(r=`none`),await this.addNorthIconImage(e);let i=this.getIconWidth(e,this.options.imageSizeFraction??.08)*.8,a=this.getElementPosition(e,this.options.position??`top-right`,i),o=e.unproject(a),s=this.options.imageName??`gl-export-north-icon`;e.addSource(s,{type:`geojson`,data:{type:`Feature`,geometry:{type:`Point`,coordinates:[o.lng,o.lat]},properties:{}}}),e.addLayer({id:s,source:s,type:`symbol`,layout:{"icon-image":s,"icon-size":1,"icon-rotate":e.getBearing()*-1,"icon-allow-overlap":!0,"icon-ignore-placement":!0,visibility:r},paint:{}})}async addNorthIconImage(e){let t=this.getIconWidth(e,this.options.imageSizeFraction??.08);return new Promise(n=>{let r=new Image(t,t);r.onload=()=>{this.options.imageName&&e.addImage(this.options.imageName,r),n()};function i(e){return`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(e)}this.options.image&&(r.src=i(this.options.image))})}getIconWidth(e,t){let n=e.getContainer(),r=parseInt(n.style.width.replace(`px`,``));return parseInt(`${r*t}`)}getElementPosition(e,t,n=0){let r=e.getContainer(),i=0,a=0;switch(t){case`top-left`:i=0+n,a=0+n;break;case`top-right`:i=parseInt(r.style.width.replace(`px`,``))-n,a=0+n;break;case`bottom-left`:i=0+n,a=parseInt(r.style.height.replace(`px`,``))-n;break;case`bottom-right`:i=parseInt(r.style.width.replace(`px`,``))-n,a=parseInt(r.style.height.replace(`px`,``))-n;break;default:break}return[i,a]}updateOptions(e){this.options={...this.options,...e,image:e.image??this.options.image}}},X={"circle-radius":8,"circle-color":`red`,"circle-stroke-width":1,"circle-stroke-color":`black`},ee=`maplibregl-marker`,te=class{sourceMap;renderMap;markerClassName;markerCirclePaint;constructor(e,t,n){this.sourceMap=e,this.renderMap=t,this.markerClassName=n?.markerClassName??ee,this.markerCirclePaint={...X,...n?.markerCirclePaint}}getMarkers(){return this.sourceMap.getCanvasContainer().getElementsByClassName(this.markerClassName)}renderMarkers(){let e=this.getMarkers(),t=e.length;if(t===0)return!1;for(let n=0;n<t;n++){let t=e.item(n);if(!t)continue;let r=t.getAttribute(`style`);if(!r)continue;let i=r.match(/translate\(([^,]+)px,\s*([^,]+)px\)/);if(!i)continue;let a=parseInt(i[1]),o=parseInt(i[2]),s=this.sourceMap.unproject([a,o]),c=`print-marker-${n}`;this.renderMap.addSource(c,{type:`geojson`,data:{type:`Point`,coordinates:[s.lng,s.lat]}}),this.renderMap.addLayer({id:c,source:c,type:`circle`,paint:this.markerCirclePaint})}return!0}},ne=class{width;height;unit;constructor(e,t,n){this.width=e,this.height=t,this.unit=n}generate(e,t){let n=this.buildPDF(e),r=new Blob([n],{type:`application/pdf`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t,a.click(),URL.revokeObjectURL(i)}buildPDF(e){let t=this.unit===B.mm?this.width*2.83465:this.width*72,n=this.unit===B.mm?this.height*2.83465:this.height*72,r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);i&&(i.fillStyle=`#FFFFFF`,i.fillRect(0,0,r.width,r.height),i.drawImage(e,0,0));let a=r.toDataURL(`image/jpeg`,.92).split(`,`)[1],o=atob(a),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return this.createPDFStructure(t,n,e.width,e.height,s)}createPDFStructure(e,t,n,r,i){let a=Math.round(e),o=Math.round(t),s=i.length,c=0,l=c;c+=49;let u=c;c+=57;let d=`3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${a} ${o}] /Contents 4 0 R /Resources << /XObject << /Im0 5 0 R >> >> >>\nendobj\n`,f=c;c+=d.length;let p=`q\n${a} 0 0 ${o} 0 0 cm\n/Im0 Do\nQ\n`,m=`4 0 obj\n<< /Length ${p.length} >>\nstream\n${p}endstream\nendobj\n`,h=c;c+=m.length;let g=`5 0 obj\n<< /Type /XObject /Subtype /Image /Width ${n} /Height ${r} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${s} >>\nstream\n`,_=c;c+=g.length+s+18;let v=c,y=`xref\n0 6\n0000000000 65535 f \n${String(l).padStart(10,`0`)} 00000 n \n${String(u).padStart(10,`0`)} 00000 n \n${String(f).padStart(10,`0`)} 00000 n \n${String(h).padStart(10,`0`)} 00000 n \n${String(_).padStart(10,`0`)} 00000 n \n`,b=`trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n${v}\n%%EOF`,x=new TextEncoder,S=[x.encode(`%PDF-1.4
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime"),require("maplibre-gl"),require("react-dom"),require("@mapbox/mapbox-gl-draw")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`,`maplibre-gl`,`react-dom`,`@mapbox/mapbox-gl-draw`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.QmMap={},e.react,e.react_jsx_runtime,e.maplibre_gl,e[`react-dom`],e._mapbox_mapbox_gl_draw))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=Object.create,s=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,u=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty,f=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=l(t),a=0,o=i.length,u;a<o;a++)u=i[a],!d.call(e,u)&&u!==n&&s(e,u,{get:(e=>t[e]).bind(null,u),enumerable:!(r=c(t,u))||r.enumerable});return e},p=(e,t,n)=>(n=e==null?{}:o(u(e)),f(t||!e||!e.__esModule?s(n,`default`,{value:e,enumerable:!0}):n,e));t=p(t,1),a=p(a,1);var m={Swipe:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTk3MzE2MzYyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijk2NTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTUzNy4xIDkxMC4yYzAgNy44IDcuOSAwIDAgMHogbS00OS4yIDBjLTcuOSAwIDAgNy44IDAgMHogbTQzOC40LTY1Mi40Yy0yLjctMi41LTYuNC00LTEwLjEtNC0yLjggMC01LjQgMC44LTcuOCAyLjRsLTM3MS4zIDI0M1YxMjMuMWMwLTcuOC0xNi43IDAtMjQuNiAwLTcuOSAwLTI0LjYtNy44LTI0LjYgMHYzNzYuMmwtMzcxLjMtMjQzYy0yLjUtMS42LTUuMS0yLjQtNy45LTIuNC02LjkgMC0xNC40IDUuNC0xNC40IDE0LjJ2NDk3LjRjMCA4LjcgNy41IDE0LjEgMTQuNSAxNC4xIDIuNyAwIDUuNC0wLjggNy44LTIuNGwzNzEuMy0yNDN2Mzc2LjJoNDkuMlY1MzRsMzcxLjMgMjQzYzIuNSAxLjYgNS4xIDIuNCA3LjkgMi40IDMuNyAwIDcuNC0xLjUgMTAuMS00IDItMS44IDQuMy01LjEgNC4zLTEwLjFWMjY4YzAtNS4xLTIuNC04LjMtNC40LTEwLjJ6IiBmaWxsPSIjMTQwQTBBIiBwLWlkPSI5NjUzIj48L3BhdGg+PC9zdmc+`,Legend:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTEwNzAzMTU0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTExMiAxMTJtMzIgMGw3MzYgMHEzMiAwIDMyIDMybDAgNzM2cTAgMzItMzIgMzJsLTczNiAwcS0zMiAwLTMyLTMybDAtNzM2cTAtMzIgMzItMzJaIiBmaWxsPSIjRkZGRkZGIiBwLWlkPSI0OTczIj48L3BhdGg+PHBhdGggZD0iTTEyOCA5Nmg3NjhhMzIgMzIgMCAwIDEgMzIgMzJ2NzY4YTMyIDMyIDAgMCAxLTMyIDMySDEyOGEzMiAzMiAwIDAgMS0zMi0zMlYxMjhhMzIgMzIgMCAwIDEgMzItMzJ6IG0wIDMydjc2OGg3NjhWMTI4SDEyOHoiIGZpbGw9IiM1RDZEN0UiIHAtaWQ9IjQ5NzQiPjwvcGF0aD48cGF0aCBkPSJNMjI0IDM4NGg2NHY2NEgyMjRWMzg0eiBtMCAxMjhoNjR2NjRIMjI0di02NHogbTAgMTI4aDY0djY0SDIyNHYtNjR6IG0wIDEyOGg2NHY2NEgyMjR2LTY0ek01NDQgMzg0aDY0djY0aC02NFYzODR6IG0wIDEyOGg2NHY2NGgtNjR2LTY0eiBtMCAxMjhoNjR2NjRoLTY0di02NHogbTAgMTI4aDY0djY0aC02NHYtNjR6IiBmaWxsPSIjODA4RkExIiBwLWlkPSI0OTc1Ij48L3BhdGg+PHBhdGggZD0iTTMyMCAzODRoMTYwdjY0SDMyMFYzODR6IG0wIDEyOGgxNjB2NjRIMzIwdi02NHogbTAgMTI4aDE2MHY2NEgzMjB2LTY0eiBtMCAxMjhoMTYwdjY0SDMyMHYtNjR6TTY0MCAzODRoMTYwdjY0aC0xNjBWMzg0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiBtMCAxMjhoMTYwdjY0aC0xNjB2LTY0eiIgZmlsbD0iI0FDQjRDMCIgcC1pZD0iNDk3NiI+PC9wYXRoPjxwYXRoIGQ9Ik0yMjQgMjI0aDU3NnY5NkgyMjR6IiBmaWxsPSIjMzBBRDk4IiBwLWlkPSI0OTc3Ij48L3BhdGg+PC9zdmc+`,LayerList:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMTMyNjkyNzI3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijg5OTAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTg1Mi42IDQ2Mi45bDEyLjEgNy42YzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDc2NC4xYy0xNy4zIDEwLjgtMzkuMiAxMC44LTU2LjQgMEwxNTkuMyA1NjBjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDEyLjEtNy42TDQ4My45IDY1OWMxNy4zIDEwLjggMzkuMiAxMC44IDU2LjQgMGwzMTIuMi0xOTYgMC4xLTAuMXogbTAgMTU2LjFsMTIuMSA3LjZjMjQuOCAxNS42IDMyLjMgNDguMyAxNi43IDczLjItNC4yIDYuNy05LjkgMTIuNC0xNi43IDE2LjdMNTQwLjQgOTIwLjJjLTE3LjMgMTAuOC0zOS4yIDEwLjggNTYuNCAwTDE1OS4zIDcxNi4xYy0yNC44LTE1LjYtMzIuMy00OC4zLTE2LjctNzMuMiA0LjItNi43IDkuOS0xMi40IDE2LjctMTYuN2wxMi4xLTcuNkw0ODMuOSA4MTVjMTcuMyAxMC44IDM5LjIgMTAuOCA1Ni40IDBsMzEyLjItMTk2aDAuMXpNNTQwIDEwNi40bDMyNC42IDIwNC4xYzI0LjggMTUuNiAzMi4zIDQ4LjMgMTYuNyA3My4yLTQuMiA2LjctOS45IDEyLjQtMTYuNyAxNi43TDU0MC40IDYwNGMtMTcuMyAxMC44LTM5LjIgMTAuOC01Ni40IDBMMTU5LjMgMzk5LjhjLTI0LjgtMTUuNi0zMi4zLTQ4LjMtMTYuNy03My4yIDQuMi02LjcgOS45LTEyLjQgMTYuNy0xNi43bDMyNC40LTIwMy43YzE3LjMtMTAuOCAzOS4yLTEwLjggNTYuNCAwbC0wLjEgMC4yeiIgcC1pZD0iODk5MSI+PC9wYXRoPjwvc3ZnPg==`,Print:`data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzc5NjgwOTI2ODcwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE2ODkiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTI5MS42MTk2NCAxMDI0aDQzOC43NThhNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NTItNzQuMjUxVjczMS4wNDRIMjE5LjM5MjY0Vjk0OS43NUE3Mi45MDEgNzIuOTAxIDAgMCAwIDI5MS42MjA2NCAxMDI0ek03MzAuMzc3NjQgMC4wMDVIMjkxLjYyMDY0YTcxLjU1MSA3MS41NTEgMCAwIDAtNzIuMjI3IDY3LjUwMXYyMjIuMDhoNTgzLjIxMlY3Mi4yM0E3Mi4yMjYgNzIuMjI2IDAgMCAwIDczNS4xMDI2NCAwLjAwNXogbTE0Ny4xNTMgMjg5LjU4djc0LjkyN0gxNDUuODE2NjR2LTc0LjkyN0g3Mi4yMzk2NEE3My41NzYgNzMuNTc2IDAgMCAwIDAuMDEzNjQgMzY0LjUxMnY1MTMuMDFBNzIuOTAxIDcyLjkwMSAwIDAgMCA3MS41NjQ2NCA5NTEuMWg3NC4yNTJWNjU3LjQ2OEg4NzcuNTMwNjR2MjkyLjk1Nmg3NC4yNTJhNzMuNTc2IDczLjU3NiAwIDAgMCA3Mi4yMjYtNzIuOTAydi01MTMuMDFhNzQuOTI2IDc0LjkyNiAwIDAgMC03NC4yNTEtNzQuOTI3eiBtMCAyMjIuNzU1SDY1Ny40NzY2NHYtNzQuMjUySDg3Ny41MzA2NHoiIHAtaWQ9IjE2OTAiPjwvcGF0aD48L3N2Zz4=`},h=(0,t.memo)(e=>{let{position:r,children:i,name:a,icon:o,width:s,height:c,openHandle:l,title:u}=e,[d,f]=(0,t.useState)(!1),[p,m]=(0,t.useState)(!1),h={width:d?s??30:30,height:d?c??30:30,...r};return(0,n.jsxs)(`div`,{className:`maplibregl-control`,style:h,children:[(0,n.jsxs)(`div`,{className:`maplibregl-bar`,children:[(0,n.jsx)(`div`,{className:`maplibregl-bar-button`,onClick:()=>{l?(l(!p),m(!p)):f(!d)},title:u||a||``,style:{backgroundImage:`url(${o})`}}),a&&(0,n.jsx)(`div`,{className:`maplibregl-bar-title`,children:a})]}),d&&i]})});function g(e,t=new WeakMap){if(typeof e!=`object`||!e)return e;if(t.has(e))return t.get(e);let n;return e instanceof Date?n=new Date(e.getTime()):e instanceof RegExp?(n=new RegExp(e.source,e.flags),n.lastIndex=e.lastIndex):e instanceof Map?(n=new Map,t.set(e,n),e.forEach((e,r)=>{n.set(g(r,t),g(e,t))})):e instanceof Set?(n=new Set,t.set(e,n),e.forEach(e=>{n.add(g(e,t))})):Array.isArray(e)?(n=[],t.set(e,n),e.forEach((e,r)=>{n[r]=g(e,t)})):(n=Object.create(Object.getPrototypeOf(e)),t.set(e,n),Reflect.ownKeys(e).forEach(r=>{let i=e[r];n[r]=g(i,t)})),n}var _=(e,t)=>{let n=null;return r=>{n&&clearTimeout(n),n=setTimeout(()=>{e(r)},t)}},v=(e,t)=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{e.push(t),t.layers instanceof Array&&v(e,t.layers)})},y=(e,t)=>{t[0]instanceof Array?t.forEach(t=>{t[0]instanceof Array?y(e,t):e.extend(t)}):e.extend(t)},b=e=>{let t=new r.LngLatBounds;return y(t,e.geometry.coordinates),t},x=class{_options;get options(){return this._options}constructor(e){this._options=e}onAdd(e,t){if(this._options.isAdd===!1){this._options.isAdd=!1;return}t=e.findValidBeforeId(this._options.id),this.add(e,t),this._options.isAdd=!0}onRemove(e,t){if(this._options.isAdd)return;e.getLayer(this._options.id)&&e.removeLayer(this._options.id);let n=this._options.id+`-ds`;t&&e.removeSource(n),this._options.isAdd=!1}},S=class extends x{constructor(e){super(e),this._options=e}add(e,t){let{id:n,source:r}=this._options,i=this._options.id+`-ds`;typeof r==`string`&&(i=r),!e.getSource(i)&&r&&typeof r!=`string`&&e.addSource(i,r);let a=e.getLayer(n),o=e.getSource(i);if(!a&&o){let n={...this._options,source:i};e.addLayer(n,t)}}},C=class e{_options;get options(){return this._options}_layers=[];get layers(){return this._layers}constructor(t){this._options=t,t.layers.forEach(t=>{let n;n=`layers`in t?new e(t):new S(t),this._layers.push(n)})}onAdd(e,t){this._layers.forEach(n=>{e.addLayerWrapper(n,t)}),this.updateOptions()}onRemove(e){this._layers.forEach(t=>{e.removeLayerWrapper(t,!1)}),this.updateOptions()}updateOptions(){let e=this._layers.findIndex(e=>e.options.isAdd)>-1;this._options.isAdd=e}},w={MAPINITED:`MAPINITED`,MAPCLICKED:`MAPCLICKED`,MAPLAYERCHANGED:`MAPLAYERCHANGED`,MAPDESTRORY:`MAPDESTRORY`},T=class extends r.Map{_id;get id(){return this._id}_options;get options(){return this._options}_mapLayerSetting;get mapLayerSetting(){return this._mapLayerSetting}_images=[];get images(){return this._images}_layers=[];get layers(){return this._layers}constructor(e){super(e),this._options=e,this._id=e.id,this._mapLayerSetting=[],this.fire(w.MAPINITED,{map:this})}getLayerWrapper(e,t){for(let n of e)if(n.options.id===t)return n;else if(`layers`in n){let e=this.getLayerWrapper(n.layers,t);if(e)return e}}addLayerWrapper(e,t){e.onAdd(this,t),this.fire(w.MAPLAYERCHANGED,{map:this,layer:e})}removeLayerWrapper(e,t){e.onRemove(this,t),this.fire(w.MAPLAYERCHANGED,{map:this,layer:e})}load(e){this._mapLayerSetting=e,e.forEach(e=>{let t;t=`layers`in e?new C(e):new S(e),this.addLayerWrapper(t),this._layers.push(t)})}selectFeature(e){this.clearSelect();let t=`location-ds`;this.addSource(t,{type:`geojson`,data:e}),this.addLayer({id:`location-lyr`,type:`line`,paint:{"line-color":`#00ffff`,"line-width":2},source:t})}clearSelect(){let e=`location-lyr`;this.getLayer(e)&&(this.removeLayer(e),this.removeSource(`location-ds`))}findValidBeforeId(e){let t=this.getLayerList(),n=t.findIndex(t=>t.options.id===e);if(n>-1)for(let e=n;e<t.length;e++){let n=this.getLayer(t[e].options.id);if(n)return n.id}}getLayerList(){let e=[];return v(e,this.layers),e}destory(){this.fire(w.MAPDESTRORY,{map:this}),this.remove()}},E=(0,t.createContext)({map:null}),D=()=>{let e=(0,t.useContext)(E);if(!e)throw Error(`只能在函数组件中使用`);return e};function O(e){let{mapOptions:r,mapLayerSettting:i,children:a,onMapLoad:o,className:s}=e,c=(0,t.useRef)(null),[l,u]=(0,t.useState)(!1),{current:d}=(0,t.useRef)({map:null});return(0,t.useEffect)(()=>{let e=new T({pitch:0,bearing:0,doubleClickZoom:!1,attributionControl:!1,renderWorldCopies:!1,trackResize:!0,...r,container:c.current,style:{version:8,glyphs:`/font/{fontstack}/{range}.pbf`,sources:{},layers:[]}}),t=()=>{e.load(g(i)),u(!0),o?.(e),d&&(d.map=e)};e.on(`load`,t),e.on(`click`,()=>{console.log(`center:`,e.getCenter(),`zoom:`,e.getZoom())});let n=_(()=>{e.resize()},10);return new ResizeObserver(n).observe(c?.current),()=>{e.off(`load`,t)}},[]),(0,n.jsx)(`div`,{ref:c,className:s??`map-wrapper`,id:`map-wrapper`,children:l&&d&&(0,n.jsx)(E.Provider,{value:d,children:a})})}var k=(0,t.memo)(O),A=(e,t)=>{for(let n of e){if(n.key===t)return n;if(n.children){let e=A(n.children,t);if(e)return e}}return null},j=e=>{let t=[];return e.children&&e.children.length>0&&e.children.forEach(e=>{t.push(e.key),t.push(...j(e))}),t},M=e=>!e.children||e.children.length===0,N=(e,t)=>t.includes(e.key),P=(e,t)=>{if(M(e))return!1;let n=j(e);if(n.length===0)return!1;let r=n.filter(e=>t.includes(e));return r.length>0&&r.length<n.length},F=(0,t.memo)(e=>{let{node:r,level:i,checkedKeys:a,checkable:o,onCheck:s}=e,[c,l]=(0,t.useState)(!0),u=!M(r),d=N(r,a),f=P(r,a);return(0,n.jsxs)(`div`,{className:`qm-tree-node`,children:[(0,n.jsxs)(`div`,{className:`qm-tree-node-content`,style:{paddingLeft:i*18},children:[(0,n.jsx)(`span`,{className:`qm-tree-switcher ${u?``:`qm-tree-switcher-noop`} ${c?`qm-tree-switcher-expanded`:``}`,onClick:()=>{u&&l(!c)},children:u&&(0,n.jsx)(`svg`,{viewBox:`0 0 1024 1024`,width:`12`,height:`12`,fill:`currentColor`,children:(0,n.jsx)(`path`,{d:`M715.8 493.5L435.6 213.3c-12.4-12.4-32.8-12.4-45.2 0s-12.4 32.8 0 45.2l245.8 245.8-245.8 245.8c-12.4 12.4-12.4 32.8 0 45.2 6.2 6.2 14.3 9.3 22.6 9.3s16.4-3.1 22.6-9.3l280.2-280.2c12.4-12.4 12.4-32.8 0-45.2z`})})}),o&&(0,n.jsx)(`span`,{className:`qm-tree-checkbox ${d?`qm-tree-checkbox-checked`:``} ${f?`qm-tree-checkbox-indeterminate`:``}`,onClick:()=>{s(r.key)},children:(0,n.jsxs)(`span`,{className:`qm-tree-checkbox-inner`,children:[d&&(0,n.jsx)(`svg`,{viewBox:`0 0 1024 1024`,width:`10`,height:`10`,fill:`white`,children:(0,n.jsx)(`path`,{d:`M912 224l-448 448-192-192-64 64 256 256 512-512z`})}),f&&(0,n.jsx)(`span`,{className:`qm-tree-checkbox-indeterminate-icon`})]})}),(0,n.jsx)(`span`,{className:`qm-tree-node-title`,title:typeof r.title==`string`?r.title:``,children:r.title})]}),u&&c&&(0,n.jsx)(`div`,{className:`qm-tree-children`,children:r.children.map(e=>(0,n.jsx)(F,{node:e,level:i+1,checkedKeys:a,checkable:o,onCheck:s},e.key))})]})}),I=(0,t.memo)(e=>{let{treeData:r,checkable:i=!1,checkedKeys:a,onCheck:o,style:s}=e,[c,l]=(0,t.useState)([]),u=a!==void 0,d=u?a:c,f=(e,t)=>{let n=A(r,t);if(!n)return e;let i=e.includes(t),a;if(i){let r=j(n),i=new Set([t,...r]);a=e.filter(e=>!i.has(e))}else{let r=j(n);a=Array.from(new Set([...e,t,...r]))}return a},p=(0,t.useCallback)(e=>{if(u){let t=f(d,e);o?.(t)}else l(t=>{let n=f(t,e);return o?.(n),n})},[d,r,u,o]);return(0,n.jsx)(`div`,{className:`qm-tree`,style:s,children:r.map(e=>(0,n.jsx)(F,{node:e,level:0,checkedKeys:d,checkable:i,onCheck:p},e.key))})}),L=(0,t.memo)(e=>{let[r,i]=(0,t.useState)([]),{map:a}=D(),[o,s]=(0,t.useState)([]),c=(0,t.useCallback)((e,t)=>{let n,r=[];return e.forEach(e=>{n=void 0,n=`layers`in e&&e.options.type===`logicGroup`?{title:e.options.name,key:e.options.id,selectable:!1,children:c(e.layers,t)}:{title:e.options.name,key:e.options.id,selectable:!1},n&&r.push(n),e.options.isAdd&&e.options.type!==`logicGroup`&&t.push(e.options.id)}),r},[]),l=e=>{i(e);let t=new Set([...r,...e]),n=new Set([...t].filter(e=>!r.includes(e))),o=new Set([...t].filter(t=>!e.includes(t)));n.forEach(e=>{let t=a?.getLayerWrapper(a.layers,e);t&&`layers`in t?(t.layers.forEach(e=>{e.options.isAdd=!0}),a?.addLayerWrapper(t)):t&&(t.options.isAdd=!0,a?.addLayerWrapper(t))}),o.forEach(e=>{let t=a?.getLayerWrapper(a.layers,e);t&&`layers`in t?(t.layers.forEach(e=>{e.options.isAdd=!1}),a?.removeLayerWrapper(t)):t&&(t.options.isAdd=!1,a?.removeLayerWrapper(t))}),a.layers.forEach(e=>{u(e)})},u=e=>{`layers`in e&&e.layers.findIndex(e=>e.options.type===`logicGroup`)>-1?e.layers.forEach(e=>{u(e)}):`layers`in e&&e.options.type===`logicGroup`&&(e.layers.findIndex(e=>e.options.isAdd)===-1?e.options.isAdd=!1:e.options.isAdd=!0)};return(0,t.useEffect)(()=>{let e=()=>{let e=[];s(a?c(a.layers,e):[]),i(e)},t=_(()=>{e()},300);return a?.on(w.MAPLAYERCHANGED,t),e(),()=>{a?.off(w.MAPLAYERCHANGED,t)}},[]),(0,n.jsx)(h,{name:`图层控制`,position:e.position,icon:m.LayerList,width:200,height:r.length*28<280?280:r.length*28,title:`点击展开/收起图层列表,勾选控制图层显示`,children:(0,n.jsx)(I,{checkable:!0,checkedKeys:r,onCheck:e=>l(e),treeData:o,style:{fontSize:12,maxHeight:400,overflowX:`hidden`,overflowY:`auto`}})})}),R=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(),[o,s]=(0,t.useState)(0),c=(0,t.useCallback)((e,t,i)=>{let a;e.forEach(e=>{if(a=void 0,`layers`in e&&!e.options.legend)c(e.layers,t,i);else if(e.options.legend&&(e.options.isAdd||`layers`in e&&e.layers.filter(e=>e.options.isAdd).length)){let{title:i,items:o}=e.options.legend;if(o)a=(0,n.jsxs)(`div`,{className:`maplibregl-legend-group`,children:[(0,n.jsx)(`div`,{className:`maplibregl-legend-tilte`,children:i||e.options.name}),o?.map(e=>{t.push(26);let i=r?.images.find(t=>t.id===e.imageId);return(0,n.jsxs)(`div`,{className:`maplibregl-legend-item`,children:[i?(0,n.jsx)(`img`,{src:i.data,alt:``,className:`maplibregl-legend-item-img`}):(0,n.jsx)(`div`,{className:`maplibregl-legend-item-geo`,style:e.style}),(0,n.jsx)(`div`,{className:`maplibregl-legend-item-text`,children:e.text})]},e.text)})]},e.options.id),t.push(50);else{let{style:o,imageId:s,text:c}=e.options.legend,l=r?.images.find(e=>e.id===s);t.push(26),a=(0,n.jsxs)(`div`,{className:`maplibregl-legend-item`,children:[l?(0,n.jsx)(`img`,{src:l.data,alt:``,className:`maplibregl-legend-item-img`}):(0,n.jsx)(`div`,{className:`maplibregl-legend-item-geo`,style:o}),(0,n.jsx)(`div`,{className:`maplibregl-legend-item-text`,children:c||e.options.name})]},c||i||e.options.id)}}else a=void 0;a&&i.push(a)})},[]);return(0,t.useEffect)(()=>{let e=()=>{let e=[],t=[];c(r.layers,e,t),a(t),s(e.reduce((e,t)=>e+t,0)+40)},t=_(()=>{e()},200);return r?.on(w.MAPLAYERCHANGED,t),e(),()=>{r?.off(w.MAPLAYERCHANGED,t)}},[]),(0,n.jsx)(h,{name:`图例`,position:e.position,icon:m.Legend,width:180,height:o,title:`点击展开/收起图例面板`,children:(0,n.jsx)(`div`,{className:`maplibregl-legend`,children:i})})}),z={JPEG:`jpg`,PNG:`png`,PDF:`pdf`,SVG:`svg`},B={mm:`mm`},V={A2:[594,420],A3:[420,297],A4:[297,210],A5:[210,148],A6:[148,105],B2:[707,500],B3:[500,353],B4:[353,250],B5:[250,176],B6:[176,125],Letter:[279,216]},H={横向:`landscape`,纵向:`portrait`},U={72:72,96:96,200:200,300:300,400:400},W=class{map;svgCanvas;constructor(e){this.map=e,this.svgCanvas=null}create(){if(!this.map)return;let e=this.map.getCanvasContainer(),t=this.map.getCanvas().clientWidth,n=this.map.getCanvas().clientHeight,r=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);r.setAttribute(`class`,`qm-print-crosshair`),r.style.cssText=`position:absolute;top:0;left:0;width:${t}px;height:${n}px;pointer-events:none;`;let i=t/2,a=n/2,o=document.createElementNS(`http://www.w3.org/2000/svg`,`line`);o.setAttribute(`x1`,`${i}`),o.setAttribute(`y1`,`0`),o.setAttribute(`x2`,`${i}`),o.setAttribute(`y2`,`${n}`),o.setAttribute(`stroke`,`#dddddd`),o.setAttribute(`stroke-width`,`2`),o.setAttribute(`stroke-dasharray`,`5,5`);let s=document.createElementNS(`http://www.w3.org/2000/svg`,`line`);s.setAttribute(`x1`,`0`),s.setAttribute(`y1`,`${a}`),s.setAttribute(`x2`,`${t}`),s.setAttribute(`y2`,`${a}`),s.setAttribute(`stroke`,`#dddddd`),s.setAttribute(`stroke-width`,`2`),s.setAttribute(`stroke-dasharray`,`5,5`),r.appendChild(o),r.appendChild(s),e.appendChild(r),this.svgCanvas=r}destroy(){this.svgCanvas?.remove(),this.svgCanvas=null,this.map=null}},G=class{map;svgCanvas;path;constructor(e){this.map=e,this.svgCanvas=null,this.path=null}updateArea(e,t,n=B.mm){if(!this.map||!this.svgCanvas)return;let r=this.map.getCanvas().clientWidth,i=this.map.getCanvas().clientHeight,a=this.toPixels(e,n),o=this.toPixels(t,n),s=r/a,c=i/o,l=Math.min(s,c,1),u=a*l,d=o*l,f=(r-u)/2,p=(i-d)/2,m=f+u,h=p+d,g=`M 0 0 L ${r} 0 L ${r} ${i} L 0 ${i} Z M ${f} ${p} L ${m} ${p} L ${m} ${h} L ${f} ${h} Z`;this.path?.setAttribute(`d`,g)}create(){if(!this.map)return;let e=this.map.getCanvasContainer(),t=this.map.getCanvas().clientWidth,n=this.map.getCanvas().clientHeight,r=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);r.style.cssText=`position:absolute;top:0;left:0;width:${t}px;height:${n}px;pointer-events:none;`;let i=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);i.setAttribute(`fill`,`#888888`),i.setAttribute(`fill-opacity`,`0.5`),i.setAttribute(`stroke-width`,`0`),i.setAttribute(`fill-rule`,`evenodd`),r.appendChild(i),e.appendChild(r),this.svgCanvas=r,this.path=i}destroy(){this.svgCanvas?.remove(),this.svgCanvas=null,this.path=null,this.map=null}toPixels(e,t){return t===B.mm?96/25.4*e:96*e}},K=class{toPNG(e,t){e.toBlob(e=>{if(e){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}})}toJPEG(e,t,n=.85){let r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);i&&(i.fillStyle=`#FFFFFF`,i.fillRect(0,0,r.width,r.height),i.drawImage(e,0,0));let a=r.toDataURL(`image/jpeg`,Math.max(0,Math.min(1,n))),o=document.createElement(`a`);o.href=a,o.download=t,o.click()}},q=`<svg width="800px" height="800px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--gis" preserveAspectRatio="xMidYMid meet"><path d="M47.655 1.634l-35 95c-.828 2.24 1.659 4.255 3.68 2.98l33.667-21.228l33.666 21.228c2.02 1.271 4.503-.74 3.678-2.98l-35-95C51.907.514 51.163.006 50 .008c-1.163.001-1.99.65-2.345 1.626zm-.155 14.88v57.54L19.89 91.461z" fill="none" stroke="white" stroke-width="1.5"/><path d="M47.655 1.634l-35 95c-.828 2.24 1.659 4.255 3.68 2.98l33.667-21.228l33.666 21.228c2.02 1.271 4.503-.74 3.678-2.98l-35-95C51.907.514 51.163.006 50 .008c-1.163.001-1.99.65-2.345 1.626zm-.155 14.88v57.54L19.89 91.461z" fill="#000000" fill-rule="evenodd"></path></svg>`,J={image:q,imageName:`gl-export-north-icon`,imageSizeFraction:.05,visibility:`visible`,position:`top-right`},Y=class{options;constructor(e){this.options={...J,...e,image:e?.image??q}}async addToMap(e,t,n){let r=this.options.visibility??`visible`;e.getZoom()<2&&t>n&&(r=`none`),await this.addNorthIconImage(e);let i=this.getIconWidth(e,this.options.imageSizeFraction??.08)*.8,a=this.getElementPosition(e,this.options.position??`top-right`,i),o=e.unproject(a),s=this.options.imageName??`gl-export-north-icon`;e.addSource(s,{type:`geojson`,data:{type:`Feature`,geometry:{type:`Point`,coordinates:[o.lng,o.lat]},properties:{}}}),e.addLayer({id:s,source:s,type:`symbol`,layout:{"icon-image":s,"icon-size":1,"icon-rotate":e.getBearing()*-1,"icon-allow-overlap":!0,"icon-ignore-placement":!0,visibility:r},paint:{}})}async addNorthIconImage(e){let t=this.getIconWidth(e,this.options.imageSizeFraction??.08);return new Promise(n=>{let r=new Image(t,t);r.onload=()=>{this.options.imageName&&e.addImage(this.options.imageName,r),n()};function i(e){return`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(e)}this.options.image&&(r.src=i(this.options.image))})}getIconWidth(e,t){let n=e.getContainer(),r=parseInt(n.style.width.replace(`px`,``));return parseInt(`${r*t}`)}getElementPosition(e,t,n=0){let r=e.getContainer(),i=0,a=0;switch(t){case`top-left`:i=0+n,a=0+n;break;case`top-right`:i=parseInt(r.style.width.replace(`px`,``))-n,a=0+n;break;case`bottom-left`:i=0+n,a=parseInt(r.style.height.replace(`px`,``))-n;break;case`bottom-right`:i=parseInt(r.style.width.replace(`px`,``))-n,a=parseInt(r.style.height.replace(`px`,``))-n;break;default:break}return[i,a]}updateOptions(e){this.options={...this.options,...e,image:e.image??this.options.image}}},X={"circle-radius":8,"circle-color":`red`,"circle-stroke-width":1,"circle-stroke-color":`black`},ee=`maplibregl-marker`,te=class{sourceMap;renderMap;markerClassName;markerCirclePaint;constructor(e,t,n){this.sourceMap=e,this.renderMap=t,this.markerClassName=n?.markerClassName??ee,this.markerCirclePaint={...X,...n?.markerCirclePaint}}getMarkers(){return this.sourceMap.getCanvasContainer().getElementsByClassName(this.markerClassName)}renderMarkers(){let e=this.getMarkers(),t=e.length;if(t===0)return!1;for(let n=0;n<t;n++){let t=e.item(n);if(!t)continue;let r=t.getAttribute(`style`);if(!r)continue;let i=r.match(/translate\(([^,]+)px,\s*([^,]+)px\)/);if(!i)continue;let a=parseInt(i[1]),o=parseInt(i[2]),s=this.sourceMap.unproject([a,o]),c=`print-marker-${n}`;this.renderMap.addSource(c,{type:`geojson`,data:{type:`Point`,coordinates:[s.lng,s.lat]}}),this.renderMap.addLayer({id:c,source:c,type:`circle`,paint:this.markerCirclePaint})}return!0}},ne=class{width;height;unit;constructor(e,t,n){this.width=e,this.height=t,this.unit=n}generate(e,t){let n=this.buildPDF(e),r=new Blob([n],{type:`application/pdf`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t,a.click(),URL.revokeObjectURL(i)}buildPDF(e){let t=this.unit===B.mm?this.width*2.83465:this.width*72,n=this.unit===B.mm?this.height*2.83465:this.height*72,r=document.createElement(`canvas`);r.width=e.width,r.height=e.height;let i=r.getContext(`2d`);i&&(i.fillStyle=`#FFFFFF`,i.fillRect(0,0,r.width,r.height),i.drawImage(e,0,0));let a=r.toDataURL(`image/jpeg`,.92).split(`,`)[1],o=atob(a),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return this.createPDFStructure(t,n,e.width,e.height,s)}createPDFStructure(e,t,n,r,i){let a=Math.round(e),o=Math.round(t),s=i.length,c=0,l=c;c+=49;let u=c;c+=57;let d=`3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${a} ${o}] /Contents 4 0 R /Resources << /XObject << /Im0 5 0 R >> >> >>\nendobj\n`,f=c;c+=d.length;let p=`q\n${a} 0 0 ${o} 0 0 cm\n/Im0 Do\nQ\n`,m=`4 0 obj\n<< /Length ${p.length} >>\nstream\n${p}endstream\nendobj\n`,h=c;c+=m.length;let g=`5 0 obj\n<< /Type /XObject /Subtype /Image /Width ${n} /Height ${r} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${s} >>\nstream\n`,_=c;c+=g.length+s+18;let v=c,y=`xref\n0 6\n0000000000 65535 f \n${String(l).padStart(10,`0`)} 00000 n \n${String(u).padStart(10,`0`)} 00000 n \n${String(f).padStart(10,`0`)} 00000 n \n${String(h).padStart(10,`0`)} 00000 n \n${String(_).padStart(10,`0`)} 00000 n \n`,b=`trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n${v}\n%%EOF`,x=new TextEncoder,S=[x.encode(`%PDF-1.4
|
|
2
2
|
`),x.encode(`1 0 obj
|
|
3
3
|
<< /Type /Catalog /Pages 2 0 R >>
|
|
4
4
|
endobj
|
|
@@ -25,4 +25,4 @@ endobj
|
|
|
25
25
|
height: 100%;
|
|
26
26
|
visibility: hidden;
|
|
27
27
|
pointer-events: none;
|
|
28
|
-
`;let i=document.createElement(`div`),a=this.toPixels(this.width),o=this.toPixels(this.height);i.style.cssText=`position:absolute;top:0;left:0;width:${a}px;height:${o}px;`,n.appendChild(i),document.body.appendChild(n);let s=new r.Map({container:i,style:this.map.getStyle(),center:this.map.getCenter(),zoom:this.map.getZoom(),bearing:this.map.getBearing(),pitch:this.map.getPitch(),interactive:!1,fadeDuration:0,attributionControl:!1,canvasContextAttributes:{preserveDrawingBuffer:!0},transformRequest:this.map._requestManager._transformRequestFn});this.map.getTerrain()&&(s.setMaxPitch(85),s.setPitch(this.map.getPitch()));let c=this.map.style?.imageManager?.images||[];Object.keys(c).forEach(e=>{s.hasImage(e)||s.addImage(e,c[e].data)});let l=()=>new Promise(e=>{if(!s.isStyleLoaded()||!s.areTilesLoaded()){setTimeout(l,100);return}setTimeout(e,200)});s.once(`idle`,async()=>{await l(),this.northIcon&&(await new Y(this.northIconOptions).addToMap(s,this.width,this.height),await new Promise(e=>{s.once(`idle`,()=>{setTimeout(e,200)})})),new te(this.map,s,this.markerOptions).renderMarkers()&&await new Promise(e=>{s.once(`idle`,()=>{setTimeout(e,200)})});let r=s.getCanvas(),i=r.getContext(`webgl`)||r.getContext(`webgl2`);i&&i.readPixels(0,0,1,1,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(4));let a=`map.${this.format}`,o=new K;switch(this.format){case z.PNG:o.toPNG(r,a);break;case z.JPEG:o.toJPEG(r,a,this.jpegQuality);break;case z.PDF:new ne(this.width,this.height,this.unit).generate(r,a);break;case z.SVG:new re().toSVG(r,a,this.width,this.height,this.unit,this.dpi);break}s.remove(),n.remove(),Object.defineProperty(window,"devicePixelRatio",{get:()=>t}),this.hideLoading(),e?.()})}toPixels(e){return this.unit===B.mm?96/25.4*e:96*e}showLoading(){let e=document.createElement(`div`);e.className=`qm-print-loading-overlay`,e.innerHTML=`<div class="qm-print-loading-spinner"></div><div class="qm-print-loading-text">正在生成...</div>`,document.body.appendChild(e)}hideLoading(){document.querySelector(`.qm-print-loading-overlay`)?.remove()}},ae=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(!1),[o,s]=(0,t.useState)({PageSize:V.A4,PageOrientation:H.横向,Format:z.PDF,DPI:U[300],Crosshair:!0,PrintableArea:!0}),c=(0,t.useRef)(null),l=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(r)return i?(o.Crosshair&&(c.current=new W(r),c.current.create()),o.PrintableArea&&(l.current=new G(r),l.current.create()),u()):(c.current?.destroy(),c.current=null,l.current?.destroy(),l.current=null),()=>{c.current?.destroy(),l.current?.destroy()}},[r,i,o.Crosshair,o.PrintableArea,o.PageSize,o.PageOrientation]);let u=(0,t.useCallback)(()=>{if(!l.current)return;let e=o.PageSize;o.PageOrientation===H.纵向?l.current.updateArea(e[1],e[0]):l.current.updateArea(e[0],e[1])},[o.PageSize,o.PageOrientation]),d=(0,t.useCallback)(()=>{if(!r)return;let e=[...o.PageSize];o.PageOrientation===H.纵向&&(e=[e[1],e[0]]),new ie(r,e,o.DPI,o.Format,B.mm,{jpegQuality:o.JPEGQuality,northIcon:!0}).generate(()=>{a(!1)})},[r,o]),f=e=>{console.log(`打印面板:`,e),a(e)},p=Object.entries(V).map(([e,t])=>(0,n.jsx)(`option`,{value:JSON.stringify(t),children:e},e)),g=Object.entries(H).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e)),_=Object.entries(z).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e)),v=Object.entries(U).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e));return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(h,{name:`打印`,position:e.position,icon:m.Print,openHandle:f,children:(0,n.jsx)(n.Fragment,{})}),(0,n.jsxs)(`div`,{className:`qm-print-panel ${i?`open`:``}`,style:{position:`absolute`,top:(e.position.top??0)+34,right:e.position.right??10},children:[(0,n.jsx)(`table`,{className:`qm-print-panel-table`,children:(0,n.jsxs)(`tbody`,{children:[(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`页面尺寸`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-page-size`,value:JSON.stringify(o.PageSize),onChange:e=>{s(t=>({...t,PageSize:JSON.parse(e.target.value)})),u()},children:p})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`布局方向`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-orientation`,value:o.PageOrientation,onChange:e=>{s(t=>({...t,PageOrientation:e.target.value})),u()},children:g})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`导出格式`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-format`,value:o.Format,onChange:e=>s(t=>({...t,Format:e.target.value})),children:_})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`DPI`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-dpi`,value:o.DPI,onChange:e=>s(t=>({...t,DPI:Number(e.target.value)})),children:v})})]})]})}),(0,n.jsx)(`button`,{type:`button`,className:`qm-print-export-button`,onClick:d,children:`导 出`})]})]})});function oe(e,t){let n=e.getCenter(),r=e.getZoom(),i=e.getBearing(),a=e.getPitch();t.forEach(e=>{e.jumpTo({center:n,zoom:r,bearing:i,pitch:a})})}function se(...e){let t;t=e.length===1&&Array.isArray(e[0])?e[0]:e;let n=[];t.forEach((e,r)=>{let i=t.filter((e,t)=>t!==r);n[r]=()=>a(e,i)});function r(){t.forEach((e,t)=>{e.on(`move`,n[t])})}function i(){t.forEach((e,t)=>{e.off(`move`,n[t])})}function a(e,t){i(),oe(e,t),r()}return r(),()=>{i()}}var Z=class{options;_mapA;_mapB;_horizontal;_bounds;currentPosition=0;_swiper;_controlContainer;_clearSync;_onResize;_eventTarget;constructor(e,t,n,r={}){this.options={orientation:`vertical`,mousemove:!1,...r},this._mapA=e,this._mapB=t,this._horizontal=this.options.orientation===`horizontal`,this._eventTarget=new EventTarget,this._swiper=document.createElement(`div`),this._swiper.className=this._horizontal?`compare-swiper-horizontal`:`compare-swiper-vertical`,this._controlContainer=document.createElement(`div`),this._controlContainer.className=this._horizontal?`maplibregl-compare maplibregl-compare-horizontal`:`maplibregl-compare`,this._controlContainer.appendChild(this._swiper),this._mountContainer(n),this._bounds=this._mapB.getContainer().getBoundingClientRect();let i=this._horizontal?this._bounds.height/2:this._bounds.width/2;this._setPosition(i),this._clearSync=se(this._mapA,this._mapB),this._onResize=()=>{this._bounds=this._mapB.getContainer().getBoundingClientRect(),this.currentPosition&&this._setPosition(this.currentPosition)},this._mapB.on(`resize`,this._onResize),this.options.mousemove&&(this._mapA.getContainer().addEventListener(`mousemove`,this._onMove),this._mapB.getContainer().addEventListener(`mousemove`,this._onMove)),this._swiper.addEventListener(`mousedown`,this._onDown),this._swiper.addEventListener(`touchstart`,this._onDown)}_mountContainer(e){if(typeof e==`string`){let t=document.querySelector(e);if(!t)throw Error(`找不到容器`);t.appendChild(this._controlContainer)}else if(e instanceof HTMLElement)e.appendChild(this._controlContainer);else throw Error(`容器必须是字符串选择器或 HTML 元素`)}_setPointerEvents(e){this._controlContainer.style.pointerEvents=e,this._swiper.style.pointerEvents=e}_onDown=e=>{`touches`in e?(document.addEventListener(`touchmove`,this._onMove),document.addEventListener(`touchend`,this._onTouchEnd)):(document.addEventListener(`mousemove`,this._onMove),document.addEventListener(`mouseup`,this._onMouseUp))};_setPosition(e){let t=this._horizontal?this._bounds.height:this._bounds.width,n=Math.max(0,Math.min(e,t)),r=this._horizontal?`translate(0, ${n}px)`:`translate(${n}px, 0)`;this._controlContainer.style.transform=r,this._controlContainer.style.webkitTransform=r;let i=this._bounds.height,a,o;this._horizontal?(a=`rect(0, 999em, ${n}px, 0)`,o=`rect(${n}px, 999em, ${i}px, 0)`):(a=`rect(0, ${n}px, ${i}px, 0)`,o=`rect(0, 999em, ${i}px, ${n}px)`),this._mapA.getContainer().style.clip=a,this._mapB.getContainer().style.clip=o,this.currentPosition=n}_onMove=e=>{this.options.mousemove&&this._setPointerEvents(`none`),this._horizontal?this._setPosition(this._getY(e)):this._setPosition(this._getX(e))};_onMouseUp=()=>{document.removeEventListener(`mousemove`,this._onMove),document.removeEventListener(`mouseup`,this._onMouseUp),this._emitSlideEnd()};_onTouchEnd=()=>{document.removeEventListener(`touchmove`,this._onMove),document.removeEventListener(`touchend`,this._onTouchEnd),this._emitSlideEnd()};_emitSlideEnd(){this._eventTarget.dispatchEvent(new CustomEvent(`slideend`,{detail:{currentPosition:this.currentPosition}}))}_getX(e){let t=(`touches`in e?e.touches[0]:e).clientX-this._bounds.left;return Math.max(0,Math.min(t,this._bounds.width))}_getY(e){let t=(`touches`in e?e.touches[0]:e).clientY-this._bounds.top;return Math.max(0,Math.min(t,this._bounds.height))}setSlider(e){this._setPosition(e)}on(e,t){this._eventTarget.addEventListener(e,e=>{let n=e.detail;t(n)})}off(e,t){this._eventTarget.removeEventListener(e,t)}remove(){this._clearSync(),this._mapB.off(`resize`,this._onResize),[this._mapA,this._mapB].forEach(e=>{let t=e.getContainer();t.style.clip=``,t.removeEventListener(`mousemove`,this._onMove)}),this._swiper.removeEventListener(`mousedown`,this._onDown),this._swiper.removeEventListener(`touchstart`,this._onDown),this._controlContainer.remove()}};window.maplibregl&&(window.maplibregl.Compare=Z);var ce=(0,t.memo)(e=>{let{title:r,open:a=!1,maskClosable:o=!0,mask:s,width:c=520,footer:l,onCancel:u,destroyOnHidden:d=!1,className:f,style:p,children:m,centered:h=!1}=e,g=s?.closable===void 0?o:s.closable,[_,v]=(0,t.useState)(a);(0,t.useEffect)(()=>{if(a)v(!0),document.body.style.overflow=`hidden`;else if(document.body.style.overflow=``,d){let e=setTimeout(()=>{v(!1)},200);return()=>clearTimeout(e)}},[a,d]),(0,t.useEffect)(()=>()=>{document.body.style.overflow=``},[]);let y=(0,t.useCallback)(e=>{e.target===e.currentTarget&&g&&u?.()},[g,u]),b=(0,t.useCallback)(e=>{e.stopPropagation(),u?.()},[u]);return _?(0,i.createPortal)((0,n.jsxs)(`div`,{className:`qm-modal-wrapper ${a?`qm-modal-open`:``} ${h?`qm-modal-centered`:``}`,children:[(0,n.jsx)(`div`,{className:`qm-modal-mask ${a?`qm-modal-mask-enter`:`qm-modal-mask-leave`}`}),(0,n.jsx)(`div`,{className:`qm-modal-container`,onClick:y,children:(0,n.jsxs)(`div`,{className:`qm-modal ${f||``} ${a?`qm-modal-enter`:`qm-modal-leave`}`,style:{width:typeof c==`number`?`${c}px`:c,...p},onClick:e=>e.stopPropagation(),children:[r&&(0,n.jsxs)(`div`,{className:`qm-modal-header`,children:[(0,n.jsx)(`div`,{className:`qm-modal-title`,children:r}),(0,n.jsx)(`button`,{type:`button`,className:`qm-modal-close`,onClick:b,"aria-label":`关闭`,children:(0,n.jsx)(`span`,{className:`qm-modal-close-x`,children:`×`})})]}),(0,n.jsx)(`div`,{className:`qm-modal-body`,children:m}),l!==null&&(0,n.jsx)(`div`,{className:`qm-modal-footer`,children:l})]})})]}),document.body):null}),le=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(!1),[o,s]=(0,t.useState)(null),[c,l]=(0,t.useState)(null),u=(0,t.useCallback)(e=>{a(e)},[]);return(0,t.useEffect)(()=>{if(o&&c){let e=document.getElementById(`swipeContainer`);e&&(new Z(o,c,e,{mousemove:!1,orientation:`vertical`}),o.setCenter(r.getCenter()),o.setZoom(r.getZoom()),o.setBearing(r.getBearing()),c.setPitch(r.getPitch()))}},[o,c]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(h,{name:`卷帘对比`,position:{...e.position},icon:m.Swipe,openHandle:u,children:(0,n.jsx)(n.Fragment,{})}),(0,n.jsx)(ce,{title:`卷帘对比`,mask:{closable:!1},open:i,width:1e3,footer:null,onCancel:()=>a(!1),destroyOnHidden:!0,children:(0,n.jsxs)(`div`,{id:`swipeContainer`,className:`maplibregl-swipe`,children:[(0,n.jsx)(k,{mapOptions:{...r.options,id:`swipeBeforeMap`},mapLayerSettting:r.mapLayerSetting,onMapLoad:e=>s(e),className:`swipe-map-container`,children:(0,n.jsx)(L,{position:{top:10,left:10}})}),(0,n.jsx)(k,{mapOptions:{...r.options,id:`swipeAfterMap`},mapLayerSettting:r.mapLayerSetting,onMapLoad:e=>l(e),className:`swipe-map-container`,children:(0,n.jsx)(L,{position:{top:10,right:10}})})]})})]})}),Q={Point:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARxJREFUWEft1LEuREEYxfHf9jRLIRIqnUSpoOEFREUh3kFBo6LYKEj0StEp8ARUEvUmOg2NSHT07pW73XK/mZBtZto5c87/npn7dYx4dUacrwCUBkoDpYHcBiYwjTG84g2fOUMtB+AYu0PC9nGUCpEK8IyZX0IOq72DFIgUgFusBMw3cBnQfUuiAOu4ippivLqmj4g+ClDfby9i2Gjm8BTRRwFusBYxbDTLuI/oowCn2IkYNpoF9CP6KMA2ziOGjWYS7xF9FKDbfFE9fNrWSTWU9tpEg/0oQK3fwkWL8Qtmo+Epv+HAc6kawWfVfz4/JOQOqynhOQD1mXr+b2IRU3jAI65Tw3MBcnJ+PJPyBv40OOcRFoDSQGngXxr4App1HCGF2UdQAAAAAElFTkSuQmCC`,Line:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAp1JREFUWEe9l0uIjlEYx3+zsZGFsqCUe0hEiXFJ7iklxUxZMcVIE7IZFm4TJWYzLolQLKYmTKLIJYaYRolyySULpMRmFkwoC85/Oq/ejvO93zlHvWf7vc95fu/z/J//8341lHuWArOBJ8AVpa4pMf9eYE8u311gQVkAdcB5z8vWlwXgvn3G0lIWwFjgracC48oCUG63CmeBhmoAs4CJwC/gKtD7H6JtBg4C14FNwPtqU6CRueEkHGqCvyRC3JHqge3AoeyOogo8BGY6yY6aKmxJABicq94M4FEIwFdgkJPsmglengCwErgEPAem5OOLKnAfmOska7FiimU4AWwEjgBbQwHmA12eTCkQEtwIQJW4HApQC/QALwE52aScm8VAzAEeWA0MMXb8OxRgH7ATOAOst0F5Sw2FyMavE1jtVrRIA9pY04ANwOlcYCzETWAJ0AicCgVQv9S3PjuKakP+hELIxLLYYcDnUACVXLS3ABmS74RAZPdIS/oO+OdUaoFmVoqVDnYXzFw1CPn9WmAXsD8UYKBV7ABgYYVRDGmHbFvqHwNMBZ6GAqyws/oGmBDoOL5KrAIumo33ARhZ6R5fCw5bvz9nhLguEECPuRDaI8uAY8DmGAB9OOgDYo2pQEcEgAuRhX4zK1im5k5S/+9uBaTUbrMyfxhyudb3SACN2idPjOslfx9xAaR4OdxtI6DFkcn1uDadT2xNwPEQEd4D5tmNpc2Vcj4a5xzuBKqy8oJCHxgPvLZPjDbz+y4lux27VmAR8Mr6iOzYe7IWSO3606BxeQFMTkweHSaAHcABJ7LerN8L0bclBAjgmeeNHwPTE+6LDhGAeu06lTbhqOjbEgIEcNLu6nx4G7At4b7okEyEEqBW50+g3dyifzGlnD8S4H8a/N0aLAAAAABJRU5ErkJggg==`,Rectangle:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAASxJREFUWEft16FKBWEQBeDvvodBRCw+gFWbgtVkEkWLil6wGbSLgiZBxKDFajB6owgGwSQ3GMTmMyhz3YVluRdW+BcM/4FlYXf2zPnPzMJMxy92cYx7POGgeJ76dooFfOEGZx1sIV5UsYKrxNmH5emGgEfMJE7WmC4EvGK69sUbPhuzNAscR1xV9EJA1D56oIo59JrxNo5axnUt+jAEBMr6vGO/aJDGzH8InMU5pjDos1JAcHwXp47Tt4kHhJBB7iwgO5AdyA5kB7ID2YHsQHbg3ziwXgyLMaYdYa+loXAztqGCe7vcjG6xVEvYxUliEYu4q3EOVrOYhuv4QD+xgDFM1jj7owQkzj2S7jkEDCvBKi4Tq4gyR64qNsq/YA2xOgUuWtyMQsQ8JrCDlx+OVWdvFenv8gAAAABJRU5ErkJggg==`,Polygon:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAxVJREFUWEe1133InnMUB/DPKCQS87ZQtrJ5yT8LUShaJKHWzMSaWqkt07LyEjEvQykrL2WRFautoZBt3hoRhkRqjLyUKMuyGLHWan3X73q6unff7t+953Lq6um5nt855/s7z/ec870mqLfDcBeuwd94E7fUu/c/OWGEAIuxvOf8Ejw6Qox9jo4C4HtM6ZPsM/Q+/TAdWfx/xtbmwCgANuP0ytt+hE3IzzznYW3L9znMy++jAHgIt/cAeAw7cApOKwAPrAR5L5bWAjgKH+DUEjzVGETCizEV03AGzsTxfUC9jstqATyM2/Aqrqq8YXPsEPzTxyfkXVID4AK8iwNKmbeMCCDHV+DGlt83mImvagC8XG79CG7dj+SNy7VYiYNxOdbXkHA+nsFfCA92jQNAXH/EyTgRvwwDkJJ/WYi0AE+NM3ncPywteQ4+HQbgAdyJzzG9g+QJ8VL534fIIfTAOXASvsNBuLS0XBcYHsdNGKvoIBKuKUvnRVzdReYS4w48iPtwz6AK5MYZErFUIrO7K7uhdMLTTVv2q0DIcRaWlfXbVfLEuQRv4DVc0a7AE6U38y5t8jsmdpm5xMpYTmeNETsVWIgne5KFLDf/DwCOxm/4FZOaCvTb8+mALJ7dHYPIpoyayjQ8BttSgZDshJ5E28vk6zj/3nA/YHIZcHt3QXb6op5MUTghYteWcf4KzseFeD8ADkWmXhia/d1Y9sCzHSK4srRgQMS2YX67DQ8vxIj4zKT6s4D6uCMQ7yGrvW0bBk3C5vAnpVQ79xPE2ZhRej66cB8bBCD67h0chzEBWQkiJU5rR5pdNMRn/X8JknyAZCfE8gHS+03Qjn0EZpUnibPEGguhox834n6cW/7wBxYPU0R3I+o1lnlxLL4uUzM6Lze8vnAlur+xb/EW1mFD633Uc6RYtEbefzEMQHxX4bqeUiZ4BlWWVWOZbm+XNssWrbIaAOHA3AHRUoUsl5Q4eu/fqqytQzUAVmNOn8DhRRTOT6MmbZ+vAZDbpwptewGzx5O48a0BkLNLizTPAomYeL7M9HFj2AMTmY45mDBG5AAAAABJRU5ErkJggg==`,Trash:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA71JREFUWEfNl2nIVlUQx3+vgoRrai6lpaaiJbgU5QeXygVREVdUxF0RTa0oF3BBW6AFxRUXXHLrg5qgIgruS35QM1ooI3LFXdyKKAiq83+ZI+Pj83jPKynOpzlzZ87935n/mTm3iHTZB7ye6L4feCPFtyjFyXz+LYGvXJP2TnLKAfB+BpAZ9jxp7ySnPABmFgAh+wMBGAoMyfiyWH/V936S6rcaWKUMPA1cLGF9/w/3G0DVWILPAWXhUcoqYFhJOPBQwD2WACoAv9nn1gSuuE+vayxfAhzJSUkvoDKwIsdeA7hstmeAS/55vgxMAz40p4+A6S4gHrMzwPMBjG9OUR8mdrsY7aU9JW2BQ1kAxgV2LjCnecA7LmAqIFCSMsDfpj8B/Gn6FOBjFzMXeNvWLYBvswAMCl+3xpxWAiNcwGTgE1uXdS9V6nWsJO8Cc1yMSjLc1g2Ak1kAugFbzWkD0M8FvAfMsnVF4HfTfS8ZA4gjUdYDfW2Ry6m8A6MNcNACdgBd3GZKpVIqqRJSe9P0esAp03M5sD0QtrM9Kw/8kZWBpsB35vQVIEBRxgILbSF2XzX9ReBH0/sD+uooIl1r4J9A7tL+5dLznYLnQoc6a44C0twFjQqte6mta7kW/hJw3Ow9gC0uRqRrBtwO2XsyBUClwPxb5qi01ndBIlM853UCuc7Zs1aAsiXpBOx0MSKdjuz5EPtsCgD5KF3KzjWgugsaDGiKSQQs1r19SPNus7/mOCSTylQN+DmU5oVUACKX0vUXUM4AKXYA8IVt0iisfzG9K7DN9FeBY6aXMtKpT8imZ3dJoVlwOnQztV2JgKh+Eh2nSLAmYf2T2fsAG00XiX8w3ZdTd8p2qQAiceRfG7hgger3m0wXsb43fWAoyVrTGwK/mi6iqvYS9ZbuqQB061EtJaqb6ifxTepl4BuzjwSWmS6ixZc2Do3shNlVOgG9SwqVYLND62uqhqLGImkZmtRR08eHxjTf9KeA66a/4nx0fEenAhDTxXiJGL7X9I7uiKm5HDb7ROAz0323U833mH02MCEVgKbgW+bsG4t+NiIYXT4PmI9G9gemq9vpGEtUc2VTouv8PbfpQiXQZvEeoOm4ziH/OkxEHSs1nEhOnRhlQ8fS/xF5cipLcZDd2a4QAI1UpUzyJrA4N3WJa03GReabOyWLzYUA6A6w3AJ1B4j1TXzvHbdJwKe2ys3kfQH0Br60wKwfkSxQ8Uelp+NDZgk6ALuydi7hc52gOC8yAei2o5Ga+juehaX4JySf03+JLrAhSDUYWAAAAABJRU5ErkJggg==`,Reset:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAuRJREFUWEfVl1moTWEUx3+31M1U5JYxxQuJa7xvEg+UMpOkDFcevChEGUMi8/gkD24kSaIkRJEhM1cyJA83JMKD5AUPvv9tfVpOe5999j3XkVX7tPfZa/h/3/p/a61dxT+Wqn8cn/8SwAhgHDAW6Ap0A9oDH+y6C5wHrgNfsnY4zw6MBhYD07Kc2vu3wD5gP/A9zaYUAG3NycIUJ2+A98AA24lCtYfAVuBkkn0WgB7AYdvyaH8BOAe8ABqBT85xf2CgXesLAq4EthWCKAagD3AGqDWjp8B24EiJKRBPpD/Y6eu/S96+GIBjwGwXfCbwrMTgXm15SM0O98cw4FF8TgMgsok8ktfA+BYGj3GWArvt4SowphDAhsDwz8ABoNqC9TWlRcDBFqy80OQKoJMk2Rh+FLO5EOkmEmY60AY4YYriwNRWCC4XQwGdiCjiWJMAiBgX3QuRbK49a6s6hDQsAI6nHaUcAP1i64GGyAEdtfnmSKnoEgj4ErjtwLwDeuYIlqQ6yxaidw1AfQQwCLgGdHJWX4GO7vl33soAoRrxxOzvh3pS50/BWmBTgnOxVpXMp6kMDHwL9aEdoAra2wPQ6i8Dw837j1DDVwcO7CwnWoLtPUANTf2hurAOzLPcnALWAc9bObjcaeW97NjXJBWiOcDRvxBYLrsDIrNEXKjNakatjWNCSPFZX2MqDWCFNShhUHneW0kAKvF3XHdUZWysJIBloa7ssu0XyWfovlIAaoCPjlCjbGbMBKDuVQe8Clt3ugxGqurF+rIFWBN9Ze2A5sBDpqwxbDNwKweQPcASp38zFLuR3j4LgAZNjWJRfhoIHaUHRYBMsRY/xOk0AWrBf0gWAClr0NQ0o6nIixgtIBpKdamLTgrj1uQwN8ZhJuo3d74kwKUAiHarAOUvj2jV6qICkCh5AMhBv7D1E+0Sk9PkBqAvJI14ApEqeQF4R/okU447u+uxDTH+W6HojpUDIE8qUnV/AUEbfiHgdnTrAAAAAElFTkSuQmCC`},$=[{id:`point`,title:`绘制点`,mode:`draw_point`,icon:Q.Point},{id:`line`,title:`绘制线`,mode:`draw_line_string`,icon:Q.Line},{id:`polygon`,title:`绘制面`,mode:`draw_polygon`,icon:Q.Polygon},{id:`reset`,title:`清除选中/所有`,mode:`simple_select`,icon:Q.Reset}],ue=[{id:`gl-draw-line`,type:`line`,filter:[`all`,[`==`,`$type`,`LineString`]],layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":`#D20C0C`,"line-dasharray":[.2,2],"line-width":2}},{id:`gl-draw-polygon-fill`,type:`fill`,filter:[`all`,[`==`,`$type`,`Polygon`]],paint:{"fill-color":`#D20C0C`,"fill-outline-color":`#D20C0C`,"fill-opacity":.3}},{id:`gl-draw-polygon-midpoint`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`midpoint`]],paint:{"circle-radius":5,"circle-color":`#fbb03b`}},{id:`gl-draw-polygon-stroke-active`,type:`line`,filter:[`all`,[`==`,`$type`,`Polygon`]],layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":`#D20C0C`,"line-dasharray":[.3,3],"line-width":3}},{id:`gl-draw-polygon-and-line-vertex-halo-active`,type:`circle`,filter:[`all`,[`==`,`meta`,`vertex`],[`==`,`$type`,`Point`]],paint:{"circle-radius":5,"circle-color":`#FFF`}},{id:`gl-draw-polygon-and-line-vertex-active`,type:`circle`,filter:[`all`,[`==`,`meta`,`vertex`],[`==`,`$type`,`Point`]],paint:{"circle-radius":3,"circle-color":`#D20C0C`}},{id:`gl-draw-point-point-stroke-active`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`true`]],paint:{"circle-radius":8,"circle-color":`#FFF`}},{id:`gl-draw-point-active`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`true`]],paint:{"circle-radius":6,"circle-color":`#D20C0C`}},{id:`gl-draw-point-point-stroke-inactive`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`false`]],paint:{"circle-radius":8,"circle-color":`#FFF`}},{id:`gl-draw-point-inactive`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`false`]],paint:{"circle-radius":6,"circle-color":`#D20C0C`}}],de=(0,t.memo)(e=>{let{position:r,onDraw:i,initFeature:o,modes:s}=e,c=s?$.filter(e=>s.includes(e.mode)||e.id===`reset`):$,{map:l}=D(),u=(0,t.useRef)(null);(0,t.useEffect)(()=>{o&&d(o)},[o]);let d=e=>{if(l&&e.features&&u.current){let t=b(e.features[0]);t&&l.fitBounds(t,{maxZoom:16});let n=u.current.add(e);u.current.changeMode(`simple_select`,{featureIds:n})}},f=(e,t)=>{if(!u.current||!l)return;t===`reset`&&u.current.deleteAll(),u.current.changeMode(e);let n=l.getCanvas();e===`simple_select`?n.style.cursor=``:n.style.cursor=`crosshair`},p=()=>{if(!u.current)return;let e=u.current.getAll();e.features&&e.features.length>0&&i({data:e})};return(0,t.useEffect)(()=>(l&&!u.current&&(u.current=new a.default({displayControlsDefault:!1,styles:ue,defaultMode:`simple_select`}),l.addControl(u.current,`bottom-left`),l.on(`draw.create`,p),l.on(`draw.delete`,p),l.on(`draw.update`,p),l.on(`draw.modechange`,e=>{let t=l.getCanvas();e.mode===`simple_select`?t.style.cursor=``:t.style.cursor=`crosshair`})),()=>{}),[]),(0,n.jsx)(`div`,{className:`mapboxgl-draw`,style:{...r},children:(0,n.jsx)(`div`,{className:`mapboxgl-draw-bar`,children:(0,n.jsx)(`div`,{children:c.map(e=>(0,n.jsx)(`div`,{title:e.title,className:`mapboxgl-draw-bar-button`,style:{backgroundImage:`url(${e.icon})`},onClick:()=>f(e.mode,e.id)},e.id))})})})});e.BaseLayer=x,e.BaseWidget=h,e.Draw=de,e.LayerGroupWrapper=C,e.LayerList=L,e.LayerWrapper=S,e.Legend=R,e.MapContext=E,e.MapWidget=k,e.MapWrapper=T,e.Print=ae,e.Swipe=le,e.useMap=D});
|
|
28
|
+
`;let i=document.createElement(`div`),a=this.toPixels(this.width),o=this.toPixels(this.height);i.style.cssText=`position:absolute;top:0;left:0;width:${a}px;height:${o}px;`,n.appendChild(i),document.body.appendChild(n);let s=new r.Map({container:i,style:this.map.getStyle(),center:this.map.getCenter(),zoom:this.map.getZoom(),bearing:this.map.getBearing(),pitch:this.map.getPitch(),interactive:!1,fadeDuration:0,attributionControl:!1,canvasContextAttributes:{preserveDrawingBuffer:!0},transformRequest:this.map._requestManager._transformRequestFn});this.map.getTerrain()&&(s.setMaxPitch(85),s.setPitch(this.map.getPitch()));let c=this.map.style?.imageManager?.images||[];Object.keys(c).forEach(e=>{s.hasImage(e)||s.addImage(e,c[e].data)});let l=()=>new Promise(e=>{if(!s.isStyleLoaded()||!s.areTilesLoaded()){setTimeout(l,100);return}setTimeout(e,200)});s.once(`idle`,async()=>{await l(),this.northIcon&&(await new Y(this.northIconOptions).addToMap(s,this.width,this.height),await new Promise(e=>{s.once(`idle`,()=>{setTimeout(e,200)})})),new te(this.map,s,this.markerOptions).renderMarkers()&&await new Promise(e=>{s.once(`idle`,()=>{setTimeout(e,200)})});let r=s.getCanvas(),i=r.getContext(`webgl`)||r.getContext(`webgl2`);i&&i.readPixels(0,0,1,1,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(4));let a=`map.${this.format}`,o=new K;switch(this.format){case z.PNG:o.toPNG(r,a);break;case z.JPEG:o.toJPEG(r,a,this.jpegQuality);break;case z.PDF:new ne(this.width,this.height,this.unit).generate(r,a);break;case z.SVG:new re().toSVG(r,a,this.width,this.height,this.unit,this.dpi);break}s.remove(),n.remove(),Object.defineProperty(window,"devicePixelRatio",{get:()=>t}),this.hideLoading(),e?.()})}toPixels(e){return this.unit===B.mm?96/25.4*e:96*e}showLoading(){let e=document.createElement(`div`);e.className=`qm-print-loading-overlay`,e.innerHTML=`<div class="qm-print-loading-spinner"></div><div class="qm-print-loading-text">正在生成...</div>`,document.body.appendChild(e)}hideLoading(){document.querySelector(`.qm-print-loading-overlay`)?.remove()}},ae=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(!1),[o,s]=(0,t.useState)({PageSize:V.A4,PageOrientation:H.横向,Format:z.PDF,DPI:U[300],Crosshair:!0,PrintableArea:!0}),c=(0,t.useRef)(null),l=(0,t.useRef)(null);(0,t.useEffect)(()=>{if(r)return i?(o.Crosshair&&(c.current=new W(r),c.current.create()),o.PrintableArea&&(l.current=new G(r),l.current.create()),u()):(c.current?.destroy(),c.current=null,l.current?.destroy(),l.current=null),()=>{c.current?.destroy(),l.current?.destroy()}},[r,i,o.Crosshair,o.PrintableArea,o.PageSize,o.PageOrientation]);let u=(0,t.useCallback)(()=>{if(!l.current)return;let e=o.PageSize;o.PageOrientation===H.纵向?l.current.updateArea(e[1],e[0]):l.current.updateArea(e[0],e[1])},[o.PageSize,o.PageOrientation]),d=(0,t.useCallback)(()=>{if(!r)return;let e=[...o.PageSize];o.PageOrientation===H.纵向&&(e=[e[1],e[0]]),new ie(r,e,o.DPI,o.Format,B.mm,{jpegQuality:o.JPEGQuality,northIcon:!0}).generate(()=>{a(!1)})},[r,o]),f=e=>{console.log(`打印面板:`,e),a(e)},p=Object.entries(V).map(([e,t])=>(0,n.jsx)(`option`,{value:JSON.stringify(t),children:e},e)),g=Object.entries(H).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e)),_=Object.entries(z).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e)),v=Object.entries(U).map(([e,t])=>(0,n.jsx)(`option`,{value:t,children:e},e));return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(h,{name:`打印`,position:e.position,icon:m.Print,openHandle:f,title:`点击打开打印设置面板`,children:(0,n.jsx)(n.Fragment,{})}),(0,n.jsxs)(`div`,{className:`qm-print-panel ${i?`open`:``}`,style:{position:`absolute`,top:(e.position.top??0)+34,right:e.position.right??10},children:[(0,n.jsx)(`table`,{className:`qm-print-panel-table`,children:(0,n.jsxs)(`tbody`,{children:[(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`页面尺寸`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-page-size`,value:JSON.stringify(o.PageSize),onChange:e=>{s(t=>({...t,PageSize:JSON.parse(e.target.value)})),u()},children:p})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`布局方向`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-orientation`,value:o.PageOrientation,onChange:e=>{s(t=>({...t,PageOrientation:e.target.value})),u()},children:g})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`导出格式`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-format`,value:o.Format,onChange:e=>s(t=>({...t,Format:e.target.value})),children:_})})]}),(0,n.jsxs)(`tr`,{children:[(0,n.jsx)(`td`,{children:(0,n.jsx)(`label`,{children:`DPI`})}),(0,n.jsx)(`td`,{children:(0,n.jsx)(`select`,{id:`print-dpi`,value:o.DPI,onChange:e=>s(t=>({...t,DPI:Number(e.target.value)})),children:v})})]})]})}),(0,n.jsx)(`button`,{type:`button`,className:`qm-print-export-button`,onClick:d,title:`根据设置导出地图`,children:`导 出`})]})]})});function oe(e,t){let n=e.getCenter(),r=e.getZoom(),i=e.getBearing(),a=e.getPitch();t.forEach(e=>{e.jumpTo({center:n,zoom:r,bearing:i,pitch:a})})}function se(...e){let t;t=e.length===1&&Array.isArray(e[0])?e[0]:e;let n=[];t.forEach((e,r)=>{let i=t.filter((e,t)=>t!==r);n[r]=()=>a(e,i)});function r(){t.forEach((e,t)=>{e.on(`move`,n[t])})}function i(){t.forEach((e,t)=>{e.off(`move`,n[t])})}function a(e,t){i(),oe(e,t),r()}return r(),()=>{i()}}var Z=class{options;_mapA;_mapB;_horizontal;_bounds;currentPosition=0;_swiper;_controlContainer;_clearSync;_onResize;_eventTarget;constructor(e,t,n,r={}){this.options={orientation:`vertical`,mousemove:!1,...r},this._mapA=e,this._mapB=t,this._horizontal=this.options.orientation===`horizontal`,this._eventTarget=new EventTarget,this._swiper=document.createElement(`div`),this._swiper.className=this._horizontal?`compare-swiper-horizontal`:`compare-swiper-vertical`,this._controlContainer=document.createElement(`div`),this._controlContainer.className=this._horizontal?`maplibregl-compare maplibregl-compare-horizontal`:`maplibregl-compare`,this._controlContainer.appendChild(this._swiper),this._mountContainer(n),this._bounds=this._mapB.getContainer().getBoundingClientRect();let i=this._horizontal?this._bounds.height/2:this._bounds.width/2;this._setPosition(i),this._clearSync=se(this._mapA,this._mapB),this._onResize=()=>{this._bounds=this._mapB.getContainer().getBoundingClientRect(),this.currentPosition&&this._setPosition(this.currentPosition)},this._mapB.on(`resize`,this._onResize),this.options.mousemove&&(this._mapA.getContainer().addEventListener(`mousemove`,this._onMove),this._mapB.getContainer().addEventListener(`mousemove`,this._onMove)),this._swiper.addEventListener(`mousedown`,this._onDown),this._swiper.addEventListener(`touchstart`,this._onDown)}_mountContainer(e){if(typeof e==`string`){let t=document.querySelector(e);if(!t)throw Error(`找不到容器`);t.appendChild(this._controlContainer)}else if(e instanceof HTMLElement)e.appendChild(this._controlContainer);else throw Error(`容器必须是字符串选择器或 HTML 元素`)}_setPointerEvents(e){this._controlContainer.style.pointerEvents=e,this._swiper.style.pointerEvents=e}_onDown=e=>{`touches`in e?(document.addEventListener(`touchmove`,this._onMove),document.addEventListener(`touchend`,this._onTouchEnd)):(document.addEventListener(`mousemove`,this._onMove),document.addEventListener(`mouseup`,this._onMouseUp))};_setPosition(e){let t=this._horizontal?this._bounds.height:this._bounds.width,n=Math.max(0,Math.min(e,t)),r=this._horizontal?`translate(0, ${n}px)`:`translate(${n}px, 0)`;this._controlContainer.style.transform=r,this._controlContainer.style.webkitTransform=r;let i=this._bounds.height,a,o;this._horizontal?(a=`rect(0, 999em, ${n}px, 0)`,o=`rect(${n}px, 999em, ${i}px, 0)`):(a=`rect(0, ${n}px, ${i}px, 0)`,o=`rect(0, 999em, ${i}px, ${n}px)`),this._mapA.getContainer().style.clip=a,this._mapB.getContainer().style.clip=o,this.currentPosition=n}_onMove=e=>{this.options.mousemove&&this._setPointerEvents(`none`),this._horizontal?this._setPosition(this._getY(e)):this._setPosition(this._getX(e))};_onMouseUp=()=>{document.removeEventListener(`mousemove`,this._onMove),document.removeEventListener(`mouseup`,this._onMouseUp),this._emitSlideEnd()};_onTouchEnd=()=>{document.removeEventListener(`touchmove`,this._onMove),document.removeEventListener(`touchend`,this._onTouchEnd),this._emitSlideEnd()};_emitSlideEnd(){this._eventTarget.dispatchEvent(new CustomEvent(`slideend`,{detail:{currentPosition:this.currentPosition}}))}_getX(e){let t=(`touches`in e?e.touches[0]:e).clientX-this._bounds.left;return Math.max(0,Math.min(t,this._bounds.width))}_getY(e){let t=(`touches`in e?e.touches[0]:e).clientY-this._bounds.top;return Math.max(0,Math.min(t,this._bounds.height))}setSlider(e){this._setPosition(e)}on(e,t){this._eventTarget.addEventListener(e,e=>{let n=e.detail;t(n)})}off(e,t){this._eventTarget.removeEventListener(e,t)}remove(){this._clearSync(),this._mapB.off(`resize`,this._onResize),[this._mapA,this._mapB].forEach(e=>{let t=e.getContainer();t.style.clip=``,t.removeEventListener(`mousemove`,this._onMove)}),this._swiper.removeEventListener(`mousedown`,this._onDown),this._swiper.removeEventListener(`touchstart`,this._onDown),this._controlContainer.remove()}};window.maplibregl&&(window.maplibregl.Compare=Z);var ce=(0,t.memo)(e=>{let{title:r,open:a=!1,maskClosable:o=!0,mask:s,width:c=520,footer:l,onCancel:u,destroyOnHidden:d=!1,className:f,style:p,children:m,centered:h=!1}=e,g=s?.closable===void 0?o:s.closable,[_,v]=(0,t.useState)(a);(0,t.useEffect)(()=>{if(a)v(!0),document.body.style.overflow=`hidden`;else if(document.body.style.overflow=``,d){let e=setTimeout(()=>{v(!1)},200);return()=>clearTimeout(e)}},[a,d]),(0,t.useEffect)(()=>()=>{document.body.style.overflow=``},[]);let y=(0,t.useCallback)(e=>{e.target===e.currentTarget&&g&&u?.()},[g,u]),b=(0,t.useCallback)(e=>{e.stopPropagation(),u?.()},[u]);return _?(0,i.createPortal)((0,n.jsxs)(`div`,{className:`qm-modal-wrapper ${a?`qm-modal-open`:``} ${h?`qm-modal-centered`:``}`,children:[(0,n.jsx)(`div`,{className:`qm-modal-mask ${a?`qm-modal-mask-enter`:`qm-modal-mask-leave`}`}),(0,n.jsx)(`div`,{className:`qm-modal-container`,onClick:y,children:(0,n.jsxs)(`div`,{className:`qm-modal ${f||``} ${a?`qm-modal-enter`:`qm-modal-leave`}`,style:{width:typeof c==`number`?`${c}px`:c,...p},onClick:e=>e.stopPropagation(),children:[r&&(0,n.jsxs)(`div`,{className:`qm-modal-header`,children:[(0,n.jsx)(`div`,{className:`qm-modal-title`,children:r}),(0,n.jsx)(`button`,{type:`button`,className:`qm-modal-close`,onClick:b,"aria-label":`关闭`,children:(0,n.jsx)(`span`,{className:`qm-modal-close-x`,children:`×`})})]}),(0,n.jsx)(`div`,{className:`qm-modal-body`,children:m}),l!==null&&(0,n.jsx)(`div`,{className:`qm-modal-footer`,children:l})]})})]}),document.body):null}),le=(0,t.memo)(e=>{let{map:r}=D(),[i,a]=(0,t.useState)(!1),[o,s]=(0,t.useState)(null),[c,l]=(0,t.useState)(null),u=(0,t.useCallback)(e=>{a(e)},[]);return(0,t.useEffect)(()=>{if(o&&c){let e=document.getElementById(`swipeContainer`);e&&(new Z(o,c,e,{mousemove:!1,orientation:`vertical`}),o.setCenter(r.getCenter()),o.setZoom(r.getZoom()),o.setBearing(r.getBearing()),c.setPitch(r.getPitch()))}},[o,c]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(h,{name:`卷帘对比`,position:{...e.position},icon:m.Swipe,openHandle:u,title:`点击打开卷帘对比面板,对比两期地图数据`,children:(0,n.jsx)(n.Fragment,{})}),(0,n.jsx)(ce,{title:`卷帘对比`,mask:{closable:!1},open:i,width:1e3,footer:null,onCancel:()=>a(!1),destroyOnHidden:!0,children:(0,n.jsxs)(`div`,{id:`swipeContainer`,className:`maplibregl-swipe`,children:[(0,n.jsx)(k,{mapOptions:{...r.options,id:`swipeBeforeMap`},mapLayerSettting:r.mapLayerSetting,onMapLoad:e=>s(e),className:`swipe-map-container`,children:(0,n.jsx)(L,{position:{top:10,left:10}})}),(0,n.jsx)(k,{mapOptions:{...r.options,id:`swipeAfterMap`},mapLayerSettting:r.mapLayerSetting,onMapLoad:e=>l(e),className:`swipe-map-container`,children:(0,n.jsx)(L,{position:{top:10,right:10}})})]})})]})}),Q={Point:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARxJREFUWEft1LEuREEYxfHf9jRLIRIqnUSpoOEFREUh3kFBo6LYKEj0StEp8ARUEvUmOg2NSHT07pW73XK/mZBtZto5c87/npn7dYx4dUacrwCUBkoDpYHcBiYwjTG84g2fOUMtB+AYu0PC9nGUCpEK8IyZX0IOq72DFIgUgFusBMw3cBnQfUuiAOu4ippivLqmj4g+ClDfby9i2Gjm8BTRRwFusBYxbDTLuI/oowCn2IkYNpoF9CP6KMA2ziOGjWYS7xF9FKDbfFE9fNrWSTWU9tpEg/0oQK3fwkWL8Qtmo+Epv+HAc6kawWfVfz4/JOQOqynhOQD1mXr+b2IRU3jAI65Tw3MBcnJ+PJPyBv40OOcRFoDSQGngXxr4App1HCGF2UdQAAAAAElFTkSuQmCC`,Line:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAp1JREFUWEe9l0uIjlEYx3+zsZGFsqCUe0hEiXFJ7iklxUxZMcVIE7IZFm4TJWYzLolQLKYmTKLIJYaYRolyySULpMRmFkwoC85/Oq/ejvO93zlHvWf7vc95fu/z/J//8341lHuWArOBJ8AVpa4pMf9eYE8u311gQVkAdcB5z8vWlwXgvn3G0lIWwFjgracC48oCUG63CmeBhmoAs4CJwC/gKtD7H6JtBg4C14FNwPtqU6CRueEkHGqCvyRC3JHqge3AoeyOogo8BGY6yY6aKmxJABicq94M4FEIwFdgkJPsmglengCwErgEPAem5OOLKnAfmOska7FiimU4AWwEjgBbQwHmA12eTCkQEtwIQJW4HApQC/QALwE52aScm8VAzAEeWA0MMXb8OxRgH7ATOAOst0F5Sw2FyMavE1jtVrRIA9pY04ANwOlcYCzETWAJ0AicCgVQv9S3PjuKakP+hELIxLLYYcDnUACVXLS3ABmS74RAZPdIS/oO+OdUaoFmVoqVDnYXzFw1CPn9WmAXsD8UYKBV7ABgYYVRDGmHbFvqHwNMBZ6GAqyws/oGmBDoOL5KrAIumo33ARhZ6R5fCw5bvz9nhLguEECPuRDaI8uAY8DmGAB9OOgDYo2pQEcEgAuRhX4zK1im5k5S/+9uBaTUbrMyfxhyudb3SACN2idPjOslfx9xAaR4OdxtI6DFkcn1uDadT2xNwPEQEd4D5tmNpc2Vcj4a5xzuBKqy8oJCHxgPvLZPjDbz+y4lux27VmAR8Mr6iOzYe7IWSO3606BxeQFMTkweHSaAHcABJ7LerN8L0bclBAjgmeeNHwPTE+6LDhGAeu06lTbhqOjbEgIEcNLu6nx4G7At4b7okEyEEqBW50+g3dyifzGlnD8S4H8a/N0aLAAAAABJRU5ErkJggg==`,Rectangle:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAASxJREFUWEft16FKBWEQBeDvvodBRCw+gFWbgtVkEkWLil6wGbSLgiZBxKDFajB6owgGwSQ3GMTmMyhz3YVluRdW+BcM/4FlYXf2zPnPzMJMxy92cYx7POGgeJ76dooFfOEGZx1sIV5UsYKrxNmH5emGgEfMJE7WmC4EvGK69sUbPhuzNAscR1xV9EJA1D56oIo59JrxNo5axnUt+jAEBMr6vGO/aJDGzH8InMU5pjDos1JAcHwXp47Tt4kHhJBB7iwgO5AdyA5kB7ID2YHsQHbg3ziwXgyLMaYdYa+loXAztqGCe7vcjG6xVEvYxUliEYu4q3EOVrOYhuv4QD+xgDFM1jj7owQkzj2S7jkEDCvBKi4Tq4gyR64qNsq/YA2xOgUuWtyMQsQ8JrCDlx+OVWdvFenv8gAAAABJRU5ErkJggg==`,Polygon:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAxVJREFUWEe1133InnMUB/DPKCQS87ZQtrJ5yT8LUShaJKHWzMSaWqkt07LyEjEvQykrL2WRFautoZBt3hoRhkRqjLyUKMuyGLHWan3X73q6unff7t+953Lq6um5nt855/s7z/ec870mqLfDcBeuwd94E7fUu/c/OWGEAIuxvOf8Ejw6Qox9jo4C4HtM6ZPsM/Q+/TAdWfx/xtbmwCgANuP0ytt+hE3IzzznYW3L9znMy++jAHgIt/cAeAw7cApOKwAPrAR5L5bWAjgKH+DUEjzVGETCizEV03AGzsTxfUC9jstqATyM2/Aqrqq8YXPsEPzTxyfkXVID4AK8iwNKmbeMCCDHV+DGlt83mImvagC8XG79CG7dj+SNy7VYiYNxOdbXkHA+nsFfCA92jQNAXH/EyTgRvwwDkJJ/WYi0AE+NM3ncPywteQ4+HQbgAdyJzzG9g+QJ8VL534fIIfTAOXASvsNBuLS0XBcYHsdNGKvoIBKuKUvnRVzdReYS4w48iPtwz6AK5MYZErFUIrO7K7uhdMLTTVv2q0DIcRaWlfXbVfLEuQRv4DVc0a7AE6U38y5t8jsmdpm5xMpYTmeNETsVWIgne5KFLDf/DwCOxm/4FZOaCvTb8+mALJ7dHYPIpoyayjQ8BttSgZDshJ5E28vk6zj/3nA/YHIZcHt3QXb6op5MUTghYteWcf4KzseFeD8ADkWmXhia/d1Y9sCzHSK4srRgQMS2YX67DQ8vxIj4zKT6s4D6uCMQ7yGrvW0bBk3C5vAnpVQ79xPE2ZhRej66cB8bBCD67h0chzEBWQkiJU5rR5pdNMRn/X8JknyAZCfE8gHS+03Qjn0EZpUnibPEGguhox834n6cW/7wBxYPU0R3I+o1lnlxLL4uUzM6Lze8vnAlur+xb/EW1mFD633Uc6RYtEbefzEMQHxX4bqeUiZ4BlWWVWOZbm+XNssWrbIaAOHA3AHRUoUsl5Q4eu/fqqytQzUAVmNOn8DhRRTOT6MmbZ+vAZDbpwptewGzx5O48a0BkLNLizTPAomYeL7M9HFj2AMTmY45mDBG5AAAAABJRU5ErkJggg==`,Trash:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA71JREFUWEfNl2nIVlUQx3+vgoRrai6lpaaiJbgU5QeXygVREVdUxF0RTa0oF3BBW6AFxRUXXHLrg5qgIgruS35QM1ooI3LFXdyKKAiq83+ZI+Pj83jPKynOpzlzZ87935n/mTm3iHTZB7ye6L4feCPFtyjFyXz+LYGvXJP2TnLKAfB+BpAZ9jxp7ySnPABmFgAh+wMBGAoMyfiyWH/V936S6rcaWKUMPA1cLGF9/w/3G0DVWILPAWXhUcoqYFhJOPBQwD2WACoAv9nn1gSuuE+vayxfAhzJSUkvoDKwIsdeA7hstmeAS/55vgxMAz40p4+A6S4gHrMzwPMBjG9OUR8mdrsY7aU9JW2BQ1kAxgV2LjCnecA7LmAqIFCSMsDfpj8B/Gn6FOBjFzMXeNvWLYBvswAMCl+3xpxWAiNcwGTgE1uXdS9V6nWsJO8Cc1yMSjLc1g2Ak1kAugFbzWkD0M8FvAfMsnVF4HfTfS8ZA4gjUdYDfW2Ry6m8A6MNcNACdgBd3GZKpVIqqRJSe9P0esAp03M5sD0QtrM9Kw/8kZWBpsB35vQVIEBRxgILbSF2XzX9ReBH0/sD+uooIl1r4J9A7tL+5dLznYLnQoc6a44C0twFjQqte6mta7kW/hJw3Ow9gC0uRqRrBtwO2XsyBUClwPxb5qi01ndBIlM853UCuc7Zs1aAsiXpBOx0MSKdjuz5EPtsCgD5KF3KzjWgugsaDGiKSQQs1r19SPNus7/mOCSTylQN+DmU5oVUACKX0vUXUM4AKXYA8IVt0iisfzG9K7DN9FeBY6aXMtKpT8imZ3dJoVlwOnQztV2JgKh+Eh2nSLAmYf2T2fsAG00XiX8w3ZdTd8p2qQAiceRfG7hgger3m0wXsb43fWAoyVrTGwK/mi6iqvYS9ZbuqQB061EtJaqb6ifxTepl4BuzjwSWmS6ixZc2Do3shNlVOgG9SwqVYLND62uqhqLGImkZmtRR08eHxjTf9KeA66a/4nx0fEenAhDTxXiJGL7X9I7uiKm5HDb7ROAz0323U833mH02MCEVgKbgW+bsG4t+NiIYXT4PmI9G9gemq9vpGEtUc2VTouv8PbfpQiXQZvEeoOm4ziH/OkxEHSs1nEhOnRhlQ8fS/xF5cipLcZDd2a4QAI1UpUzyJrA4N3WJa03GReabOyWLzYUA6A6w3AJ1B4j1TXzvHbdJwKe2ys3kfQH0Br60wKwfkSxQ8Uelp+NDZgk6ALuydi7hc52gOC8yAei2o5Ga+juehaX4JySf03+JLrAhSDUYWAAAAABJRU5ErkJggg==`,Reset:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAuRJREFUWEfVl1moTWEUx3+31M1U5JYxxQuJa7xvEg+UMpOkDFcevChEGUMi8/gkD24kSaIkRJEhM1cyJA83JMKD5AUPvv9tfVpOe5999j3XkVX7tPfZa/h/3/p/a61dxT+Wqn8cn/8SwAhgHDAW6Ap0A9oDH+y6C5wHrgNfsnY4zw6MBhYD07Kc2vu3wD5gP/A9zaYUAG3NycIUJ2+A98AA24lCtYfAVuBkkn0WgB7AYdvyaH8BOAe8ABqBT85xf2CgXesLAq4EthWCKAagD3AGqDWjp8B24EiJKRBPpD/Y6eu/S96+GIBjwGwXfCbwrMTgXm15SM0O98cw4FF8TgMgsok8ktfA+BYGj3GWArvt4SowphDAhsDwz8ABoNqC9TWlRcDBFqy80OQKoJMk2Rh+FLO5EOkmEmY60AY4YYriwNRWCC4XQwGdiCjiWJMAiBgX3QuRbK49a6s6hDQsAI6nHaUcAP1i64GGyAEdtfnmSKnoEgj4ErjtwLwDeuYIlqQ6yxaidw1AfQQwCLgGdHJWX4GO7vl33soAoRrxxOzvh3pS50/BWmBTgnOxVpXMp6kMDHwL9aEdoAra2wPQ6i8Dw837j1DDVwcO7CwnWoLtPUANTf2hurAOzLPcnALWAc9bObjcaeW97NjXJBWiOcDRvxBYLrsDIrNEXKjNakatjWNCSPFZX2MqDWCFNShhUHneW0kAKvF3XHdUZWysJIBloa7ssu0XyWfovlIAaoCPjlCjbGbMBKDuVQe8Clt3ugxGqurF+rIFWBN9Ze2A5sBDpqwxbDNwKweQPcASp38zFLuR3j4LgAZNjWJRfhoIHaUHRYBMsRY/xOk0AWrBf0gWAClr0NQ0o6nIixgtIBpKdamLTgrj1uQwN8ZhJuo3d74kwKUAiHarAOUvj2jV6qICkCh5AMhBv7D1E+0Sk9PkBqAvJI14ApEqeQF4R/okU447u+uxDTH+W6HojpUDIE8qUnV/AUEbfiHgdnTrAAAAAElFTkSuQmCC`},$=[{id:`point`,title:`绘制点:点击地图绘制点要素`,mode:`draw_point`,icon:Q.Point},{id:`line`,title:`绘制线:点击地图开始,双击结束绘制线要素`,mode:`draw_line_string`,icon:Q.Line},{id:`polygon`,title:`绘制面:点击地图开始,双击结束绘制面要素`,mode:`draw_polygon`,icon:Q.Polygon},{id:`reset`,title:`清除:删除所有绘制的要素`,mode:`simple_select`,icon:Q.Reset}],ue=[{id:`gl-draw-line`,type:`line`,filter:[`all`,[`==`,`$type`,`LineString`]],layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":`#D20C0C`,"line-dasharray":[.2,2],"line-width":2}},{id:`gl-draw-polygon-fill`,type:`fill`,filter:[`all`,[`==`,`$type`,`Polygon`]],paint:{"fill-color":`#D20C0C`,"fill-outline-color":`#D20C0C`,"fill-opacity":.3}},{id:`gl-draw-polygon-midpoint`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`midpoint`]],paint:{"circle-radius":5,"circle-color":`#fbb03b`}},{id:`gl-draw-polygon-stroke-active`,type:`line`,filter:[`all`,[`==`,`$type`,`Polygon`]],layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":`#D20C0C`,"line-dasharray":[.3,3],"line-width":3}},{id:`gl-draw-polygon-and-line-vertex-halo-active`,type:`circle`,filter:[`all`,[`==`,`meta`,`vertex`],[`==`,`$type`,`Point`]],paint:{"circle-radius":5,"circle-color":`#FFF`}},{id:`gl-draw-polygon-and-line-vertex-active`,type:`circle`,filter:[`all`,[`==`,`meta`,`vertex`],[`==`,`$type`,`Point`]],paint:{"circle-radius":3,"circle-color":`#D20C0C`}},{id:`gl-draw-point-point-stroke-active`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`true`]],paint:{"circle-radius":8,"circle-color":`#FFF`}},{id:`gl-draw-point-active`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`true`]],paint:{"circle-radius":6,"circle-color":`#D20C0C`}},{id:`gl-draw-point-point-stroke-inactive`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`false`]],paint:{"circle-radius":8,"circle-color":`#FFF`}},{id:`gl-draw-point-inactive`,type:`circle`,filter:[`all`,[`==`,`$type`,`Point`],[`==`,`meta`,`feature`],[`==`,`active`,`false`]],paint:{"circle-radius":6,"circle-color":`#D20C0C`}}],de=(0,t.memo)(e=>{let{position:r,onDraw:i,initFeature:o,modes:s}=e,c=s?$.filter(e=>s.includes(e.mode)||e.id===`reset`):$,{map:l}=D(),u=(0,t.useRef)(null),d=e=>{if(l&&e.features&&u.current){let t=b(e.features[0]);t&&l.fitBounds(t,{maxZoom:16});let n=u.current.add(e);u.current.changeMode(`simple_select`,{featureIds:n})}},f=(e,t)=>{if(!u.current||!l)return;t===`reset`&&u.current.deleteAll(),u.current.changeMode(e);let n=l.getCanvas();e===`simple_select`?n.style.cursor=``:n.style.cursor=`crosshair`},p=()=>{if(!u.current)return;let e=u.current.getAll();e.features&&e.features.length>0&&i({data:e})};return(0,t.useEffect)(()=>(l&&!u.current&&(u.current=new a.default({displayControlsDefault:!1,styles:ue,defaultMode:`simple_select`}),l.addControl(u.current,`bottom-left`),l.on(`draw.create`,p),l.on(`draw.delete`,p),l.on(`draw.update`,p),l.on(`draw.modechange`,e=>{let t=l.getCanvas();e.mode===`simple_select`?t.style.cursor=``:t.style.cursor=`crosshair`}),o&&d(o)),()=>{}),[]),(0,n.jsx)(`div`,{className:`mapboxgl-draw`,style:{...r},children:(0,n.jsx)(`div`,{className:`mapboxgl-draw-bar`,children:(0,n.jsx)(`div`,{children:c.map(e=>(0,n.jsx)(`div`,{title:e.title,className:`mapboxgl-draw-bar-button`,style:{backgroundImage:`url(${e.icon})`},onClick:()=>f(e.mode,e.id)},e.id))})})})});e.BaseLayer=x,e.BaseWidget=h,e.Draw=de,e.LayerGroupWrapper=C,e.LayerList=L,e.LayerWrapper=S,e.Legend=R,e.MapContext=E,e.MapWidget=k,e.MapWrapper=T,e.Print=ae,e.Swipe=le,e.useMap=D});
|
package/dist/utils.d.ts
CHANGED
|
@@ -25,12 +25,23 @@ declare const throttle: <T extends object>(func: Function, delay: number) => (ar
|
|
|
25
25
|
* @param {*} tree
|
|
26
26
|
*/
|
|
27
27
|
declare const transTreeToArr: (list: any[], tree: any) => void;
|
|
28
|
+
/**
|
|
29
|
+
* 获取要素的边界框
|
|
30
|
+
* @param feature - GeoJSON 要素
|
|
31
|
+
* @returns 经纬度边界对象
|
|
32
|
+
*/
|
|
28
33
|
declare const getFeatureBoundingBox: (feature: any) => LngLatBounds;
|
|
34
|
+
/**
|
|
35
|
+
* 根据指定字段去重数组
|
|
36
|
+
* @param arr - 需要去重的数组
|
|
37
|
+
* @param uniId - 用于去重的字段名
|
|
38
|
+
* @returns 去重后的数组
|
|
39
|
+
*/
|
|
29
40
|
declare const unique: (arr: any[], uniId: string) => any[];
|
|
30
41
|
/**
|
|
31
|
-
* 将
|
|
32
|
-
*
|
|
33
|
-
* @returns
|
|
42
|
+
* 将 MultiPolygon 类型几何拆分为多个独立 Polygon,并保留原有 Polygon
|
|
43
|
+
* @param feats - GeoJSON 要素数组
|
|
44
|
+
* @returns 拆分后的 Polygon 要素数组
|
|
34
45
|
*/
|
|
35
46
|
declare const modifyMultiPolygon: (feats: any[]) => any[];
|
|
36
47
|
export { shollawEqual, debounce, throttle, transTreeToArr, getFeatureBoundingBox, unique, modifyMultiPolygon, };
|
|
@@ -2,15 +2,27 @@ import { MapOptions } from 'maplibre-gl';
|
|
|
2
2
|
import { default as React } from 'react';
|
|
3
3
|
import { default as MapWrapper } from '../../maplibregl/MapWrapper';
|
|
4
4
|
import { TMapLayerSettting } from '../../maplibregl/typings/TLayerOptions';
|
|
5
|
+
/**
|
|
6
|
+
* 地图组件属性
|
|
7
|
+
*/
|
|
5
8
|
export interface TMapProps {
|
|
9
|
+
/** 地图配置选项 */
|
|
6
10
|
mapOptions: MapOptions & {
|
|
7
11
|
id: string;
|
|
8
12
|
};
|
|
13
|
+
/** 图层配置 */
|
|
9
14
|
mapLayerSettting: TMapLayerSettting;
|
|
15
|
+
/** 子组件 */
|
|
10
16
|
children?: React.ReactNode;
|
|
17
|
+
/** 地图加载完成回调 */
|
|
11
18
|
onMapLoad?: (map: MapWrapper) => void;
|
|
19
|
+
/** 自定义类名 */
|
|
12
20
|
className?: string;
|
|
13
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* 地图组件
|
|
24
|
+
* 封装 MapWrapper,提供地图初始化和图层加载功能
|
|
25
|
+
*/
|
|
14
26
|
declare function MapWidget(props: TMapProps): import("react/jsx-runtime").JSX.Element;
|
|
15
27
|
declare const _default: React.MemoExoticComponent<typeof MapWidget>;
|
|
16
28
|
export default _default;
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { Popup, LngLatLike, PopupOptions } from 'maplibre-gl';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* 弹窗事件类型
|
|
5
|
+
*/
|
|
3
6
|
export type PopupEvent = {
|
|
4
7
|
type: 'open' | 'close';
|
|
5
8
|
target: Popup;
|
|
6
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* 弹窗包装器属性
|
|
12
|
+
*/
|
|
7
13
|
export type TPopupWrapper = PopupOptions & {
|
|
14
|
+
/** 子元素 */
|
|
8
15
|
children: ReactNode;
|
|
16
|
+
/** 经纬度坐标 */
|
|
9
17
|
lngLat: LngLatLike;
|
|
18
|
+
/** 是否启用拖拽 */
|
|
10
19
|
enableDrag?: boolean;
|
|
20
|
+
/** 弹窗标题 */
|
|
11
21
|
title: string;
|
|
22
|
+
/** 打开回调 */
|
|
12
23
|
onOpen?: (e: PopupEvent) => void;
|
|
24
|
+
/** 关闭回调 */
|
|
13
25
|
onClose?: (e: PopupEvent) => void;
|
|
14
26
|
};
|
|
15
27
|
declare const _default: import('react').MemoExoticComponent<(props: TPopupWrapper) => import('react').ReactPortal>;
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { Map } from 'maplibre-gl';
|
|
2
|
+
/**
|
|
3
|
+
* 十字线管理器
|
|
4
|
+
* 在地图中心显示十字参考线,用于打印定位
|
|
5
|
+
*/
|
|
2
6
|
export default class CrosshairManager {
|
|
3
7
|
private map;
|
|
4
8
|
private svgCanvas;
|
|
5
9
|
constructor(map: Map | null);
|
|
10
|
+
/**
|
|
11
|
+
* 创建十字线
|
|
12
|
+
* 在地图中心绘制水平和垂直虚线
|
|
13
|
+
*/
|
|
6
14
|
create(): void;
|
|
15
|
+
/**
|
|
16
|
+
* 销毁十字线
|
|
17
|
+
* 移除 SVG 元素并清理引用
|
|
18
|
+
*/
|
|
7
19
|
destroy(): void;
|
|
8
20
|
}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图片导出器
|
|
3
|
+
* 将 Canvas 内容导出为 PNG 或 JPEG 格式
|
|
4
|
+
*/
|
|
1
5
|
export default class ImageExporter {
|
|
6
|
+
/**
|
|
7
|
+
* 导出为 PNG 格式
|
|
8
|
+
* @param canvas - 画布元素
|
|
9
|
+
* @param fileName - 文件名
|
|
10
|
+
*/
|
|
2
11
|
toPNG(canvas: HTMLCanvasElement, fileName: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* 导出为 JPEG 格式
|
|
14
|
+
* 注意:JPEG 不支持透明,会添加白色背景
|
|
15
|
+
* @param canvas - 画布元素
|
|
16
|
+
* @param fileName - 文件名
|
|
17
|
+
* @param quality - 图片质量(0-1,默认 0.85)
|
|
18
|
+
*/
|
|
3
19
|
toJPEG(canvas: HTMLCanvasElement, fileName: string, quality?: number): void;
|
|
4
20
|
}
|
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
import { Unit } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* PDF 生成器
|
|
4
|
+
* 将 Canvas 内容导出为 PDF 格式
|
|
5
|
+
*/
|
|
2
6
|
export default class PDFGenerator {
|
|
3
7
|
private width;
|
|
4
8
|
private height;
|
|
5
9
|
private unit;
|
|
10
|
+
/**
|
|
11
|
+
* 创建 PDF 生成器实例
|
|
12
|
+
* @param width - 页面宽度
|
|
13
|
+
* @param height - 页面高度
|
|
14
|
+
* @param unit - 单位
|
|
15
|
+
*/
|
|
6
16
|
constructor(width: number, height: number, unit: Unit);
|
|
17
|
+
/**
|
|
18
|
+
* 生成并下载 PDF 文件
|
|
19
|
+
* @param canvas - 画布元素
|
|
20
|
+
* @param fileName - 文件名
|
|
21
|
+
*/
|
|
7
22
|
generate(canvas: HTMLCanvasElement, fileName: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* 构建 PDF 内容
|
|
25
|
+
* @param canvas - 画布元素
|
|
26
|
+
* @returns PDF 内容的 ArrayBuffer
|
|
27
|
+
*/
|
|
8
28
|
private buildPDF;
|
|
29
|
+
/**
|
|
30
|
+
* 创建 PDF 文档结构
|
|
31
|
+
* 手动构建 PDF 文件内容
|
|
32
|
+
* @param widthPt - 页面宽度(点)
|
|
33
|
+
* @param heightPt - 页面高度(点)
|
|
34
|
+
* @param canvasPixelWidth - 画布像素宽度
|
|
35
|
+
* @param canvasPixelHeight - 画布像素高度
|
|
36
|
+
* @param imageData - 图片数据
|
|
37
|
+
* @returns PDF 内容的 ArrayBuffer
|
|
38
|
+
*/
|
|
9
39
|
private createPDFStructure;
|
|
10
40
|
}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import { Map } from 'maplibre-gl';
|
|
2
2
|
import { Unit } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* 打印区域管理器
|
|
5
|
+
* 在地图上显示可打印区域遮罩,帮助用户预览打印范围
|
|
6
|
+
*/
|
|
3
7
|
export default class PrintableAreaManager {
|
|
4
8
|
private map;
|
|
5
9
|
private svgCanvas;
|
|
6
10
|
private path;
|
|
7
11
|
constructor(map: Map | null);
|
|
12
|
+
/**
|
|
13
|
+
* 更新打印区域大小
|
|
14
|
+
* @param width - 纸张宽度
|
|
15
|
+
* @param height - 纸张高度
|
|
16
|
+
* @param unit - 单位(默认为毫米)
|
|
17
|
+
*/
|
|
8
18
|
updateArea(width: number, height: number, unit?: Unit): void;
|
|
19
|
+
/**
|
|
20
|
+
* 创建打印区域遮罩
|
|
21
|
+
*/
|
|
9
22
|
create(): void;
|
|
23
|
+
/**
|
|
24
|
+
* 销毁打印区域遮罩
|
|
25
|
+
*/
|
|
10
26
|
destroy(): void;
|
|
27
|
+
/**
|
|
28
|
+
* 将长度单位转换为像素
|
|
29
|
+
* @param length - 长度值
|
|
30
|
+
* @param unit - 单位
|
|
31
|
+
* @returns 像素值
|
|
32
|
+
*/
|
|
11
33
|
private toPixels;
|
|
12
34
|
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG 导出器
|
|
3
|
+
* 将 Canvas 内容导出为 SVG 格式(嵌入 PNG 图片)
|
|
4
|
+
*/
|
|
1
5
|
export default class SVGExporter {
|
|
6
|
+
/**
|
|
7
|
+
* 导出为 SVG 格式
|
|
8
|
+
* @param canvas - 画布元素
|
|
9
|
+
* @param fileName - 文件名
|
|
10
|
+
* @param width - 页面宽度
|
|
11
|
+
* @param height - 页面高度
|
|
12
|
+
* @param unit - 单位
|
|
13
|
+
* @param dpi - DPI 分辨率
|
|
14
|
+
*/
|
|
2
15
|
toSVG(canvas: HTMLCanvasElement, fileName: string, width: number, height: number, unit: string, dpi: number): void;
|
|
3
16
|
}
|