vue-openlayers-plugin 1.0.72 → 1.0.74

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.
Files changed (32) hide show
  1. package/lib/{index-034c9e0d.mjs → index-e0d64ecc.mjs} +856 -387
  2. package/lib/{index.es-6551e4c0.mjs → index.es-4f33fe12.mjs} +1 -1
  3. package/lib/index.esm.js +1 -1
  4. package/lib/index.umd.js +856 -386
  5. package/lib/style.css +114 -0
  6. package/package.json +1 -1
  7. package/types/src/components/CustomOpenlayer/components/OlBaseLayerSwitcher.vue.d.ts +19 -0
  8. package/types/src/components/CustomOpenlayer/components/OlBaseLayerSwitcher.vue.d.ts.map +1 -0
  9. package/types/src/components/CustomOpenlayer/components/dialogs/LayerPanel.vue.d.ts +46 -164
  10. package/types/src/components/CustomOpenlayer/components/dialogs/LayerPanel.vue.d.ts.map +1 -1
  11. package/types/src/components/CustomOpenlayer/types/index.d.ts +24 -3
  12. package/types/src/components/CustomOpenlayer/types/index.d.ts.map +1 -1
  13. package/types/src/components/CustomOpenlayer/utils/LayerManager.d.ts.map +1 -1
  14. package/types/src/components/CustomOpenlayer/utils/LayerTreeManager.d.ts.map +1 -1
  15. package/types/src/components/CustomOpenlayer/utils/coordinateTransform.d.ts +28 -0
  16. package/types/src/components/CustomOpenlayer/utils/coordinateTransform.d.ts.map +1 -0
  17. package/types/src/components/CustomOpenlayer/utils/index.d.ts +1 -0
  18. package/types/src/components/CustomOpenlayer/utils/index.d.ts.map +1 -1
  19. package/types/src/components/CustomOpenlayer/utils/layerManager.d.ts +13 -0
  20. package/types/src/components/CustomOpenlayer/utils/layers/BaseLayer.d.ts +5 -0
  21. package/types/src/components/CustomOpenlayer/utils/layers/BaseLayer.d.ts.map +1 -1
  22. package/types/src/components/CustomOpenlayer/utils/layers/GMLLayerHandler.d.ts.map +1 -1
  23. package/types/src/components/CustomOpenlayer/utils/layers/GeoJSONLayerHandler.d.ts.map +1 -1
  24. package/types/src/components/CustomOpenlayer/utils/layers/KMLLayerHandler.d.ts.map +1 -1
  25. package/types/src/components/CustomOpenlayer/utils/layers/TiandituLayerHandler.d.ts.map +1 -1
  26. package/types/src/components/CustomOpenlayer/utils/layers/TileLayerHandler.d.ts.map +1 -1
  27. package/types/src/components/CustomOpenlayer/utils/layers/VectorTileLayerHandler.d.ts.map +1 -1
  28. package/types/src/components/CustomOpenlayer/utils/layers/WKTLayerHandler.d.ts.map +1 -1
  29. package/types/src/components/CustomOpenlayer/utils/layers/WMSLayerHandler.d.ts.map +1 -1
  30. package/types/src/components/CustomOpenlayer/utils/layers/WMTSLayerHandler.d.ts.map +1 -1
  31. package/types/src/components/CustomOpenlayer/utils/mapManager.d.ts.map +1 -1
  32. package/types/tsconfig.tsbuildinfo +1 -1
@@ -1561,7 +1561,7 @@ const __default__$5 = defineComponent({
1561
1561
  name: "ElIcon",
1562
1562
  inheritAttrs: false
1563
1563
  });
1564
- const _sfc_main$y = /* @__PURE__ */ defineComponent({
1564
+ const _sfc_main$z = /* @__PURE__ */ defineComponent({
1565
1565
  ...__default__$5,
1566
1566
  props: iconProps,
1567
1567
  setup(__props) {
@@ -1586,7 +1586,7 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
1586
1586
  };
1587
1587
  }
1588
1588
  });
1589
- var Icon$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "icon.vue"]]);
1589
+ var Icon$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$z, [["__file", "icon.vue"]]);
1590
1590
  const ElIcon = withInstall(Icon$4);
1591
1591
  /*! Element Plus Icons Vue v2.3.2 */
1592
1592
  var _sfc_main2 = /* @__PURE__ */ defineComponent({
@@ -2863,7 +2863,7 @@ const __default__$4 = defineComponent({
2863
2863
  name: COMPONENT_NAME,
2864
2864
  inheritAttrs: false
2865
2865
  });
2866
- const _sfc_main$x = /* @__PURE__ */ defineComponent({
2866
+ const _sfc_main$y = /* @__PURE__ */ defineComponent({
2867
2867
  ...__default__$4,
2868
2868
  props: inputProps,
2869
2869
  emits: inputEmits,
@@ -3274,7 +3274,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
3274
3274
  };
3275
3275
  }
3276
3276
  });
3277
- var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["__file", "input.vue"]]);
3277
+ var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "input.vue"]]);
3278
3278
  const ElInput = withInstall(Input);
3279
3279
  const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped";
3280
3280
  const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released";
@@ -3469,7 +3469,7 @@ const useEscapeKeydown = (handler) => {
3469
3469
  }
3470
3470
  });
3471
3471
  };
3472
- const _sfc_main$w = defineComponent({
3472
+ const _sfc_main$x = defineComponent({
3473
3473
  name: "ElFocusTrap",
3474
3474
  inheritAttrs: false,
3475
3475
  props: {
@@ -3714,7 +3714,7 @@ const _sfc_main$w = defineComponent({
3714
3714
  function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
3715
3715
  return renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
3716
3716
  }
3717
- var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["render", _sfc_render$1], ["__file", "focus-trap.vue"]]);
3717
+ var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["render", _sfc_render$1], ["__file", "focus-trap.vue"]]);
3718
3718
  const badgeProps = buildProps({
3719
3719
  value: {
3720
3720
  type: [String, Number],
@@ -3750,7 +3750,7 @@ const badgeProps = buildProps({
3750
3750
  const __default__$3 = defineComponent({
3751
3751
  name: "ElBadge"
3752
3752
  });
3753
- const _sfc_main$v = /* @__PURE__ */ defineComponent({
3753
+ const _sfc_main$w = /* @__PURE__ */ defineComponent({
3754
3754
  ...__default__$3,
3755
3755
  props: badgeProps,
3756
3756
  setup(__props, { expose }) {
@@ -3812,7 +3812,7 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
3812
3812
  };
3813
3813
  }
3814
3814
  });
3815
- var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "badge.vue"]]);
3815
+ var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["__file", "badge.vue"]]);
3816
3816
  const ElBadge = withInstall(Badge);
3817
3817
  const buttonGroupContextKey = Symbol("buttonGroupContextKey");
3818
3818
  const useDeprecated = ({ from, replacement, scope, version: version2, ref: ref2, type = "API" }, condition) => {
@@ -4907,7 +4907,7 @@ function useButtonCustomStyle(props) {
4907
4907
  const __default__$2 = defineComponent({
4908
4908
  name: "ElButton"
4909
4909
  });
4910
- const _sfc_main$u = /* @__PURE__ */ defineComponent({
4910
+ const _sfc_main$v = /* @__PURE__ */ defineComponent({
4911
4911
  ...__default__$2,
4912
4912
  props: buttonProps,
4913
4913
  emits: buttonEmits,
@@ -4985,7 +4985,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
4985
4985
  };
4986
4986
  }
4987
4987
  });
4988
- var Button$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "button.vue"]]);
4988
+ var Button$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "button.vue"]]);
4989
4989
  const buttonGroupProps = {
4990
4990
  size: buttonProps.size,
4991
4991
  type: buttonProps.type
@@ -4993,7 +4993,7 @@ const buttonGroupProps = {
4993
4993
  const __default__$1 = defineComponent({
4994
4994
  name: "ElButtonGroup"
4995
4995
  });
4996
- const _sfc_main$t = /* @__PURE__ */ defineComponent({
4996
+ const _sfc_main$u = /* @__PURE__ */ defineComponent({
4997
4997
  ...__default__$1,
4998
4998
  props: buttonGroupProps,
4999
4999
  setup(__props) {
@@ -5012,7 +5012,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
5012
5012
  };
5013
5013
  }
5014
5014
  });
5015
- var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "button-group.vue"]]);
5015
+ var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "button-group.vue"]]);
5016
5016
  const ElButton = withInstall(Button$2, {
5017
5017
  ButtonGroup
5018
5018
  });
@@ -5459,7 +5459,7 @@ const getOffsetOrSpace = (id, offset, placement) => {
5459
5459
  const __default__ = defineComponent({
5460
5460
  name: "ElMessage"
5461
5461
  });
5462
- const _sfc_main$s = /* @__PURE__ */ defineComponent({
5462
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
5463
5463
  ...__default__,
5464
5464
  props: messageProps,
5465
5465
  emits: messageEmits,
@@ -5613,7 +5613,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
5613
5613
  };
5614
5614
  }
5615
5615
  });
5616
- var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["__file", "message.vue"]]);
5616
+ var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__file", "message.vue"]]);
5617
5617
  let seed = 1;
5618
5618
  const normalizeAppendTo = (normalized) => {
5619
5619
  const appendTo = normalized.appendTo;
@@ -5808,7 +5808,7 @@ const TrapFocus = {
5808
5808
  }
5809
5809
  }
5810
5810
  };
5811
- const _sfc_main$r = defineComponent({
5811
+ const _sfc_main$s = defineComponent({
5812
5812
  name: "ElMessageBox",
5813
5813
  directives: {
5814
5814
  TrapFocus
@@ -6280,7 +6280,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
6280
6280
  _: 3
6281
6281
  }, 8, ["onAfterLeave"]);
6282
6282
  }
6283
- var MessageBoxConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["render", _sfc_render], ["__file", "index.vue"]]);
6283
+ var MessageBoxConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["render", _sfc_render], ["__file", "index.vue"]]);
6284
6284
  const messageInstance = /* @__PURE__ */ new Map();
6285
6285
  const getAppendToElement = (props) => {
6286
6286
  let appendTo = document.body;
@@ -81485,6 +81485,24 @@ let BaseLayer$2 = class BaseLayer2 {
81485
81485
  this.config.opacity = this.config.opacity / 100;
81486
81486
  }
81487
81487
  }
81488
+ /**
81489
+ * 注册自定义投影
81490
+ * @returns 注册的投影代码,如果没有注册则返回 undefined
81491
+ */
81492
+ registerCustomProjection() {
81493
+ const projectionCode = this.config.projection;
81494
+ const projectionDefinition = this.config.projectionDefinition;
81495
+ if (projectionCode && projectionDefinition) {
81496
+ try {
81497
+ proj4$1.defs(projectionCode, projectionDefinition);
81498
+ register$3(proj4$1);
81499
+ return projectionCode;
81500
+ } catch (error2) {
81501
+ console.error(`Failed to register projection ${projectionCode}:`, error2);
81502
+ }
81503
+ }
81504
+ return void 0;
81505
+ }
81488
81506
  /**
81489
81507
  * 获取图层实例(同步方法,用于向后兼容)
81490
81508
  */
@@ -81942,6 +81960,7 @@ class TileLayerHandler extends BaseLayer$2 {
81942
81960
  * 创建瓦片数据源
81943
81961
  */
81944
81962
  createTileSource() {
81963
+ this.registerCustomProjection();
81945
81964
  let sourceType = this.getSourceTypeFromLayerType();
81946
81965
  sourceType = sourceType || "xyz";
81947
81966
  switch (sourceType.toLowerCase()) {
@@ -82060,7 +82079,8 @@ class WMSLayerHandler extends BaseLayer$2 {
82060
82079
  * 创建WMS数据源
82061
82080
  */
82062
82081
  createWMSSource() {
82063
- return new ImageWMS$1({
82082
+ this.registerCustomProjection();
82083
+ const options = {
82064
82084
  url: this.config.url,
82065
82085
  params: {
82066
82086
  "LAYERS": this.config.wmsLayers || "",
@@ -82070,7 +82090,11 @@ class WMSLayerHandler extends BaseLayer$2 {
82070
82090
  },
82071
82091
  ratio: 1,
82072
82092
  crossOrigin: "anonymous"
82073
- });
82093
+ };
82094
+ if (this.config.projection) {
82095
+ options.projection = this.config.projection;
82096
+ }
82097
+ return new ImageWMS$1(options);
82074
82098
  }
82075
82099
  /**
82076
82100
  * 更新WMS参数
@@ -82355,13 +82379,17 @@ class WMTSLayerHandler extends BaseLayer$2 {
82355
82379
  * 创建WMTS数据源
82356
82380
  */
82357
82381
  createWMTSSource() {
82358
- if (this.config.url && !this.capabilities) {
82359
- throw new Error("WMTS capabilities must be loaded first. Use loadCapabilities() method.");
82382
+ const wmtsConfig = this.config.wmtsConfig || {};
82383
+ const url = wmtsConfig.url || this.config.url;
82384
+ if (!url) {
82385
+ throw new Error("WMTS URL is required");
82360
82386
  }
82387
+ if (this.config.url && !this.capabilities && !wmtsConfig.resolutions)
82388
+ ;
82361
82389
  if (this.capabilities) {
82362
82390
  const options = optionsFromCapabilities(this.capabilities, {
82363
- layer: this.config.wmtsLayer || "",
82364
- matrixSet: this.config.wmtsMatrixSet || "EPSG:4326"
82391
+ layer: wmtsConfig.layer || this.config.layerName || "",
82392
+ matrixSet: wmtsConfig.matrixSet || this.config.matrixSet || "EPSG:4326"
82365
82393
  });
82366
82394
  if (!options) {
82367
82395
  throw new Error("Failed to create WMTS options from capabilities");
@@ -82377,26 +82405,46 @@ class WMTSLayerHandler extends BaseLayer$2 {
82377
82405
  crossOrigin: "anonymous"
82378
82406
  });
82379
82407
  } else {
82380
- const projection2 = get$b("EPSG:4326");
82381
- const projectionExtent = projection2.getExtent();
82382
- const size2 = Math.sqrt(projectionExtent[2] - projectionExtent[0]) / 256;
82383
- const resolutions = new Array(19);
82384
- const matrixIds = new Array(19);
82385
- for (let z2 = 0; z2 < 19; ++z2) {
82386
- resolutions[z2] = size2 / Math.pow(2, z2);
82387
- matrixIds[z2] = z2;
82408
+ const projectionCode = wmtsConfig.projection || this.config.projection || "EPSG:4326";
82409
+ const projectionDefinition = wmtsConfig.projectionDefinition || this.config.projectionDefinition;
82410
+ if (projectionDefinition) {
82411
+ proj4$1.defs(projectionCode, projectionDefinition);
82412
+ register$3(proj4$1);
82388
82413
  }
82414
+ const projection2 = get$b(projectionCode);
82415
+ const projectionExtent = projection2.getExtent();
82416
+ let resolutions = wmtsConfig.resolutions || this.config.resolutions;
82417
+ let matrixIds = wmtsConfig.matrixIds || this.config.matrixIds;
82418
+ const tileSize = wmtsConfig.tileSize || 256;
82419
+ const tileSizeNumber = typeof tileSize === "number" ? tileSize : tileSize[0];
82420
+ if (!resolutions) {
82421
+ const width = projectionExtent[2] - projectionExtent[0];
82422
+ const size2 = width / tileSizeNumber;
82423
+ const zoomLevels = 19;
82424
+ resolutions = new Array(zoomLevels);
82425
+ for (let z2 = 0; z2 < zoomLevels; ++z2) {
82426
+ resolutions[z2] = size2 / Math.pow(2, z2);
82427
+ }
82428
+ }
82429
+ if (!matrixIds) {
82430
+ matrixIds = new Array(resolutions.length);
82431
+ for (let z2 = 0; z2 < resolutions.length; ++z2) {
82432
+ matrixIds[z2] = z2.toString();
82433
+ }
82434
+ }
82435
+ const origin = wmtsConfig.origin || this.config.origin || [projectionExtent[0], projectionExtent[3]];
82389
82436
  return new WMTS$3({
82390
- url: this.config.url,
82391
- layer: this.config.wmtsLayer || "",
82392
- matrixSet: this.config.wmtsMatrixSet || "EPSG:4326",
82393
- format: "image/png",
82394
- projection: "EPSG:4326",
82395
- style: this.config.wmtsStyle || "default",
82437
+ url,
82438
+ layer: wmtsConfig.layer || this.config.layerName || "",
82439
+ matrixSet: wmtsConfig.matrixSet || this.config.matrixSet || projectionCode,
82440
+ format: wmtsConfig.format || this.config.format || "image/png",
82441
+ projection: projectionCode,
82442
+ style: wmtsConfig.style || this.config.style || "default",
82396
82443
  tileGrid: new WMTSTileGrid$3({
82397
- origin: [projectionExtent[0], projectionExtent[3]],
82444
+ origin,
82398
82445
  resolutions,
82399
- matrixIds
82446
+ matrixIds,
82447
+ tileSize
82400
82448
  }),
82401
82449
  crossOrigin: "anonymous"
82402
82450
  });
@@ -82440,21 +82488,21 @@ class WMTSLayerHandler extends BaseLayer$2 {
82440
82488
  * 设置图层
82441
82489
  */
82442
82490
  setLayer(layer2) {
82443
- this.config.wmtsLayer = layer2;
82491
+ this.config.layerName = layer2;
82444
82492
  this.layer = null;
82445
82493
  }
82446
82494
  /**
82447
82495
  * 设置矩阵集
82448
82496
  */
82449
82497
  setMatrixSet(matrixSet) {
82450
- this.config.wmtsMatrixSet = matrixSet;
82498
+ this.config.matrixSet = matrixSet;
82451
82499
  this.layer = null;
82452
82500
  }
82453
82501
  /**
82454
82502
  * 设置样式
82455
82503
  */
82456
82504
  setWMTSStyle(style) {
82457
- this.config.wmtsStyle = style;
82505
+ this.config.style = style;
82458
82506
  this.layer = null;
82459
82507
  }
82460
82508
  /**
@@ -83259,10 +83307,13 @@ class GeoJSONLayerHandler extends BaseLayer$2 {
83259
83307
  */
83260
83308
  createVectorSource() {
83261
83309
  var _a3;
83310
+ this.registerCustomProjection();
83262
83311
  const format2 = new GeoJSON$4();
83263
83312
  const mapProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
83313
+ const dataProjection = this.config.projection || "EPSG:4326";
83264
83314
  if (this.config.data) {
83265
83315
  const features2 = format2.readFeatures(this.config.data, {
83316
+ dataProjection,
83266
83317
  featureProjection: mapProjection
83267
83318
  });
83268
83319
  this.originalFeatures = features2;
@@ -83270,7 +83321,10 @@ class GeoJSONLayerHandler extends BaseLayer$2 {
83270
83321
  } else if (this.config.url) {
83271
83322
  const source = new VectorSource$2({
83272
83323
  url: this.config.url,
83273
- format: new GeoJSON$4({ featureProjection: mapProjection })
83324
+ format: new GeoJSON$4({
83325
+ dataProjection,
83326
+ featureProjection: mapProjection
83327
+ })
83274
83328
  });
83275
83329
  source.on("featuresloadend", () => {
83276
83330
  this.originalFeatures = source.getFeatures();
@@ -83663,6 +83717,7 @@ class GeoJSONLayerHandler extends BaseLayer$2 {
83663
83717
  * 应用过滤器(实现基类的抽象方法)
83664
83718
  */
83665
83719
  applyFilters() {
83720
+ debugger;
83666
83721
  const layer2 = this.getLayer();
83667
83722
  const source = layer2.getSource();
83668
83723
  if (!source)
@@ -83909,6 +83964,7 @@ class KMLLayerHandler extends BaseLayer$2 {
83909
83964
  * 创建图层
83910
83965
  */
83911
83966
  createLayer() {
83967
+ this.registerCustomProjection();
83912
83968
  this.vectorSource = new VectorSource$2({
83913
83969
  url: this.config.url,
83914
83970
  format: this.kmlFormat
@@ -84184,9 +84240,10 @@ class GMLLayerHandler extends BaseLayer$2 {
84184
84240
  * 初始化GML格式处理器
84185
84241
  */
84186
84242
  initializeGMLFormat() {
84243
+ this.registerCustomProjection();
84187
84244
  const gmlConfig = this.config.gmlConfig || {};
84188
84245
  this.gmlFormat = new GML$1({
84189
- srsName: gmlConfig.srsName || "EPSG:4326"
84246
+ srsName: gmlConfig.srsName || this.config.projection || "EPSG:4326"
84190
84247
  });
84191
84248
  }
84192
84249
  /**
@@ -84562,13 +84619,20 @@ class WKTLayerHandler extends BaseLayer$2 {
84562
84619
  * 从WKT字符串加载数据
84563
84620
  */
84564
84621
  loadWKTFromString(wktString) {
84622
+ var _a3;
84565
84623
  if (!this.wktFormat || !this.vectorSource)
84566
84624
  return;
84625
+ this.registerCustomProjection();
84626
+ const dataProjection = this.config.projection || "EPSG:4326";
84627
+ const featureProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
84567
84628
  try {
84568
84629
  const wktLines = wktString.split("\n").filter((line2) => line2.trim());
84569
84630
  wktLines.forEach((line2, index2) => {
84570
84631
  try {
84571
- const geometry2 = this.wktFormat.readGeometry(line2.trim());
84632
+ const geometry2 = this.wktFormat.readGeometry(line2.trim(), {
84633
+ dataProjection,
84634
+ featureProjection
84635
+ });
84572
84636
  const feature2 = new Feature$6({
84573
84637
  geometry: geometry2,
84574
84638
  id: `wkt_feature_${index2}`,
@@ -84654,10 +84718,16 @@ class WKTLayerHandler extends BaseLayer$2 {
84654
84718
  * 添加WKT几何
84655
84719
  */
84656
84720
  addWKTGeometry(wktString, properties) {
84721
+ var _a3;
84657
84722
  if (!this.wktFormat || !this.vectorSource)
84658
84723
  return null;
84724
+ const dataProjection = this.config.projection || "EPSG:4326";
84725
+ const featureProjection = ((_a3 = this.map) == null ? void 0 : _a3.getView().getProjection().getCode()) || "EPSG:4326";
84659
84726
  try {
84660
- const geometry2 = this.wktFormat.readGeometry(wktString);
84727
+ const geometry2 = this.wktFormat.readGeometry(wktString, {
84728
+ dataProjection,
84729
+ featureProjection
84730
+ });
84661
84731
  const feature2 = new Feature$6({
84662
84732
  geometry: geometry2,
84663
84733
  wkt: wktString,
@@ -465456,6 +465526,7 @@ const _TiandituLayerHandler = class _TiandituLayerHandler extends BaseLayer$2 {
465456
465526
  * 创建天地图XYZ数据源
465457
465527
  */
465458
465528
  createTiandituSource() {
465529
+ this.registerCustomProjection();
465459
465530
  const url = this.processUrl(this.config.url || "");
465460
465531
  const xyzOptions = {
465461
465532
  url,
@@ -465852,6 +465923,7 @@ class VectorTileLayerHandler extends BaseLayer$2 {
465852
465923
  * 创建矢量瓦片数据源
465853
465924
  */
465854
465925
  createVectorTileSource() {
465926
+ this.registerCustomProjection();
465855
465927
  const config = this.config;
465856
465928
  const format2 = this.createFormat();
465857
465929
  const sourceOptions = {
@@ -465900,7 +465972,7 @@ class VectorTileLayerHandler extends BaseLayer$2 {
465900
465972
  });
465901
465973
  case "geojson":
465902
465974
  return new GeoJSON$4({
465903
- dataProjection: config.dataProjection || "EPSG:4326",
465975
+ dataProjection: config.dataProjection || config.projection || "EPSG:4326",
465904
465976
  featureProjection: config.featureProjection || "EPSG:4326"
465905
465977
  });
465906
465978
  default:
@@ -466372,6 +466444,8 @@ class LayerManager {
466372
466444
  __publicField(this, "storage");
466373
466445
  // 存储baseLayers配置,用于判断图层是否为底图
466374
466446
  __publicField(this, "baseLayerIds", /* @__PURE__ */ new Set());
466447
+ // 存储共享图层组信息
466448
+ __publicField(this, "sharedLayerGroups", /* @__PURE__ */ new Map());
466375
466449
  this.map = map2;
466376
466450
  this.eventBus = eventBus;
466377
466451
  this.storage = storage2;
@@ -466381,6 +466455,7 @@ class LayerManager {
466381
466455
  * 添加图层(支持按需加载)
466382
466456
  */
466383
466457
  async addLayer(config) {
466458
+ var _a3, _b3;
466384
466459
  try {
466385
466460
  const layerId = config.id || `layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
466386
466461
  if (this.layerHandlers.has(layerId) || this.pendingLayerConfigs.has(layerId)) {
@@ -466395,7 +466470,11 @@ class LayerManager {
466395
466470
  opacity: config.opacity ?? 1,
466396
466471
  zIndex: config.zIndex ?? 0
466397
466472
  };
466398
- if (fullConfig.type === "group" && (fullConfig.children || fullConfig.layers)) {
466473
+ const isGroup = fullConfig.type === "group" || (((_a3 = fullConfig.children) == null ? void 0 : _a3.length) ?? 0) > 0 || (((_b3 = fullConfig.layers) == null ? void 0 : _b3.length) ?? 0) > 0;
466474
+ if (isGroup) {
466475
+ if (fullConfig.type !== "group") {
466476
+ fullConfig.type = "group";
466477
+ }
466399
466478
  return this.addLayerGroup(fullConfig);
466400
466479
  }
466401
466480
  if (fullConfig.visible && this.isBasemapLayer(layerId)) {
@@ -466507,6 +466586,174 @@ class LayerManager {
466507
466586
  console.error("执行定位动画失败:", error2);
466508
466587
  }
466509
466588
  }
466589
+ /**
466590
+ * 设置共享图层样式函数
466591
+ */
466592
+ setupSharedLayerStyle(layer2, reuseId) {
466593
+ if (!(layer2 instanceof VectorLayer$3)) {
466594
+ return;
466595
+ }
466596
+ const originalStyleFunction = layer2.getStyleFunction();
466597
+ layer2.setStyle((function(feature2, resolution) {
466598
+ const group2 = this.sharedLayerGroups.get(reuseId);
466599
+ if (!group2)
466600
+ return null;
466601
+ let matched = false;
466602
+ let styleToUse = null;
466603
+ for (const layerId of group2.logicalLayers) {
466604
+ const config = this.layerConfigs.get(layerId);
466605
+ if (config && config.visible) {
466606
+ try {
466607
+ if (this.checkFeatureFilter(feature2, config.filters)) {
466608
+ matched = true;
466609
+ const handler = this.layerHandlers.get(layerId);
466610
+ if (handler) {
466611
+ const isFirst = group2.logicalLayers.values().next().value === layerId;
466612
+ if (isFirst) {
466613
+ if (originalStyleFunction) {
466614
+ styleToUse = originalStyleFunction(feature2, resolution);
466615
+ }
466616
+ } else {
466617
+ const logicalLayer = handler.getLayer();
466618
+ if (logicalLayer && logicalLayer instanceof VectorLayer$3 && logicalLayer !== layer2) {
466619
+ const styleFunc = logicalLayer.getStyleFunction();
466620
+ if (styleFunc) {
466621
+ styleToUse = styleFunc(feature2, resolution);
466622
+ }
466623
+ } else {
466624
+ if (originalStyleFunction) {
466625
+ styleToUse = originalStyleFunction(feature2, resolution);
466626
+ }
466627
+ }
466628
+ }
466629
+ if (styleToUse || matched) {
466630
+ break;
466631
+ }
466632
+ }
466633
+ }
466634
+ } catch (e8) {
466635
+ console.error("Error checking feature filter:", e8);
466636
+ }
466637
+ }
466638
+ }
466639
+ if (matched) {
466640
+ if (styleToUse)
466641
+ return styleToUse;
466642
+ if (originalStyleFunction)
466643
+ return originalStyleFunction(feature2, resolution);
466644
+ return void 0;
466645
+ }
466646
+ return null;
466647
+ }).bind(this));
466648
+ }
466649
+ /**
466650
+ * 更新共享图层状态(处理WMS参数更新或Vector重绘)
466651
+ */
466652
+ updateSharedLayerState(reuseId) {
466653
+ const group2 = this.sharedLayerGroups.get(reuseId);
466654
+ if (!group2)
466655
+ return;
466656
+ const layer2 = group2.physicalLayer;
466657
+ const source = layer2.getSource();
466658
+ if (source && typeof source.updateParams === "function") {
466659
+ const visibleLayers = Array.from(group2.logicalLayers).filter((id) => {
466660
+ const config = this.layerConfigs.get(id);
466661
+ return config && config.visible;
466662
+ });
466663
+ const wmsLayersList = [];
466664
+ const cqlFilterList = [];
466665
+ visibleLayers.forEach((id) => {
466666
+ var _a3, _b3;
466667
+ const config = this.layerConfigs.get(id);
466668
+ if (config) {
466669
+ const layers = config.wmsLayers || ((_b3 = (_a3 = config.config) == null ? void 0 : _a3.wms) == null ? void 0 : _b3.layers);
466670
+ if (layers) {
466671
+ wmsLayersList.push(layers);
466672
+ let cql = "";
466673
+ if (config.filters && config.filters.length > 0) {
466674
+ const conditions = config.filters.filter((f2) => f2.enabled && f2.type === FilterType.ATTRIBUTE).map((f2) => {
466675
+ const attrFilter = f2;
466676
+ let val = attrFilter.value;
466677
+ if (typeof val === "string") {
466678
+ val = `'${val}'`;
466679
+ }
466680
+ switch (attrFilter.operator) {
466681
+ case FilterOperator.EQUAL:
466682
+ return `${attrFilter.property}=${val}`;
466683
+ case FilterOperator.NOT_EQUAL:
466684
+ return `${attrFilter.property}<>${val}`;
466685
+ case FilterOperator.GREATER_THAN:
466686
+ return `${attrFilter.property}>${val}`;
466687
+ case FilterOperator.LESS_THAN:
466688
+ return `${attrFilter.property}<${val}`;
466689
+ case FilterOperator.GREATER_EQUAL:
466690
+ return `${attrFilter.property}>=${val}`;
466691
+ case FilterOperator.LESS_EQUAL:
466692
+ return `${attrFilter.property}<=${val}`;
466693
+ case FilterOperator.LIKE:
466694
+ return `${attrFilter.property} LIKE ${val}`;
466695
+ case FilterOperator.IN:
466696
+ if (Array.isArray(attrFilter.value)) {
466697
+ const inVals = attrFilter.value.map((v5) => typeof v5 === "string" ? `'${v5}'` : v5).join(",");
466698
+ return `${attrFilter.property} IN (${inVals})`;
466699
+ }
466700
+ return `${attrFilter.property} IN (${attrFilter.value})`;
466701
+ default:
466702
+ return "";
466703
+ }
466704
+ }).filter((c2) => c2 !== "");
466705
+ if (conditions.length > 0) {
466706
+ cql = conditions.join(" AND ");
466707
+ }
466708
+ }
466709
+ cqlFilterList.push(cql === "" ? "INCLUDE" : cql);
466710
+ }
466711
+ }
466712
+ });
466713
+ if (wmsLayersList.length > 0) {
466714
+ const newLayersParam = wmsLayersList.join(",");
466715
+ const newCqlFilterParam = cqlFilterList.join(";");
466716
+ const params2 = { "LAYERS": newLayersParam };
466717
+ if (cqlFilterList.some((c2) => c2 !== "INCLUDE")) {
466718
+ params2["CQL_FILTER"] = newCqlFilterParam;
466719
+ } else {
466720
+ params2["CQL_FILTER"] = null;
466721
+ }
466722
+ source.updateParams(params2);
466723
+ console.log(`共享WMS图层 ${reuseId} 更新参数: LAYERS=${newLayersParam}, CQL_FILTER=${newCqlFilterParam}`);
466724
+ return;
466725
+ }
466726
+ }
466727
+ layer2.changed();
466728
+ }
466729
+ /**
466730
+ * 检查要素是否匹配过滤条件
466731
+ */
466732
+ checkFeatureFilter(feature2, filters) {
466733
+ if (!filters || filters.length === 0) {
466734
+ return true;
466735
+ }
466736
+ for (const filter2 of filters) {
466737
+ if (!filter2.enabled)
466738
+ continue;
466739
+ if (filter2.type === FilterType.ATTRIBUTE) {
466740
+ const props = feature2.getProperties();
466741
+ const value = props[filter2.property];
466742
+ const targetValue = filter2.value;
466743
+ switch (filter2.operator) {
466744
+ case FilterOperator.EQUAL:
466745
+ if (value != targetValue)
466746
+ return false;
466747
+ break;
466748
+ case FilterOperator.NOT_EQUAL:
466749
+ if (value == targetValue)
466750
+ return false;
466751
+ break;
466752
+ }
466753
+ }
466754
+ }
466755
+ return true;
466756
+ }
466510
466757
  /**
466511
466758
  * 获取缓动函数
466512
466759
  */
@@ -466537,19 +466784,44 @@ class LayerManager {
466537
466784
  * 异步添加图层
466538
466785
  */
466539
466786
  async addLayerAsync(fullConfig, handler) {
466540
- var _a3;
466787
+ var _a3, _b3;
466541
466788
  try {
466542
466789
  const layer2 = await handler.getLayerAsync();
466543
466790
  layer2.set("layerId", fullConfig.id);
466544
466791
  this.layerHandlers.set(fullConfig.id, handler);
466545
466792
  this.layerConfigs.set(fullConfig.id, fullConfig);
466546
466793
  console.log("kjthis.layerConfigs:", this.layerConfigs);
466547
- this.map.addLayer(layer2);
466794
+ let isReuse = false;
466795
+ if (fullConfig.reuseId) {
466796
+ const reuseId = fullConfig.reuseId;
466797
+ let group2 = this.sharedLayerGroups.get(reuseId);
466798
+ if (group2) {
466799
+ console.log(`图层 ${fullConfig.id} 复用物理图层 ${reuseId}`);
466800
+ group2.logicalLayers.add(fullConfig.id);
466801
+ isReuse = true;
466802
+ this.updateSharedLayerState(reuseId);
466803
+ } else {
466804
+ console.log(`图层 ${fullConfig.id} 创建共享物理图层 ${reuseId}`);
466805
+ this.sharedLayerGroups.set(reuseId, {
466806
+ physicalLayer: layer2,
466807
+ logicalLayers: /* @__PURE__ */ new Set([fullConfig.id])
466808
+ });
466809
+ this.setupSharedLayerStyle(layer2, reuseId);
466810
+ this.map.addLayer(layer2);
466811
+ }
466812
+ } else {
466813
+ this.map.addLayer(layer2);
466814
+ }
466548
466815
  if (fullConfig.zIndex !== void 0) {
466549
- handler.setZIndex(fullConfig.zIndex);
466816
+ if (fullConfig.reuseId && this.sharedLayerGroups.has(fullConfig.reuseId)) {
466817
+ const group2 = this.sharedLayerGroups.get(fullConfig.reuseId);
466818
+ group2.physicalLayer.setZIndex(fullConfig.zIndex);
466819
+ } else {
466820
+ handler.setZIndex(fullConfig.zIndex);
466821
+ }
466550
466822
  console.log(`图层 ${fullConfig.id} 设置 zIndex: ${fullConfig.zIndex}`);
466551
466823
  }
466552
- if ("applyLayerStyles" in handler) {
466824
+ if ("applyLayerStyles" in handler && !isReuse) {
466553
466825
  setTimeout(() => {
466554
466826
  handler.applyLayerStyles();
466555
466827
  }, 50);
@@ -466563,7 +466835,9 @@ class LayerManager {
466563
466835
  layerConfig: fullConfig
466564
466836
  });
466565
466837
  if (((_a3 = fullConfig.locationAnimation) == null ? void 0 : _a3.enabled) && fullConfig.visible) {
466566
- this.handleLocationAnimation(layer2, fullConfig);
466838
+ if (!isReuse || !((_b3 = this.sharedLayerGroups.get(fullConfig.reuseId)) == null ? void 0 : _b3.physicalLayer.getVisible())) {
466839
+ this.handleLocationAnimation(fullConfig.reuseId ? this.sharedLayerGroups.get(fullConfig.reuseId).physicalLayer : layer2, fullConfig);
466840
+ }
466567
466841
  }
466568
466842
  return true;
466569
466843
  } catch (error2) {
@@ -466588,7 +466862,7 @@ class LayerManager {
466588
466862
  const childLayers = [];
466589
466863
  if (groupConfig.children) {
466590
466864
  for (const childConfig of groupConfig.children) {
466591
- const childLayerId = `${groupConfig.id}_child_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
466865
+ const childLayerId = childConfig.id || `${groupConfig.id}_child_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
466592
466866
  const childFullConfig = {
466593
466867
  ...childConfig,
466594
466868
  id: childLayerId,
@@ -466601,9 +466875,10 @@ class LayerManager {
466601
466875
  }
466602
466876
  }
466603
466877
  }
466878
+ const layersList = [];
466604
466879
  if (groupConfig.layers) {
466605
466880
  for (const layerConfig of groupConfig.layers) {
466606
- const layerLayerId = `${groupConfig.id}_layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
466881
+ const layerLayerId = layerConfig.id || `${groupConfig.id}_layer_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
466607
466882
  const layerFullConfig = {
466608
466883
  ...layerConfig,
466609
466884
  id: layerLayerId,
@@ -466612,10 +466887,14 @@ class LayerManager {
466612
466887
  opacity: layerConfig.opacity ?? groupConfig.opacity
466613
466888
  };
466614
466889
  if (this.addLayer(layerFullConfig)) {
466890
+ layersList.push(layerFullConfig);
466615
466891
  }
466616
466892
  }
466617
466893
  }
466618
466894
  groupConfig.children = childLayers;
466895
+ if (layersList.length > 0) {
466896
+ groupConfig.layers = layersList;
466897
+ }
466619
466898
  this.layerConfigs.set(groupConfig.id, groupConfig);
466620
466899
  this.saveLayerConfigs();
466621
466900
  this.eventBus.emit("layer-added", {
@@ -466642,15 +466921,26 @@ class LayerManager {
466642
466921
  console.warn(`未找到图层配置: ${layerId}`);
466643
466922
  return false;
466644
466923
  }
466645
- if (handler && this.layerConfigs.has(layerId)) {
466646
- if (config.type === "group" && config.children) {
466647
- for (const child of config.children) {
466648
- this.removeLayer(child.id);
466924
+ if ((handler || config.type === "group") && this.layerConfigs.has(layerId)) {
466925
+ if (config.type === "group") {
466926
+ if (config.children) {
466927
+ for (const child of config.children) {
466928
+ this.removeLayer(child.id);
466929
+ }
466649
466930
  }
466650
- } else {
466931
+ if (config.layers) {
466932
+ for (const layer2 of config.layers) {
466933
+ this.removeLayer(layer2.id);
466934
+ }
466935
+ }
466936
+ if (handler)
466937
+ handler.destroy();
466938
+ } else if (handler) {
466651
466939
  handler.destroy();
466652
466940
  }
466653
- this.layerHandlers.delete(layerId);
466941
+ if (handler) {
466942
+ this.layerHandlers.delete(layerId);
466943
+ }
466654
466944
  this.layerConfigs.delete(layerId);
466655
466945
  }
466656
466946
  this.pendingLayerConfigs.delete(layerId);
@@ -466722,7 +467012,7 @@ class LayerManager {
466722
467012
  console.warn(`图层配置不存在: ${layerId}`);
466723
467013
  return false;
466724
467014
  }
466725
- if (config.type === "group" && config.children) {
467015
+ if (config.type === "group" && (config.children || config.layers)) {
466726
467016
  return await this.setGroupLayerVisible(layerId, visible);
466727
467017
  }
466728
467018
  if (visible && !this.layerHandlers.has(layerId)) {
@@ -466737,28 +467027,58 @@ class LayerManager {
466737
467027
  if (visible && this.isBasemapLayer(layerId)) {
466738
467028
  await this.hideOtherBasemaps(layerId);
466739
467029
  }
466740
- handler.setVisible(visible);
466741
467030
  config.visible = visible;
466742
- this.saveLayerConfigs();
466743
467031
  if (this.pendingLayerConfigs.has(layerId)) {
466744
467032
  this.pendingLayerConfigs.set(layerId, config);
466745
467033
  }
466746
- if (visible) {
466747
- const layer2 = handler.getLayer();
466748
- const animCfg = config.locationAnimation;
466749
- if (animCfg && animCfg.enabled) {
466750
- this.handleLocationAnimation(layer2, config);
466751
- } else if (config.fitToExtent) {
466752
- const defaultAnim = {
466753
- enabled: true,
466754
- duration: 1e3,
466755
- easing: "ease-out",
466756
- maxZoom: 16,
466757
- padding: [50, 50, 50, 50]
466758
- };
466759
- this.performLocationAnimation(layer2, config, defaultAnim);
467034
+ this.layerConfigs.set(layerId, config);
467035
+ if (config.reuseId && this.sharedLayerGroups.has(config.reuseId)) {
467036
+ const group2 = this.sharedLayerGroups.get(config.reuseId);
467037
+ const anyVisible = Array.from(group2.logicalLayers).some((id) => {
467038
+ const c2 = this.layerConfigs.get(id);
467039
+ return c2 && c2.visible;
467040
+ });
467041
+ group2.physicalLayer.setVisible(anyVisible);
467042
+ this.updateSharedLayerState(config.reuseId);
467043
+ console.log(`共享图层 ${config.reuseId} 逻辑图层 ${layerId} 可见性设为 ${visible}, 物理图层可见性: ${anyVisible}`);
467044
+ if (visible) {
467045
+ if (anyVisible) {
467046
+ const layer2 = group2.physicalLayer;
467047
+ const animCfg = config.locationAnimation;
467048
+ if (animCfg && animCfg.enabled) {
467049
+ this.handleLocationAnimation(layer2, config);
467050
+ } else if (config.fitToExtent) {
467051
+ const defaultAnim = {
467052
+ enabled: true,
467053
+ duration: 1e3,
467054
+ easing: "ease-out",
467055
+ maxZoom: 16,
467056
+ padding: [50, 50, 50, 50]
467057
+ };
467058
+ this.performLocationAnimation(layer2, config, defaultAnim);
467059
+ }
467060
+ }
467061
+ }
467062
+ } else {
467063
+ handler.setVisible(visible);
467064
+ if (visible) {
467065
+ const layer2 = handler.getLayer();
467066
+ const animCfg = config.locationAnimation;
467067
+ if (animCfg && animCfg.enabled) {
467068
+ this.handleLocationAnimation(layer2, config);
467069
+ } else if (config.fitToExtent) {
467070
+ const defaultAnim = {
467071
+ enabled: true,
467072
+ duration: 1e3,
467073
+ easing: "ease-out",
467074
+ maxZoom: 16,
467075
+ padding: [50, 50, 50, 50]
467076
+ };
467077
+ this.performLocationAnimation(layer2, config, defaultAnim);
467078
+ }
466760
467079
  }
466761
467080
  }
467081
+ this.saveLayerConfigs();
466762
467082
  this.eventBus.emit("layer-visibility-changed", {
466763
467083
  layerId,
466764
467084
  visible,
@@ -466810,10 +467130,9 @@ class LayerManager {
466810
467130
  }
466811
467131
  }
466812
467132
  if (groupConfig.layers) {
466813
- const allConfigs = new Map([...this.layerConfigs, ...this.pendingLayerConfigs]);
466814
- for (const [layerId, config] of allConfigs) {
466815
- if (layerId.startsWith(`${groupLayerId}_layer_`)) {
466816
- const result = await this.setLayerVisible(layerId, visible);
467133
+ for (const layerConfig of groupConfig.layers) {
467134
+ if (layerConfig.id) {
467135
+ const result = await this.setLayerVisible(layerConfig.id, visible);
466817
467136
  results.push(result);
466818
467137
  }
466819
467138
  }
@@ -467065,7 +467384,6 @@ class LayerManager {
467065
467384
  * 按需加载图层(原loadLayerConfigs的单个图层版本)
467066
467385
  */
467067
467386
  async loadLayerOnDemand(layerId) {
467068
- var _a3;
467069
467387
  try {
467070
467388
  if (this.layerHandlers.has(layerId)) {
467071
467389
  return true;
@@ -467077,23 +467395,15 @@ class LayerManager {
467077
467395
  }
467078
467396
  const handler = layerFactory.createLayerHandler(config);
467079
467397
  handler.setMap(this.map);
467080
- const layer2 = await ((_a3 = handler.getLayerAsync) == null ? void 0 : _a3.call(handler)) || handler.getLayer();
467081
- layer2.set("layerId", config.id);
467082
- this.layerHandlers.set(config.id, handler);
467083
- this.layerConfigs.set(config.id, config);
467084
- this.map.addLayer(layer2);
467085
- if (config.zIndex !== void 0) {
467086
- handler.setZIndex(config.zIndex);
467087
- console.log(`按需加载图层 ${layerId} 设置 zIndex: ${config.zIndex}`);
467088
- }
467089
- this.pendingLayerConfigs.delete(layerId);
467090
- if ("applyLayerStyles" in handler) {
467091
- setTimeout(() => {
467092
- handler.applyLayerStyles();
467093
- }, 50);
467398
+ const success = await this.addLayerAsync(config, handler);
467399
+ if (success) {
467400
+ this.pendingLayerConfigs.delete(layerId);
467401
+ console.log(`图层 ${layerId} 按需加载完成`);
467402
+ return true;
467403
+ } else {
467404
+ console.error(`按需加载图层 ${layerId} 失败`);
467405
+ return false;
467094
467406
  }
467095
- console.log(`图层 ${layerId} 按需加载完成`);
467096
- return true;
467097
467407
  } catch (error2) {
467098
467408
  console.error(`按需加载图层 ${layerId} 失败:`, error2);
467099
467409
  return false;
@@ -467554,8 +467864,8 @@ class FeatureHighlightManager {
467554
467864
  this.map.removeLayer(this.highlightLayer);
467555
467865
  }
467556
467866
  }
467557
- const _hoisted_1$p = ["id"];
467558
- const _sfc_main$q = /* @__PURE__ */ defineComponent({
467867
+ const _hoisted_1$q = ["id"];
467868
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
467559
467869
  __name: "BasePopup",
467560
467870
  props: {
467561
467871
  config: {},
@@ -467673,7 +467983,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
467673
467983
  }, [
467674
467984
  createElementVNode("div", {
467675
467985
  id: `popup-slot-${_ctx.id}`
467676
- }, null, 8, _hoisted_1$p),
467986
+ }, null, 8, _hoisted_1$q),
467677
467987
  renderSlot(_ctx.$slots, "default", {
467678
467988
  feature: _ctx.feature,
467679
467989
  coordinate: _ctx.coordinate,
@@ -467688,13 +467998,13 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
467688
467998
  };
467689
467999
  }
467690
468000
  });
467691
- const _hoisted_1$o = { class: "html-popup-content" };
467692
- const _hoisted_2$m = {
468001
+ const _hoisted_1$p = { class: "html-popup-content" };
468002
+ const _hoisted_2$n = {
467693
468003
  key: 0,
467694
468004
  class: "html-popup-title"
467695
468005
  };
467696
- const _hoisted_3$l = ["innerHTML"];
467697
- const _sfc_main$p = /* @__PURE__ */ defineComponent({
468006
+ const _hoisted_3$m = ["innerHTML"];
468007
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
467698
468008
  __name: "HtmlPopup",
467699
468009
  props: {
467700
468010
  config: {},
@@ -467742,7 +468052,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
467742
468052
  return sanitizeHtml(content2);
467743
468053
  });
467744
468054
  return (_ctx, _cache) => {
467745
- return openBlock(), createBlock(_sfc_main$q, {
468055
+ return openBlock(), createBlock(_sfc_main$r, {
467746
468056
  config: _ctx.config,
467747
468057
  coordinate: _ctx.coordinate,
467748
468058
  feature: _ctx.feature,
@@ -467755,12 +468065,12 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
467755
468065
  default: withCtx(() => {
467756
468066
  var _a3;
467757
468067
  return [
467758
- createElementVNode("div", _hoisted_1$o, [
467759
- ((_a3 = _ctx.config.template) == null ? void 0 : _a3.title) ? (openBlock(), createElementBlock("div", _hoisted_2$m, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
468068
+ createElementVNode("div", _hoisted_1$p, [
468069
+ ((_a3 = _ctx.config.template) == null ? void 0 : _a3.title) ? (openBlock(), createElementBlock("div", _hoisted_2$n, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
467760
468070
  createElementVNode("div", {
467761
468071
  class: "html-popup-body",
467762
468072
  innerHTML: resolveContent()
467763
- }, null, 8, _hoisted_3$l)
468073
+ }, null, 8, _hoisted_3$m)
467764
468074
  ])
467765
468075
  ];
467766
468076
  }),
@@ -467769,17 +468079,17 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
467769
468079
  };
467770
468080
  }
467771
468081
  });
467772
- const _hoisted_1$n = { class: "image-popup-content" };
467773
- const _hoisted_2$l = {
468082
+ const _hoisted_1$o = { class: "image-popup-content" };
468083
+ const _hoisted_2$m = {
467774
468084
  key: 0,
467775
468085
  class: "image-popup-title"
467776
468086
  };
467777
- const _hoisted_3$k = {
468087
+ const _hoisted_3$l = {
467778
468088
  key: 1,
467779
468089
  class: "image-popup-description"
467780
468090
  };
467781
- const _hoisted_4$k = { class: "image-popup-main" };
467782
- const _hoisted_5$k = { class: "image-container" };
468091
+ const _hoisted_4$l = { class: "image-popup-main" };
468092
+ const _hoisted_5$l = { class: "image-container" };
467783
468093
  const _hoisted_6$h = ["src", "alt"];
467784
468094
  const _hoisted_7$f = {
467785
468095
  key: 0,
@@ -467809,7 +468119,7 @@ const _hoisted_14$8 = {
467809
468119
  };
467810
468120
  const _hoisted_15$7 = { class: "fullscreen-container" };
467811
468121
  const _hoisted_16$7 = ["src", "alt"];
467812
- const _sfc_main$o = /* @__PURE__ */ defineComponent({
468122
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
467813
468123
  __name: "ImagePopup",
467814
468124
  props: {
467815
468125
  config: {},
@@ -467942,7 +468252,7 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
467942
468252
  document.removeEventListener("keydown", handleKeydown);
467943
468253
  });
467944
468254
  return (_ctx, _cache) => {
467945
- return openBlock(), createBlock(_sfc_main$q, {
468255
+ return openBlock(), createBlock(_sfc_main$r, {
467946
468256
  config: _ctx.config,
467947
468257
  coordinate: _ctx.coordinate,
467948
468258
  feature: _ctx.feature,
@@ -467953,11 +468263,11 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
467953
468263
  onHide: _cache[3] || (_cache[3] = ($event) => _ctx.$emit("hide"))
467954
468264
  }, {
467955
468265
  default: withCtx(() => [
467956
- createElementVNode("div", _hoisted_1$n, [
467957
- _ctx.config.title ? (openBlock(), createElementBlock("div", _hoisted_2$l, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
467958
- _ctx.config.description ? (openBlock(), createElementBlock("div", _hoisted_3$k, toDisplayString(_ctx.config.description), 1)) : createCommentVNode("", true),
467959
- createElementVNode("div", _hoisted_4$k, [
467960
- createElementVNode("div", _hoisted_5$k, [
468266
+ createElementVNode("div", _hoisted_1$o, [
468267
+ _ctx.config.title ? (openBlock(), createElementBlock("div", _hoisted_2$m, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
468268
+ _ctx.config.description ? (openBlock(), createElementBlock("div", _hoisted_3$l, toDisplayString(_ctx.config.description), 1)) : createCommentVNode("", true),
468269
+ createElementVNode("div", _hoisted_4$l, [
468270
+ createElementVNode("div", _hoisted_5$l, [
467961
468271
  createElementVNode("img", {
467962
468272
  src: currentImage.value,
467963
468273
  alt: `图片 ${currentIndex.value + 1}`,
@@ -468063,20 +468373,20 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
468063
468373
  };
468064
468374
  }
468065
468375
  });
468066
- const _hoisted_1$m = { class: "array-popup-content" };
468067
- const _hoisted_2$k = {
468376
+ const _hoisted_1$n = { class: "array-popup-content" };
468377
+ const _hoisted_2$l = {
468068
468378
  key: 0,
468069
468379
  class: "array-popup-title"
468070
468380
  };
468071
- const _hoisted_3$j = {
468381
+ const _hoisted_3$k = {
468072
468382
  key: 1,
468073
468383
  class: "array-popup-description"
468074
468384
  };
468075
- const _hoisted_4$j = {
468385
+ const _hoisted_4$k = {
468076
468386
  key: 2,
468077
468387
  class: "view-switch"
468078
468388
  };
468079
- const _hoisted_5$j = {
468389
+ const _hoisted_5$k = {
468080
468390
  key: 3,
468081
468391
  class: "search-container"
468082
468392
  };
@@ -468140,7 +468450,7 @@ const _hoisted_43$1 = {
468140
468450
  class: "empty-data"
468141
468451
  };
468142
468452
  const _hoisted_44$1 = { class: "empty-text" };
468143
- const _sfc_main$n = /* @__PURE__ */ defineComponent({
468453
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
468144
468454
  __name: "ArrayPopup",
468145
468455
  props: {
468146
468456
  config: {},
@@ -468286,7 +468596,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
468286
468596
  }
468287
468597
  });
468288
468598
  return (_ctx, _cache) => {
468289
- return openBlock(), createBlock(_sfc_main$q, {
468599
+ return openBlock(), createBlock(_sfc_main$r, {
468290
468600
  config: _ctx.config,
468291
468601
  coordinate: _ctx.coordinate,
468292
468602
  feature: _ctx.feature,
@@ -468297,10 +468607,10 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
468297
468607
  onHide: _cache[8] || (_cache[8] = ($event) => _ctx.$emit("hide"))
468298
468608
  }, {
468299
468609
  default: withCtx(() => [
468300
- createElementVNode("div", _hoisted_1$m, [
468301
- _ctx.config.title ? (openBlock(), createElementBlock("div", _hoisted_2$k, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
468302
- _ctx.config.description ? (openBlock(), createElementBlock("div", _hoisted_3$j, toDisplayString(_ctx.config.description), 1)) : createCommentVNode("", true),
468303
- _ctx.config.allowViewSwitch ? (openBlock(), createElementBlock("div", _hoisted_4$j, [
468610
+ createElementVNode("div", _hoisted_1$n, [
468611
+ _ctx.config.title ? (openBlock(), createElementBlock("div", _hoisted_2$l, toDisplayString(resolveTitle()), 1)) : createCommentVNode("", true),
468612
+ _ctx.config.description ? (openBlock(), createElementBlock("div", _hoisted_3$k, toDisplayString(_ctx.config.description), 1)) : createCommentVNode("", true),
468613
+ _ctx.config.allowViewSwitch ? (openBlock(), createElementBlock("div", _hoisted_4$k, [
468304
468614
  createVNode$1(unref(ElButton), {
468305
468615
  class: normalizeClass(["view-btn", { active: currentView.value === "table" }]),
468306
468616
  onClick: _cache[0] || (_cache[0] = ($event) => setView("table")),
@@ -468335,7 +468645,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
468335
468645
  _: 1
468336
468646
  }, 8, ["class", "type"])
468337
468647
  ])) : createCommentVNode("", true),
468338
- _ctx.config.searchable ? (openBlock(), createElementBlock("div", _hoisted_5$j, [
468648
+ _ctx.config.searchable ? (openBlock(), createElementBlock("div", _hoisted_5$k, [
468339
468649
  createVNode$1(unref(ElInput), {
468340
468650
  modelValue: searchQuery.value,
468341
468651
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => searchQuery.value = $event),
@@ -468720,7 +469030,7 @@ class PopupManager {
468720
469030
  let app = null;
468721
469031
  switch (type) {
468722
469032
  case "html":
468723
- app = createApp(_sfc_main$p, {
469033
+ app = createApp(_sfc_main$q, {
468724
469034
  id: popupId,
468725
469035
  config: { ...this.config.defaultConfig, ...config },
468726
469036
  coordinate,
@@ -468730,7 +469040,7 @@ class PopupManager {
468730
469040
  });
468731
469041
  break;
468732
469042
  case "image":
468733
- app = createApp(_sfc_main$o, {
469043
+ app = createApp(_sfc_main$p, {
468734
469044
  id: popupId,
468735
469045
  config: { ...this.config.defaultConfig, ...config },
468736
469046
  coordinate,
@@ -468740,7 +469050,7 @@ class PopupManager {
468740
469050
  });
468741
469051
  break;
468742
469052
  case "array":
468743
- app = createApp(_sfc_main$n, {
469053
+ app = createApp(_sfc_main$o, {
468744
469054
  id: popupId,
468745
469055
  config: { ...this.config.defaultConfig, ...config },
468746
469056
  coordinate,
@@ -468756,7 +469066,7 @@ class PopupManager {
468756
469066
  case "all":
468757
469067
  const allConfig = config;
468758
469068
  if (allConfig.htmlContent) {
468759
- app = createApp(_sfc_main$p, {
469069
+ app = createApp(_sfc_main$q, {
468760
469070
  id: popupId,
468761
469071
  config: {
468762
469072
  ...allConfig,
@@ -468768,7 +469078,7 @@ class PopupManager {
468768
469078
  onClose: () => this.closePopup(popupId)
468769
469079
  });
468770
469080
  } else if (allConfig.images) {
468771
- app = createApp(_sfc_main$o, {
469081
+ app = createApp(_sfc_main$p, {
468772
469082
  id: popupId,
468773
469083
  config: {
468774
469084
  ...allConfig,
@@ -468780,7 +469090,7 @@ class PopupManager {
468780
469090
  onClose: () => this.closePopup(popupId)
468781
469091
  });
468782
469092
  } else if (allConfig.data) {
468783
- app = createApp(_sfc_main$n, {
469093
+ app = createApp(_sfc_main$o, {
468784
469094
  id: popupId,
468785
469095
  config: {
468786
469096
  ...allConfig,
@@ -468796,7 +469106,7 @@ class PopupManager {
468796
469106
  }
468797
469107
  });
468798
469108
  } else {
468799
- app = createApp(_sfc_main$q, {
469109
+ app = createApp(_sfc_main$r, {
468800
469110
  id: popupId,
468801
469111
  config: allConfig,
468802
469112
  coordinate,
@@ -468819,7 +469129,7 @@ class PopupManager {
468819
469129
  },
468820
469130
  render() {
468821
469131
  return h$4(
468822
- _sfc_main$q,
469132
+ _sfc_main$r,
468823
469133
  { config: this.cfg, coordinate: this.coordinate, feature: this.feature, visible: true, id: popupId, onClose: this.onClose },
468824
469134
  { default: () => h$4(this.CustomComp, { ...this.computedProps, feature: this.feature, coordinate: this.coordinate, config: this.cfg }) }
468825
469135
  );
@@ -469103,7 +469413,11 @@ class MapManager {
469103
469413
  initMap(targetId) {
469104
469414
  var _a3;
469105
469415
  const projection2 = this.config.projection || "EPSG:4326";
469106
- if (projection2 === "EPSG:4490") {
469416
+ if (this.config.projectionDefinition) {
469417
+ proj4$1.defs(projection2, this.config.projectionDefinition);
469418
+ register$3(proj4$1);
469419
+ }
469420
+ if (projection2 === "EPSG:4490" && !this.config.projectionDefinition) {
469107
469421
  setupEPSG4490();
469108
469422
  }
469109
469423
  const center2 = this.config.center || [116.404, 39.915];
@@ -469816,13 +470130,13 @@ class MapManager {
469816
470130
  this.map = null;
469817
470131
  }
469818
470132
  }
469819
- const _hoisted_1$l = ["id"];
469820
- const _hoisted_2$j = {
470133
+ const _hoisted_1$m = ["id"];
470134
+ const _hoisted_2$k = {
469821
470135
  class: "absolute top-0 left-0 w-full h-full z-2000",
469822
470136
  "element-loading-text": "地图加载中...",
469823
470137
  "element-loading-background": "rgba(0, 0, 0, 0.3)"
469824
470138
  };
469825
- const _sfc_main$m = /* @__PURE__ */ defineComponent({
470139
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
469826
470140
  __name: "MapContainer",
469827
470141
  props: {
469828
470142
  config: {},
@@ -470005,8 +470319,8 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
470005
470319
  createElementVNode("div", {
470006
470320
  id: mapId.value,
470007
470321
  class: "w-full h-full bg-gray-100"
470008
- }, null, 8, _hoisted_1$l),
470009
- withDirectives(createElementVNode("div", _hoisted_2$j, null, 512), [
470322
+ }, null, 8, _hoisted_1$m),
470323
+ withDirectives(createElementVNode("div", _hoisted_2$k, null, 512), [
470010
470324
  [vShow, _ctx.loading],
470011
470325
  [_directive_loading, _ctx.loading]
470012
470326
  ])
@@ -470014,8 +470328,8 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
470014
470328
  };
470015
470329
  }
470016
470330
  });
470017
- const _hoisted_1$k = ["href"];
470018
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
470331
+ const _hoisted_1$l = ["href"];
470332
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
470019
470333
  __name: "index",
470020
470334
  props: {
470021
470335
  prefix: { default: "icon" },
@@ -470033,7 +470347,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
470033
470347
  class: computedClass.value,
470034
470348
  "aria-hidden": "true"
470035
470349
  }, _ctx.$attrs), [
470036
- createElementVNode("use", { href: symbolId.value }, null, 8, _hoisted_1$k)
470350
+ createElementVNode("use", { href: symbolId.value }, null, 8, _hoisted_1$l)
470037
470351
  ], 16);
470038
470352
  };
470039
470353
  }
@@ -470234,14 +470548,14 @@ class DialogCacheManager {
470234
470548
  }
470235
470549
  const dialogCacheManager = new DialogCacheManager();
470236
470550
  const dialogCacheManager$1 = dialogCacheManager;
470237
- const _hoisted_1$j = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
470238
- const _hoisted_2$i = { class: "flex items-center gap-2" };
470239
- const _hoisted_3$i = { class: "flex-1 overflow-auto min-h-0 h-0" };
470240
- const _hoisted_4$i = {
470551
+ const _hoisted_1$k = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
470552
+ const _hoisted_2$j = { class: "flex items-center gap-2" };
470553
+ const _hoisted_3$j = { class: "flex-1 overflow-auto min-h-0 h-0" };
470554
+ const _hoisted_4$j = {
470241
470555
  key: 0,
470242
470556
  class: "px-5 py-4 border-t border-gray-200 bg-gray-50 flex justify-end gap-3"
470243
470557
  };
470244
- const _hoisted_5$i = ["onMousedown"];
470558
+ const _hoisted_5$j = ["onMousedown"];
470245
470559
  const _hoisted_6$f = { class: "text-base font-semibold text-gray-800 flex-1 overflow-hidden text-ellipsis whitespace-nowrap" };
470246
470560
  const _hoisted_7$d = { class: "flex items-center gap-2" };
470247
470561
  const _hoisted_8$a = { class: "flex-1 overflow-auto min-h-0 h-0" };
@@ -470253,7 +470567,7 @@ const _hoisted_10$8 = {
470253
470567
  key: 1,
470254
470568
  class: "absolute top-0 left-0 w-full h-full pointer-events-none"
470255
470569
  };
470256
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
470570
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
470257
470571
  ...{
470258
470572
  inheritAttrs: false
470259
470573
  },
@@ -470744,12 +471058,12 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470744
471058
  class: normalizeClass(["flex items-center justify-between px-5 py-4 border-b border-gray-200 bg-gray-50", { "cursor-move": _ctx.draggable && !isFullscreen.value }]),
470745
471059
  onMousedown: startDrag
470746
471060
  }, [
470747
- createElementVNode("div", _hoisted_1$j, [
471061
+ createElementVNode("div", _hoisted_1$k, [
470748
471062
  renderSlot(_ctx.$slots, "title", {}, () => [
470749
471063
  createTextVNode(toDisplayString(_ctx.title), 1)
470750
471064
  ])
470751
471065
  ]),
470752
- createElementVNode("div", _hoisted_2$i, [
471066
+ createElementVNode("div", _hoisted_2$j, [
470753
471067
  _ctx.showFullscreen ? (openBlock(), createBlock(unref(ElButton), {
470754
471068
  key: 0,
470755
471069
  class: "w-6 h-6 border-none bg-transparent cursor-pointer flex items-center justify-center rounded text-gray-500 transition-all duration-200 hover:bg-gray-200 hover:text-gray-600",
@@ -470757,7 +471071,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470757
471071
  title: isFullscreen.value ? "退出全屏" : "全屏"
470758
471072
  }, {
470759
471073
  default: withCtx(() => [
470760
- createVNode$1(_sfc_main$l, {
471074
+ createVNode$1(_sfc_main$m, {
470761
471075
  name: isFullscreen.value ? "exit-fullscreen" : "fullscreen"
470762
471076
  }, null, 8, ["name"])
470763
471077
  ]),
@@ -470770,16 +471084,16 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470770
471084
  title: "关闭"
470771
471085
  }, {
470772
471086
  default: withCtx(() => [
470773
- createVNode$1(_sfc_main$l, { name: "close" })
471087
+ createVNode$1(_sfc_main$m, { name: "close" })
470774
471088
  ]),
470775
471089
  _: 1
470776
471090
  })) : createCommentVNode("", true)
470777
471091
  ])
470778
471092
  ], 34),
470779
- createElementVNode("div", _hoisted_3$i, [
471093
+ createElementVNode("div", _hoisted_3$j, [
470780
471094
  renderSlot(_ctx.$slots, "default")
470781
471095
  ]),
470782
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$i, [
471096
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$j, [
470783
471097
  renderSlot(_ctx.$slots, "footer")
470784
471098
  ])) : createCommentVNode("", true),
470785
471099
  _ctx.resizable && !isFullscreen.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, renderList(resizeDirections, (direction2) => {
@@ -470787,7 +471101,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470787
471101
  key: direction2,
470788
471102
  class: normalizeClass(`absolute bg-transparent z-10 pointer-events-auto resize-${direction2}`),
470789
471103
  onMousedown: ($event) => startResize($event, direction2)
470790
- }, null, 42, _hoisted_5$i);
471104
+ }, null, 42, _hoisted_5$j);
470791
471105
  }), 64)) : createCommentVNode("", true)
470792
471106
  ], 16)
470793
471107
  ], 6)) : createCommentVNode("", true)
@@ -470840,7 +471154,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470840
471154
  title: isFullscreen.value ? "退出全屏" : "全屏"
470841
471155
  }, {
470842
471156
  default: withCtx(() => [
470843
- createVNode$1(_sfc_main$l, {
471157
+ createVNode$1(_sfc_main$m, {
470844
471158
  name: isFullscreen.value ? "exit-fullscreen" : "fullscreen"
470845
471159
  }, null, 8, ["name"])
470846
471160
  ]),
@@ -470853,7 +471167,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470853
471167
  title: "关闭"
470854
471168
  }, {
470855
471169
  default: withCtx(() => [
470856
- createVNode$1(_sfc_main$l, { name: "close" })
471170
+ createVNode$1(_sfc_main$m, { name: "close" })
470857
471171
  ]),
470858
471172
  _: 1
470859
471173
  })) : createCommentVNode("", true)
@@ -470914,13 +471228,13 @@ const tencentImgUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD8AAABACAY
470914
471228
  const tencentVecUrl = "data:image/png;base64,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";
470915
471229
  const osmUrl = "data:image/png;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2YyZjJmMiIvPgogIDxyZWN0IHg9IjEwIiB5PSIxMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiNjY2NjY2MiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxwYXRoIGQ9Ik0yMCAzMCBMNDAgMjAgTDYwIDM1IEw4MCAyNSBMODAgNzAgTDYwIDc1IEw0MCA2MCBMMjAgNzAgWiIgZmlsbD0iIzdkZDNjMCIgc3Ryb2tlPSIjNWNiM2EwIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8Y2lyY2xlIGN4PSIzNSIgY3k9IjQ1IiByPSIzIiBmaWxsPSIjZmY2YjZiIi8+CiAgPGNpcmNsZSBjeD0iNTUiIGN5PSIzNSIgcj0iMiIgZmlsbD0iIzRlY2RjNCIvPgogIDxjaXJjbGUgY3g9IjY1IiBjeT0iNTUiIHI9IjIiIGZpbGw9IiM0NWI3ZDEiLz4KICA8dGV4dCB4PSI1MCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iIzY2NiI+T1NNPC90ZXh0Pgo8L3N2Zz4=";
470916
471230
  const customBlueUrl = "data:image/png;base64,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";
470917
- const _hoisted_1$i = { class: "basemap-content" };
470918
- const _hoisted_2$h = { class: "basemap-grid" };
470919
- const _hoisted_3$h = ["onClick"];
470920
- const _hoisted_4$h = { class: "basemap-preview" };
470921
- const _hoisted_5$h = ["src", "alt"];
471231
+ const _hoisted_1$j = { class: "basemap-content" };
471232
+ const _hoisted_2$i = { class: "basemap-grid" };
471233
+ const _hoisted_3$i = ["onClick"];
471234
+ const _hoisted_4$i = { class: "basemap-preview" };
471235
+ const _hoisted_5$i = ["src", "alt"];
470922
471236
  const _hoisted_6$e = { class: "basemap-name" };
470923
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
471237
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
470924
471238
  __name: "BasemapPanel",
470925
471239
  props: {
470926
471240
  modelValue: { type: Boolean }
@@ -471135,7 +471449,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
471135
471449
  }
471136
471450
  };
471137
471451
  return (_ctx, _cache) => {
471138
- return openBlock(), createBlock(_sfc_main$k, {
471452
+ return openBlock(), createBlock(_sfc_main$l, {
471139
471453
  modelValue: visible.value,
471140
471454
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => visible.value = $event),
471141
471455
  title: "底图选择",
@@ -471151,23 +471465,23 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
471151
471465
  onClose: handleClose
471152
471466
  }, {
471153
471467
  default: withCtx(() => [
471154
- createElementVNode("div", _hoisted_1$i, [
471155
- createElementVNode("div", _hoisted_2$h, [
471468
+ createElementVNode("div", _hoisted_1$j, [
471469
+ createElementVNode("div", _hoisted_2$i, [
471156
471470
  (openBlock(true), createElementBlock(Fragment, null, renderList(displayBasemaps.value, (basemap) => {
471157
471471
  return openBlock(), createElementBlock("div", {
471158
471472
  key: basemap.id,
471159
471473
  class: normalizeClass(["basemap-item", { active: selectedBasemap.value === basemap.id }]),
471160
471474
  onClick: ($event) => selectBasemap(basemap)
471161
471475
  }, [
471162
- createElementVNode("div", _hoisted_4$h, [
471476
+ createElementVNode("div", _hoisted_4$i, [
471163
471477
  createElementVNode("img", {
471164
471478
  src: basemap.thumbnail,
471165
471479
  alt: basemap.name,
471166
471480
  loading: "lazy"
471167
- }, null, 8, _hoisted_5$h)
471481
+ }, null, 8, _hoisted_5$i)
471168
471482
  ]),
471169
471483
  createElementVNode("div", _hoisted_6$e, toDisplayString(basemap.name), 1)
471170
- ], 10, _hoisted_3$h);
471484
+ ], 10, _hoisted_3$i);
471171
471485
  }), 128))
471172
471486
  ])
471173
471487
  ])
@@ -471508,15 +471822,15 @@ class OverviewMapUtil {
471508
471822
  function createOverviewMapUtil() {
471509
471823
  return new OverviewMapUtil();
471510
471824
  }
471511
- const _hoisted_1$h = { class: "measurement-content h-full flex flex-col" };
471512
- const _hoisted_2$g = { class: "measurement-header flex justify-between items-center px-6 py-4" };
471513
- const _hoisted_3$g = { class: "measurement-result py-8 text-center" };
471514
- const _hoisted_4$g = { class: "result-value" };
471515
- const _hoisted_5$g = { class: "tool-grid flex-1 py-5" };
471825
+ const _hoisted_1$i = { class: "measurement-content h-full flex flex-col" };
471826
+ const _hoisted_2$h = { class: "measurement-header flex justify-between items-center px-6 py-4" };
471827
+ const _hoisted_3$h = { class: "measurement-result py-8 text-center" };
471828
+ const _hoisted_4$h = { class: "result-value" };
471829
+ const _hoisted_5$h = { class: "tool-grid flex-1 py-5" };
471516
471830
  const _hoisted_6$d = ["onClick"];
471517
471831
  const _hoisted_7$c = ["src", "alt"];
471518
471832
  const _hoisted_8$9 = { class: "tool-label" };
471519
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
471833
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
471520
471834
  __name: "MeasurementDialog",
471521
471835
  props: {
471522
471836
  modelValue: { type: Boolean }
@@ -471748,7 +472062,7 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
471748
472062
  const _component_el_option_group = resolveComponent("el-option-group");
471749
472063
  const _component_el_select = resolveComponent("el-select");
471750
472064
  const _component_el_button = resolveComponent("el-button");
471751
- return openBlock(), createBlock(_sfc_main$k, {
472065
+ return openBlock(), createBlock(_sfc_main$l, {
471752
472066
  modelValue: dialogVisible.value,
471753
472067
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
471754
472068
  title: "图上量算",
@@ -471758,8 +472072,8 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
471758
472072
  cacheId: "measurement-dialog"
471759
472073
  }, {
471760
472074
  default: withCtx(() => [
471761
- createElementVNode("div", _hoisted_1$h, [
471762
- createElementVNode("div", _hoisted_2$g, [
472075
+ createElementVNode("div", _hoisted_1$i, [
472076
+ createElementVNode("div", _hoisted_2$h, [
471763
472077
  createVNode$1(_component_el_select, {
471764
472078
  modelValue: selectedUnit.value,
471765
472079
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedUnit.value = $event),
@@ -471827,10 +472141,10 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
471827
472141
  _: 1
471828
472142
  })
471829
472143
  ]),
471830
- createElementVNode("div", _hoisted_3$g, [
471831
- createElementVNode("div", _hoisted_4$g, toDisplayString(getDisplayValue()), 1)
472144
+ createElementVNode("div", _hoisted_3$h, [
472145
+ createElementVNode("div", _hoisted_4$h, toDisplayString(getDisplayValue()), 1)
471832
472146
  ]),
471833
- createElementVNode("div", _hoisted_5$g, [
472147
+ createElementVNode("div", _hoisted_5$h, [
471834
472148
  (openBlock(), createElementBlock(Fragment, null, renderList(measurementTools, (tool) => {
471835
472149
  return createElementVNode("div", {
471836
472150
  key: tool.type,
@@ -471860,13 +472174,13 @@ const _export_sfc = (sfc, props) => {
471860
472174
  }
471861
472175
  return target;
471862
472176
  };
471863
- const MeasurementDialog = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-d868b567"]]);
471864
- const _hoisted_1$g = { class: "coordinate-content" };
471865
- const _hoisted_2$f = { class: "format-selection" };
471866
- const _hoisted_3$f = { class: "format-options" };
471867
- const _hoisted_4$f = { class: "coordinate-input" };
471868
- const _hoisted_5$f = { class: "dialog-footer" };
471869
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
472177
+ const MeasurementDialog = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-d868b567"]]);
472178
+ const _hoisted_1$h = { class: "coordinate-content" };
472179
+ const _hoisted_2$g = { class: "format-selection" };
472180
+ const _hoisted_3$g = { class: "format-options" };
472181
+ const _hoisted_4$g = { class: "coordinate-input" };
472182
+ const _hoisted_5$g = { class: "dialog-footer" };
472183
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
471870
472184
  __name: "CoordinateLocationDialog",
471871
472185
  props: {
471872
472186
  modelValue: { type: Boolean }
@@ -472016,7 +472330,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472016
472330
  const _component_el_form_item = resolveComponent("el-form-item");
472017
472331
  const _component_el_form = resolveComponent("el-form");
472018
472332
  const _component_el_button = resolveComponent("el-button");
472019
- return openBlock(), createBlock(_sfc_main$k, {
472333
+ return openBlock(), createBlock(_sfc_main$l, {
472020
472334
  modelValue: dialogVisible.value,
472021
472335
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => dialogVisible.value = $event),
472022
472336
  title: "坐标拾取",
@@ -472027,7 +472341,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472027
472341
  class: "coordinate-dialog"
472028
472342
  }, {
472029
472343
  footer: withCtx(() => [
472030
- createElementVNode("div", _hoisted_5$f, [
472344
+ createElementVNode("div", _hoisted_5$g, [
472031
472345
  createVNode$1(_component_el_button, {
472032
472346
  type: "primary",
472033
472347
  onClick: getCurrentLocation
@@ -472049,10 +472363,10 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472049
472363
  ])
472050
472364
  ]),
472051
472365
  default: withCtx(() => [
472052
- createElementVNode("div", _hoisted_1$g, [
472053
- createElementVNode("div", _hoisted_2$f, [
472366
+ createElementVNode("div", _hoisted_1$h, [
472367
+ createElementVNode("div", _hoisted_2$g, [
472054
472368
  _cache[6] || (_cache[6] = createElementVNode("div", { class: "format-title" }, "坐标格式", -1)),
472055
- createElementVNode("div", _hoisted_3$f, [
472369
+ createElementVNode("div", _hoisted_3$g, [
472056
472370
  createVNode$1(_component_el_radio_group, {
472057
472371
  modelValue: selectedFormat.value,
472058
472372
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedFormat.value = $event),
@@ -472076,7 +472390,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472076
472390
  }, 8, ["modelValue"])
472077
472391
  ])
472078
472392
  ]),
472079
- createElementVNode("div", _hoisted_4$f, [
472393
+ createElementVNode("div", _hoisted_4$g, [
472080
472394
  createVNode$1(_component_el_form, {
472081
472395
  model: coordinateForm,
472082
472396
  "label-width": "60px"
@@ -472117,14 +472431,14 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472117
472431
  };
472118
472432
  }
472119
472433
  });
472120
- const _hoisted_1$f = { class: "region-content" };
472121
- const _hoisted_2$e = {
472434
+ const _hoisted_1$g = { class: "region-content" };
472435
+ const _hoisted_2$f = {
472122
472436
  key: 0,
472123
472437
  class: "region-categories"
472124
472438
  };
472125
- const _hoisted_3$e = { class: "region-group" };
472126
- const _hoisted_4$e = { class: "region-items" };
472127
- const _hoisted_5$e = { class: "region-group" };
472439
+ const _hoisted_3$f = { class: "region-group" };
472440
+ const _hoisted_4$f = { class: "region-items" };
472441
+ const _hoisted_5$f = { class: "region-group" };
472128
472442
  const _hoisted_6$c = { class: "region-items" };
472129
472443
  const _hoisted_7$b = { class: "region-group" };
472130
472444
  const _hoisted_8$8 = { class: "region-items" };
@@ -472143,7 +472457,7 @@ const _hoisted_19$4 = {
472143
472457
  class: "sub-regions"
472144
472458
  };
472145
472459
  const _hoisted_20$4 = { class: "district-grid" };
472146
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
472460
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
472147
472461
  __name: "RegionNavigationDialog",
472148
472462
  props: {
472149
472463
  modelValue: { type: Boolean }
@@ -473228,7 +473542,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473228
473542
  const _component_el_button = resolveComponent("el-button");
473229
473543
  const _component_el_tab_pane = resolveComponent("el-tab-pane");
473230
473544
  const _component_el_tabs = resolveComponent("el-tabs");
473231
- return openBlock(), createBlock(_sfc_main$k, {
473545
+ return openBlock(), createBlock(_sfc_main$l, {
473232
473546
  modelValue: dialogVisible.value,
473233
473547
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
473234
473548
  title: "地区导航",
@@ -473239,7 +473553,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473239
473553
  class: "region-dialog"
473240
473554
  }, {
473241
473555
  default: withCtx(() => [
473242
- createElementVNode("div", _hoisted_1$f, [
473556
+ createElementVNode("div", _hoisted_1$g, [
473243
473557
  createVNode$1(_component_el_tabs, {
473244
473558
  modelValue: activeTab.value,
473245
473559
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTab.value = $event),
@@ -473257,10 +473571,10 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473257
473571
  closable: index2 > 0
473258
473572
  }, {
473259
473573
  default: withCtx(() => [
473260
- tab.name === "china" ? (openBlock(), createElementBlock("div", _hoisted_2$e, [
473261
- createElementVNode("div", _hoisted_3$e, [
473574
+ tab.name === "china" ? (openBlock(), createElementBlock("div", _hoisted_2$f, [
473575
+ createElementVNode("div", _hoisted_3$f, [
473262
473576
  _cache[2] || (_cache[2] = createElementVNode("div", { class: "group-title" }, "华北", -1)),
473263
- createElementVNode("div", _hoisted_4$e, [
473577
+ createElementVNode("div", _hoisted_4$f, [
473264
473578
  (openBlock(true), createElementBlock(Fragment, null, renderList(regions.north, (region) => {
473265
473579
  return openBlock(), createBlock(_component_el_button, {
473266
473580
  key: region.code,
@@ -473276,7 +473590,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473276
473590
  }), 128))
473277
473591
  ])
473278
473592
  ]),
473279
- createElementVNode("div", _hoisted_5$e, [
473593
+ createElementVNode("div", _hoisted_5$f, [
473280
473594
  _cache[3] || (_cache[3] = createElementVNode("div", { class: "group-title" }, "东北", -1)),
473281
473595
  createElementVNode("div", _hoisted_6$c, [
473282
473596
  (openBlock(true), createElementBlock(Fragment, null, renderList(regions.northeast, (region) => {
@@ -473432,12 +473746,12 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473432
473746
  };
473433
473747
  }
473434
473748
  });
473435
- const _hoisted_1$e = { class: "markers-content" };
473436
- const _hoisted_2$d = { class: "toolbar" };
473437
- const _hoisted_3$d = { class: "search-filter" };
473438
- const _hoisted_4$d = { class: "markers-list" };
473439
- const _hoisted_5$d = { class: "marker-name" };
473440
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
473749
+ const _hoisted_1$f = { class: "markers-content" };
473750
+ const _hoisted_2$e = { class: "toolbar" };
473751
+ const _hoisted_3$e = { class: "search-filter" };
473752
+ const _hoisted_4$e = { class: "markers-list" };
473753
+ const _hoisted_5$e = { class: "marker-name" };
473754
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
473441
473755
  __name: "MyMarkersDialog",
473442
473756
  props: {
473443
473757
  modelValue: { type: Boolean }
@@ -473763,7 +474077,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473763
474077
  const _component_el_form_item = resolveComponent("el-form-item");
473764
474078
  const _component_el_form = resolveComponent("el-form");
473765
474079
  return openBlock(), createElementBlock(Fragment, null, [
473766
- createVNode$1(_sfc_main$k, {
474080
+ createVNode$1(_sfc_main$l, {
473767
474081
  modelValue: dialogVisible.value,
473768
474082
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => dialogVisible.value = $event),
473769
474083
  title: "我的标记",
@@ -473774,8 +474088,8 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473774
474088
  class: "markers-dialog"
473775
474089
  }, {
473776
474090
  default: withCtx(() => [
473777
- createElementVNode("div", _hoisted_1$e, [
473778
- createElementVNode("div", _hoisted_2$d, [
474091
+ createElementVNode("div", _hoisted_1$f, [
474092
+ createElementVNode("div", _hoisted_2$e, [
473779
474093
  createVNode$1(_component_el_button, {
473780
474094
  type: "primary",
473781
474095
  icon: unref(plus_default),
@@ -473816,7 +474130,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473816
474130
  _: 1
473817
474131
  }, 8, ["icon", "disabled"])
473818
474132
  ]),
473819
- createElementVNode("div", _hoisted_3$d, [
474133
+ createElementVNode("div", _hoisted_3$e, [
473820
474134
  createVNode$1(_component_el_input, {
473821
474135
  modelValue: searchKeyword.value,
473822
474136
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchKeyword.value = $event),
@@ -473849,7 +474163,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473849
474163
  _: 1
473850
474164
  }, 8, ["modelValue"])
473851
474165
  ]),
473852
- createElementVNode("div", _hoisted_4$d, [
474166
+ createElementVNode("div", _hoisted_4$e, [
473853
474167
  createVNode$1(_component_el_table, {
473854
474168
  data: filteredMarkers.value,
473855
474169
  height: "300",
@@ -473863,7 +474177,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473863
474177
  width: "120"
473864
474178
  }, {
473865
474179
  default: withCtx(({ row }) => [
473866
- createElementVNode("div", _hoisted_5$d, [
474180
+ createElementVNode("div", _hoisted_5$e, [
473867
474181
  createVNode$1(_component_el_icon, {
473868
474182
  color: row.color,
473869
474183
  size: "16"
@@ -473937,7 +474251,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
473937
474251
  ]),
473938
474252
  _: 1
473939
474253
  }, 8, ["modelValue"]),
473940
- createVNode$1(_sfc_main$k, {
474254
+ createVNode$1(_sfc_main$l, {
473941
474255
  modelValue: showAddDialog.value,
473942
474256
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => showAddDialog.value = $event),
473943
474257
  title: "添加标记",
@@ -474008,11 +474322,11 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
474008
474322
  };
474009
474323
  }
474010
474324
  });
474011
- const _hoisted_1$d = { class: "bookmarks-content" };
474012
- const _hoisted_2$c = { class: "toolbar" };
474013
- const _hoisted_3$c = { class: "search-filter" };
474014
- const _hoisted_4$c = { class: "bookmarks-grid" };
474015
- const _hoisted_5$c = ["onClick"];
474325
+ const _hoisted_1$e = { class: "bookmarks-content" };
474326
+ const _hoisted_2$d = { class: "toolbar" };
474327
+ const _hoisted_3$d = { class: "search-filter" };
474328
+ const _hoisted_4$d = { class: "bookmarks-grid" };
474329
+ const _hoisted_5$d = ["onClick"];
474016
474330
  const _hoisted_6$b = { class: "bookmark-thumbnail" };
474017
474331
  const _hoisted_7$a = { class: "thumbnail-placeholder" };
474018
474332
  const _hoisted_8$7 = { class: "bookmark-overlay" };
@@ -474034,7 +474348,7 @@ const _hoisted_19$3 = {
474034
474348
  class: "statistics"
474035
474349
  };
474036
474350
  const _hoisted_20$3 = { class: "dialog-footer" };
474037
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
474351
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
474038
474352
  __name: "ViewBookmarksDialog",
474039
474353
  props: {
474040
474354
  modelValue: { type: Boolean }
@@ -474293,7 +474607,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474293
474607
  const _component_el_form_item = resolveComponent("el-form-item");
474294
474608
  const _component_el_slider = resolveComponent("el-slider");
474295
474609
  const _component_el_form = resolveComponent("el-form");
474296
- return openBlock(), createBlock(_sfc_main$k, {
474610
+ return openBlock(), createBlock(_sfc_main$l, {
474297
474611
  modelValue: dialogVisible.value,
474298
474612
  "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => dialogVisible.value = $event),
474299
474613
  title: "视角书签",
@@ -474314,8 +474628,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474314
474628
  ])
474315
474629
  ]),
474316
474630
  default: withCtx(() => [
474317
- createElementVNode("div", _hoisted_1$d, [
474318
- createElementVNode("div", _hoisted_2$c, [
474631
+ createElementVNode("div", _hoisted_1$e, [
474632
+ createElementVNode("div", _hoisted_2$d, [
474319
474633
  createVNode$1(_component_el_button, {
474320
474634
  type: "primary",
474321
474635
  icon: unref(plus_default),
@@ -474355,7 +474669,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474355
474669
  _: 1
474356
474670
  }, 8, ["icon", "disabled"])
474357
474671
  ]),
474358
- createElementVNode("div", _hoisted_3$c, [
474672
+ createElementVNode("div", _hoisted_3$d, [
474359
474673
  createVNode$1(_component_el_input, {
474360
474674
  modelValue: searchKeyword.value,
474361
474675
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchKeyword.value = $event),
@@ -474410,7 +474724,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474410
474724
  _: 1
474411
474725
  }, 8, ["modelValue"])
474412
474726
  ]),
474413
- createElementVNode("div", _hoisted_4$c, [
474727
+ createElementVNode("div", _hoisted_4$d, [
474414
474728
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredBookmarks.value, (bookmark, index2) => {
474415
474729
  return openBlock(), createElementBlock("div", {
474416
474730
  key: bookmark.id,
@@ -474506,7 +474820,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474506
474820
  ]),
474507
474821
  createElementVNode("div", _hoisted_17$4, toDisplayString(formatTime(bookmark.createTime)), 1)
474508
474822
  ])
474509
- ], 8, _hoisted_5$c);
474823
+ ], 8, _hoisted_5$d);
474510
474824
  }), 128))
474511
474825
  ]),
474512
474826
  filteredBookmarks.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_18$4, [
@@ -474569,7 +474883,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474569
474883
  })
474570
474884
  ])) : createCommentVNode("", true)
474571
474885
  ]),
474572
- createVNode$1(_sfc_main$k, {
474886
+ createVNode$1(_sfc_main$l, {
474573
474887
  modelValue: showBookmarkForm.value,
474574
474888
  "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => showBookmarkForm.value = $event),
474575
474889
  title: editingIndex.value >= 0 ? "编辑书签" : "保存视角书签",
@@ -474723,11 +475037,11 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474723
475037
  };
474724
475038
  }
474725
475039
  });
474726
- const _hoisted_1$c = { class: "py-2.5" };
474727
- const _hoisted_2$b = { class: "h-150 overflow-y-auto" };
474728
- const _hoisted_3$b = { class: "flex items-center justify-between" };
474729
- const _hoisted_4$b = { class: "mb-5" };
474730
- const _hoisted_5$b = { class: "mb-3" };
475040
+ const _hoisted_1$d = { class: "py-2.5" };
475041
+ const _hoisted_2$c = { class: "h-150 overflow-y-auto" };
475042
+ const _hoisted_3$c = { class: "flex items-center justify-between" };
475043
+ const _hoisted_4$c = { class: "mb-5" };
475044
+ const _hoisted_5$c = { class: "mb-3" };
474731
475045
  const _hoisted_6$a = {
474732
475046
  key: 0,
474733
475047
  class: "mb-3"
@@ -474812,7 +475126,7 @@ const _hoisted_44 = {
474812
475126
  const _hoisted_45 = { key: 0 };
474813
475127
  const _hoisted_46 = { key: 0 };
474814
475128
  const _hoisted_47 = { class: "text-right" };
474815
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
475129
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
474816
475130
  __name: "MapPrintDialog",
474817
475131
  props: {
474818
475132
  modelValue: { type: Boolean },
@@ -475191,7 +475505,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
475191
475505
  const _component_el_col = resolveComponent("el-col");
475192
475506
  const _component_el_button_group = resolveComponent("el-button-group");
475193
475507
  const _component_el_row = resolveComponent("el-row");
475194
- return openBlock(), createBlock(_sfc_main$k, {
475508
+ return openBlock(), createBlock(_sfc_main$l, {
475195
475509
  modelValue: dialogVisible.value,
475196
475510
  "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => dialogVisible.value = $event),
475197
475511
  title: "地图打印",
@@ -475229,15 +475543,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
475229
475543
  ])
475230
475544
  ]),
475231
475545
  default: withCtx(() => [
475232
- createElementVNode("div", _hoisted_1$c, [
475546
+ createElementVNode("div", _hoisted_1$d, [
475233
475547
  createVNode$1(_component_el_row, { gutter: 20 }, {
475234
475548
  default: withCtx(() => [
475235
475549
  createVNode$1(_component_el_col, { span: 8 }, {
475236
475550
  default: withCtx(() => [
475237
- createElementVNode("div", _hoisted_2$b, [
475551
+ createElementVNode("div", _hoisted_2$c, [
475238
475552
  createVNode$1(_component_el_card, { shadow: "hover" }, {
475239
475553
  header: withCtx(() => [
475240
- createElementVNode("div", _hoisted_3$b, [
475554
+ createElementVNode("div", _hoisted_3$c, [
475241
475555
  _cache[18] || (_cache[18] = createElementVNode("span", null, "打印设置", -1)),
475242
475556
  createVNode$1(_component_el_button, {
475243
475557
  type: "text",
@@ -475257,9 +475571,9 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
475257
475571
  ])
475258
475572
  ]),
475259
475573
  default: withCtx(() => [
475260
- createElementVNode("div", _hoisted_4$b, [
475574
+ createElementVNode("div", _hoisted_4$c, [
475261
475575
  _cache[21] || (_cache[21] = createElementVNode("label", { class: "block text-sm font-medium text-gray-700 mb-2" }, "纸张设置", -1)),
475262
- createElementVNode("div", _hoisted_5$b, [
475576
+ createElementVNode("div", _hoisted_5$c, [
475263
475577
  createVNode$1(_component_el_select, {
475264
475578
  modelValue: printSettings.paperSize,
475265
475579
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => printSettings.paperSize = $event),
@@ -475798,17 +476112,17 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
475798
476112
  };
475799
476113
  }
475800
476114
  });
475801
- const _hoisted_1$b = { class: "mark-tab-container" };
475802
- const _hoisted_2$a = { class: "continuous-switch" };
475803
- const _hoisted_3$a = { class: "tools-grid" };
475804
- const _hoisted_4$a = ["onClick"];
475805
- const _hoisted_5$a = ["src"];
476115
+ const _hoisted_1$c = { class: "mark-tab-container" };
476116
+ const _hoisted_2$b = { class: "continuous-switch" };
476117
+ const _hoisted_3$b = { class: "tools-grid" };
476118
+ const _hoisted_4$b = ["onClick"];
476119
+ const _hoisted_5$b = ["src"];
475806
476120
  const _hoisted_6$9 = { class: "tool-label" };
475807
476121
  const _hoisted_7$8 = {
475808
476122
  key: 0,
475809
476123
  class: "stop-drawing-section"
475810
476124
  };
475811
- const _sfc_main$c = {
476125
+ const _sfc_main$d = {
475812
476126
  __name: "MarkTab",
475813
476127
  setup(__props) {
475814
476128
  const mapRef = inject("map");
@@ -476331,7 +476645,7 @@ const _sfc_main$c = {
476331
476645
  const _component_el_select = resolveComponent("el-select");
476332
476646
  const _component_el_switch = resolveComponent("el-switch");
476333
476647
  const _component_el_button = resolveComponent("el-button");
476334
- return openBlock(), createElementBlock("div", _hoisted_1$b, [
476648
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
476335
476649
  createVNode$1(_component_el_select, {
476336
476650
  modelValue: selectedType.value,
476337
476651
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedType.value = $event),
@@ -476349,7 +476663,7 @@ const _sfc_main$c = {
476349
476663
  ]),
476350
476664
  _: 1
476351
476665
  }, 8, ["modelValue"]),
476352
- createElementVNode("div", _hoisted_2$a, [
476666
+ createElementVNode("div", _hoisted_2$b, [
476353
476667
  _cache[2] || (_cache[2] = createElementVNode("span", { class: "switch-label" }, "连续标绘模式", -1)),
476354
476668
  createVNode$1(_component_el_switch, {
476355
476669
  modelValue: continuousDrawing.value,
@@ -476357,7 +476671,7 @@ const _sfc_main$c = {
476357
476671
  size: "small"
476358
476672
  }, null, 8, ["modelValue"])
476359
476673
  ]),
476360
- createElementVNode("div", _hoisted_3$a, [
476674
+ createElementVNode("div", _hoisted_3$b, [
476361
476675
  (openBlock(true), createElementBlock(Fragment, null, renderList(currentTools.value, (tool, idx) => {
476362
476676
  return openBlock(), createElementBlock("div", {
476363
476677
  key: idx,
@@ -476369,12 +476683,12 @@ const _sfc_main$c = {
476369
476683
  src: tool.icon,
476370
476684
  class: "tool-image",
476371
476685
  alt: "tool icon"
476372
- }, null, 8, _hoisted_5$a)) : (openBlock(), createElementBlock("i", {
476686
+ }, null, 8, _hoisted_5$b)) : (openBlock(), createElementBlock("i", {
476373
476687
  key: 1,
476374
476688
  class: normalizeClass([tool.icon, "tool-icon-large"])
476375
476689
  }, null, 2)),
476376
476690
  createElementVNode("span", _hoisted_6$9, toDisplayString(tool.label), 1)
476377
- ], 8, _hoisted_4$a);
476691
+ ], 8, _hoisted_4$b);
476378
476692
  }), 128))
476379
476693
  ]),
476380
476694
  activeDrawingTool.value && continuousDrawing.value ? (openBlock(), createElementBlock("div", _hoisted_7$8, [
@@ -476394,18 +476708,18 @@ const _sfc_main$c = {
476394
476708
  };
476395
476709
  }
476396
476710
  };
476397
- const MarkTab = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-127b85ab"]]);
476398
- const _hoisted_1$a = { class: "list-tab-container" };
476399
- const _hoisted_2$9 = { class: "toolbar" };
476400
- const _hoisted_3$9 = { class: "toolbar-left" };
476401
- const _hoisted_4$9 = { class: "data-count" };
476402
- const _hoisted_5$9 = { class: "list-content" };
476711
+ const MarkTab = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-127b85ab"]]);
476712
+ const _hoisted_1$b = { class: "list-tab-container" };
476713
+ const _hoisted_2$a = { class: "toolbar" };
476714
+ const _hoisted_3$a = { class: "toolbar-left" };
476715
+ const _hoisted_4$a = { class: "data-count" };
476716
+ const _hoisted_5$a = { class: "list-content" };
476403
476717
  const _hoisted_6$8 = { class: "tree-node" };
476404
476718
  const _hoisted_7$7 = {
476405
476719
  key: 1,
476406
476720
  class: "empty-state"
476407
476721
  };
476408
- const _sfc_main$b = {
476722
+ const _sfc_main$c = {
476409
476723
  __name: "ListTab",
476410
476724
  setup(__props) {
476411
476725
  const groups = ref([
@@ -476426,9 +476740,9 @@ const _sfc_main$b = {
476426
476740
  return (_ctx, _cache) => {
476427
476741
  const _component_el_button = resolveComponent("el-button");
476428
476742
  const _component_el_tree = resolveComponent("el-tree");
476429
- return openBlock(), createElementBlock("div", _hoisted_1$a, [
476430
- createElementVNode("div", _hoisted_2$9, [
476431
- createElementVNode("div", _hoisted_3$9, [
476743
+ return openBlock(), createElementBlock("div", _hoisted_1$b, [
476744
+ createElementVNode("div", _hoisted_2$a, [
476745
+ createElementVNode("div", _hoisted_3$a, [
476432
476746
  _cache[2] || (_cache[2] = createElementVNode("span", { class: "toolbar-title" }, "分组管理:", -1)),
476433
476747
  createVNode$1(_component_el_button, {
476434
476748
  type: "primary",
@@ -476451,9 +476765,9 @@ const _sfc_main$b = {
476451
476765
  _: 1
476452
476766
  })
476453
476767
  ]),
476454
- createElementVNode("div", _hoisted_4$9, "共" + toDisplayString(groups.value.length) + "条数据", 1)
476768
+ createElementVNode("div", _hoisted_4$a, "共" + toDisplayString(groups.value.length) + "条数据", 1)
476455
476769
  ]),
476456
- createElementVNode("div", _hoisted_5$9, [
476770
+ createElementVNode("div", _hoisted_5$a, [
476457
476771
  groups.value.length ? (openBlock(), createBlock(_component_el_tree, {
476458
476772
  key: 0,
476459
476773
  data: groups.value,
@@ -476476,15 +476790,15 @@ const _sfc_main$b = {
476476
476790
  };
476477
476791
  }
476478
476792
  };
476479
- const ListTab = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-1cc008ea"]]);
476480
- const _hoisted_1$9 = { class: "dialog-content" };
476481
- const _hoisted_2$8 = { class: "toolbar" };
476482
- const _hoisted_3$8 = { class: "toolbar-left" };
476483
- const _hoisted_4$8 = ["onClick"];
476484
- const _hoisted_5$8 = { class: "toolbar-right" };
476793
+ const ListTab = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-1cc008ea"]]);
476794
+ const _hoisted_1$a = { class: "dialog-content" };
476795
+ const _hoisted_2$9 = { class: "toolbar" };
476796
+ const _hoisted_3$9 = { class: "toolbar-left" };
476797
+ const _hoisted_4$9 = ["onClick"];
476798
+ const _hoisted_5$9 = { class: "toolbar-right" };
476485
476799
  const _hoisted_6$7 = ["onClick"];
476486
476800
  const _hoisted_7$6 = { class: "content-area" };
476487
- const _sfc_main$a = {
476801
+ const _sfc_main$b = {
476488
476802
  __name: "index",
476489
476803
  setup(__props) {
476490
476804
  const visible = ref(true);
@@ -476546,9 +476860,9 @@ const _sfc_main$a = {
476546
476860
  onClose: handleClose
476547
476861
  }, {
476548
476862
  default: withCtx(() => [
476549
- createElementVNode("div", _hoisted_1$9, [
476550
- createElementVNode("div", _hoisted_2$8, [
476551
- createElementVNode("div", _hoisted_3$8, [
476863
+ createElementVNode("div", _hoisted_1$a, [
476864
+ createElementVNode("div", _hoisted_2$9, [
476865
+ createElementVNode("div", _hoisted_3$9, [
476552
476866
  (openBlock(), createElementBlock(Fragment, null, renderList(leftTools, (tool, idx) => {
476553
476867
  return createVNode$1(_component_el_tooltip, {
476554
476868
  key: idx,
@@ -476560,13 +476874,13 @@ const _sfc_main$a = {
476560
476874
  createElementVNode("i", {
476561
476875
  class: normalizeClass([tool.icon, "tool-icon"]),
476562
476876
  onClick: ($event) => handleToolClick(tool, "left", idx)
476563
- }, null, 10, _hoisted_4$8)
476877
+ }, null, 10, _hoisted_4$9)
476564
476878
  ]),
476565
476879
  _: 2
476566
476880
  }, 1032, ["content"]);
476567
476881
  }), 64))
476568
476882
  ]),
476569
- createElementVNode("div", _hoisted_5$8, [
476883
+ createElementVNode("div", _hoisted_5$9, [
476570
476884
  (openBlock(), createElementBlock(Fragment, null, renderList(rightTools, (tool, idx) => {
476571
476885
  return createVNode$1(_component_el_tooltip, {
476572
476886
  key: idx,
@@ -476622,9 +476936,9 @@ const _sfc_main$a = {
476622
476936
  };
476623
476937
  }
476624
476938
  };
476625
- const MapDrawingDialog = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-16fc7a81"]]);
476626
- const _hoisted_1$8 = { class: "flex" };
476627
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
476939
+ const MapDrawingDialog = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-16fc7a81"]]);
476940
+ const _hoisted_1$9 = { class: "flex" };
476941
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
476628
476942
  __name: "MapToolbar",
476629
476943
  props: {
476630
476944
  config: { default: void 0 },
@@ -476815,7 +477129,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
476815
477129
  class: "main-menu-item"
476816
477130
  }, {
476817
477131
  title: withCtx(() => [
476818
- createElementVNode("div", _hoisted_1$8, [
477132
+ createElementVNode("div", _hoisted_1$9, [
476819
477133
  createElementVNode("div", null, [
476820
477134
  createVNode$1(_component_el_icon, null, {
476821
477135
  default: withCtx(() => [
@@ -476992,7 +477306,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
476992
477306
  ]),
476993
477307
  _: 1
476994
477308
  }, 8, ["default-active"]),
476995
- createVNode$1(_sfc_main$j, {
477309
+ createVNode$1(_sfc_main$k, {
476996
477310
  modelValue: showBasemapPanel.value,
476997
477311
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => showBasemapPanel.value = $event),
476998
477312
  config: props.config,
@@ -477003,28 +477317,28 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
477003
477317
  modelValue: showMeasurement.value,
477004
477318
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showMeasurement.value = $event)
477005
477319
  }, null, 8, ["modelValue"]),
477006
- createVNode$1(_sfc_main$h, {
477320
+ createVNode$1(_sfc_main$i, {
477007
477321
  ref_key: "coordinateLocationDialogRef",
477008
477322
  ref: coordinateLocationDialogRef,
477009
477323
  modelValue: showCoordinateLocation.value,
477010
477324
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => showCoordinateLocation.value = $event)
477011
477325
  }, null, 8, ["modelValue"]),
477012
- createVNode$1(_sfc_main$g, {
477326
+ createVNode$1(_sfc_main$h, {
477013
477327
  modelValue: showRegionNavigation.value,
477014
477328
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => showRegionNavigation.value = $event),
477015
477329
  onNavigationAction: handleNavigationAction
477016
477330
  }, null, 8, ["modelValue"]),
477017
- createVNode$1(_sfc_main$f, {
477331
+ createVNode$1(_sfc_main$g, {
477018
477332
  modelValue: showMyMarkers.value,
477019
477333
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => showMyMarkers.value = $event),
477020
477334
  onMarkerAction: handleMarkerAction
477021
477335
  }, null, 8, ["modelValue"]),
477022
- createVNode$1(_sfc_main$e, {
477336
+ createVNode$1(_sfc_main$f, {
477023
477337
  modelValue: showViewBookmarks.value,
477024
477338
  "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => showViewBookmarks.value = $event),
477025
477339
  onBookmarkAction: handleBookmarkAction
477026
477340
  }, null, 8, ["modelValue"]),
477027
- createVNode$1(_sfc_main$d, {
477341
+ createVNode$1(_sfc_main$e, {
477028
477342
  modelValue: showMapPrint.value,
477029
477343
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => showMapPrint.value = $event),
477030
477344
  onPrintAction: handlePrintAction
@@ -477038,7 +477352,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
477038
477352
  };
477039
477353
  }
477040
477354
  });
477041
- const MapToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-f8ee8458"]]);
477355
+ const MapToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-f8ee8458"]]);
477042
477356
  const TIANDITU_CONFIG = {
477043
477357
  baseUrl: "https://api.tianditu.gov.cn/v2/search",
477044
477358
  key: "9a7244dd5d1a1299a52946a3d0f8ff68"
@@ -477698,14 +478012,14 @@ const searchService = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defin
477698
478012
  MapSearchService,
477699
478013
  defaultSearchConfig
477700
478014
  }, Symbol.toStringTag, { value: "Module" }));
477701
- const _hoisted_1$7 = { class: "search-input-wrapper" };
477702
- const _hoisted_2$7 = { class: "search-results" };
477703
- const _hoisted_3$7 = {
478015
+ const _hoisted_1$8 = { class: "search-input-wrapper" };
478016
+ const _hoisted_2$8 = { class: "search-results" };
478017
+ const _hoisted_3$8 = {
477704
478018
  key: 0,
477705
478019
  class: "search-section"
477706
478020
  };
477707
- const _hoisted_4$7 = { class: "section-title" };
477708
- const _hoisted_5$7 = ["onClick"];
478021
+ const _hoisted_4$8 = { class: "section-title" };
478022
+ const _hoisted_5$8 = ["onClick"];
477709
478023
  const _hoisted_6$6 = { class: "item-content" };
477710
478024
  const _hoisted_7$5 = { class: "item-name" };
477711
478025
  const _hoisted_8$5 = { class: "item-address" };
@@ -477734,7 +478048,7 @@ const _hoisted_18$2 = {
477734
478048
  key: 0,
477735
478049
  class: "no-results"
477736
478050
  };
477737
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478051
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
477738
478052
  __name: "MapSearch",
477739
478053
  props: {
477740
478054
  config: { default: () => ({
@@ -477979,7 +478293,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
477979
478293
  class: normalizeClass(["map-search-container", [`position-${position2.value}`, { "search-active": isSearchActive.value }]])
477980
478294
  }, [
477981
478295
  renderSlot(_ctx.$slots, "prepend"),
477982
- createElementVNode("div", _hoisted_1$7, [
478296
+ createElementVNode("div", _hoisted_1$8, [
477983
478297
  renderSlot(_ctx.$slots, "search-input", {
477984
478298
  searchQuery: searchQuery.value,
477985
478299
  placeholder: placeholder.value,
@@ -478035,7 +478349,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478035
478349
  }, 8, ["modelValue", "placeholder"])
478036
478350
  ])
478037
478351
  ]),
478038
- withDirectives(createElementVNode("div", _hoisted_2$7, [
478352
+ withDirectives(createElementVNode("div", _hoisted_2$8, [
478039
478353
  renderSlot(_ctx.$slots, "search-results", {
478040
478354
  searchResults: searchResults.value,
478041
478355
  searchHistory: searchHistory.value,
@@ -478047,9 +478361,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478047
478361
  clearHistory,
478048
478362
  highlightText
478049
478363
  }, () => [
478050
- showHistory.value && searchHistory.value.length > 0 && !searchQuery.value ? (openBlock(), createElementBlock("div", _hoisted_3$7, [
478364
+ showHistory.value && searchHistory.value.length > 0 && !searchQuery.value ? (openBlock(), createElementBlock("div", _hoisted_3$8, [
478051
478365
  renderSlot(_ctx.$slots, "history-title", { clearHistory }, () => [
478052
- createElementVNode("div", _hoisted_4$7, [
478366
+ createElementVNode("div", _hoisted_4$8, [
478053
478367
  _cache[2] || (_cache[2] = createElementVNode("span", null, "搜索历史", -1)),
478054
478368
  createVNode$1(unref(ElButton), {
478055
478369
  type: "text",
@@ -478085,7 +478399,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478085
478399
  createElementVNode("div", _hoisted_7$5, toDisplayString(item.name), 1),
478086
478400
  createElementVNode("div", _hoisted_8$5, toDisplayString(item.address), 1)
478087
478401
  ])
478088
- ], 10, _hoisted_5$7)
478402
+ ], 10, _hoisted_5$8)
478089
478403
  ]);
478090
478404
  }), 128))
478091
478405
  ])) : createCommentVNode("", true),
@@ -478159,7 +478473,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478159
478473
  };
478160
478474
  }
478161
478475
  });
478162
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
478476
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
478163
478477
  __name: "index",
478164
478478
  props: {
478165
478479
  config: {},
@@ -478705,12 +479019,12 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
478705
479019
  };
478706
479020
  }
478707
479021
  });
478708
- const MapControls = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-45410a30"]]);
478709
- const _hoisted_1$6 = { class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 bg-gray-50 rounded-t-lg" };
478710
- const _hoisted_2$6 = { class: "panel-actions" };
478711
- const _hoisted_3$6 = { class: "panel-content max-h-125 overflow-y-auto" };
478712
- const _hoisted_4$6 = { class: "p-2" };
478713
- const _hoisted_5$6 = { class: "legend-content p-2" };
479022
+ const MapControls = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-45410a30"]]);
479023
+ const _hoisted_1$7 = { class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 bg-gray-50 rounded-t-lg" };
479024
+ const _hoisted_2$7 = { class: "panel-actions" };
479025
+ const _hoisted_3$7 = { class: "panel-content max-h-125 overflow-y-auto" };
479026
+ const _hoisted_4$7 = { class: "p-2" };
479027
+ const _hoisted_5$7 = { class: "legend-content p-2" };
478714
479028
  const _hoisted_6$5 = { key: 0 };
478715
479029
  const _hoisted_7$4 = { class: "text-xs text-gray-600" };
478716
479030
  const _hoisted_8$4 = { key: 1 };
@@ -478741,7 +479055,7 @@ const _hoisted_23 = {
478741
479055
  key: 1,
478742
479056
  class: "py-10 px-5 text-center"
478743
479057
  };
478744
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
479058
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
478745
479059
  __name: "LegendPanel",
478746
479060
  props: {
478747
479061
  position: { default: "right" },
@@ -478951,9 +479265,9 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
478951
479265
  class: normalizeClass(["custom-legend-box absolute bg-white rounded-lg bottom-40px shadow-lg transition-all duration-300 max-h-[calc(100vh-40px)] overflow-hidden z-1000", { "legend-collapsed": isCollapsed.value }]),
478952
479266
  style: normalizeStyle$1(panelStyle.value)
478953
479267
  }, [
478954
- createElementVNode("div", _hoisted_1$6, [
479268
+ createElementVNode("div", _hoisted_1$7, [
478955
479269
  _cache[1] || (_cache[1] = createElementVNode("h3", { class: "m-0 text-sm font-semibold text-gray-800" }, "图例", -1)),
478956
- createElementVNode("div", _hoisted_2$6, [
479270
+ createElementVNode("div", _hoisted_2$7, [
478957
479271
  createVNode$1(_component_el_button, {
478958
479272
  link: "",
478959
479273
  size: "small",
@@ -478962,8 +479276,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
478962
479276
  }, null, 8, ["icon"])
478963
479277
  ])
478964
479278
  ]),
478965
- createElementVNode("div", _hoisted_3$6, [
478966
- createElementVNode("div", _hoisted_4$6, [
479279
+ createElementVNode("div", _hoisted_3$7, [
479280
+ createElementVNode("div", _hoisted_4$7, [
478967
479281
  visibleLegends.value.length > 0 ? (openBlock(), createBlock(_component_el_collapse, {
478968
479282
  key: 0,
478969
479283
  modelValue: activeNames.value,
@@ -478979,7 +479293,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
478979
479293
  class: "legend-item"
478980
479294
  }, {
478981
479295
  default: withCtx(() => [
478982
- createElementVNode("div", _hoisted_5$6, [
479296
+ createElementVNode("div", _hoisted_5$7, [
478983
479297
  legend.type === "symbol" ? (openBlock(), createElementBlock("div", _hoisted_6$5, [
478984
479298
  (openBlock(true), createElementBlock(Fragment, null, renderList(legend.items, (item) => {
478985
479299
  return openBlock(), createElementBlock("div", {
@@ -479482,8 +479796,12 @@ class LayerTreeManager {
479482
479796
  __publicField(this, "defaultCheckedKeys", computed(() => {
479483
479797
  const checkedKeys = [];
479484
479798
  const collectVisibleIds = (layer2) => {
479485
- if (layer2.visible && layer2.type !== "group") {
479486
- checkedKeys.push(layer2.id);
479799
+ if (layer2.visible) {
479800
+ const isGroup = layer2.type === "group";
479801
+ const hasChildren = layer2.children && Array.isArray(layer2.children) && layer2.children.length > 0;
479802
+ if (!isGroup || isGroup && !hasChildren) {
479803
+ checkedKeys.push(layer2.id);
479804
+ }
479487
479805
  }
479488
479806
  if (layer2.children && Array.isArray(layer2.children)) {
479489
479807
  layer2.children.forEach((child) => collectVisibleIds(child));
@@ -479524,10 +479842,11 @@ class LayerTreeManager {
479524
479842
  * @returns 树节点数据
479525
479843
  */
479526
479844
  buildLayerNode(layer2) {
479845
+ const isGroup = layer2.type === "group" || layer2.children && Array.isArray(layer2.children) && layer2.children.length > 0;
479527
479846
  const node = {
479528
479847
  id: layer2.id,
479529
479848
  label: layer2.name,
479530
- type: "layer",
479849
+ type: isGroup ? "group" : "layer",
479531
479850
  layerType: layer2.type,
479532
479851
  layerData: layer2
479533
479852
  };
@@ -480181,11 +480500,11 @@ class LayerConfigManager {
480181
480500
  console.log("批量更新结果:", results);
480182
480501
  }
480183
480502
  }
480184
- const _hoisted_1$5 = { class: "filter-panel" };
480185
- const _hoisted_2$5 = { class: "config-section" };
480186
- const _hoisted_3$5 = { class: "config-item" };
480187
- const _hoisted_4$5 = { class: "value-text" };
480188
- const _hoisted_5$5 = { class: "config-item" };
480503
+ const _hoisted_1$6 = { class: "filter-panel" };
480504
+ const _hoisted_2$6 = { class: "config-section" };
480505
+ const _hoisted_3$6 = { class: "config-item" };
480506
+ const _hoisted_4$6 = { class: "value-text" };
480507
+ const _hoisted_5$6 = { class: "config-item" };
480189
480508
  const _hoisted_6$4 = { class: "value-text" };
480190
480509
  const _hoisted_7$3 = { class: "config-item" };
480191
480510
  const _hoisted_8$3 = { class: "value-text" };
@@ -480202,7 +480521,7 @@ const _hoisted_18 = { class: "config-item" };
480202
480521
  const _hoisted_19 = { class: "value-text" };
480203
480522
  const _hoisted_20 = { class: "config-section" };
480204
480523
  const _hoisted_21 = { class: "preset-buttons" };
480205
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
480524
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
480206
480525
  __name: "FilterPanel",
480207
480526
  props: {
480208
480527
  filters: {}
@@ -480222,10 +480541,10 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
480222
480541
  return (_ctx, _cache) => {
480223
480542
  const _component_el_slider = resolveComponent("el-slider");
480224
480543
  const _component_el_button = resolveComponent("el-button");
480225
- return openBlock(), createElementBlock("div", _hoisted_1$5, [
480226
- createElementVNode("div", _hoisted_2$5, [
480544
+ return openBlock(), createElementBlock("div", _hoisted_1$6, [
480545
+ createElementVNode("div", _hoisted_2$6, [
480227
480546
  _cache[15] || (_cache[15] = createElementVNode("h5", null, "色彩调整", -1)),
480228
- createElementVNode("div", _hoisted_3$5, [
480547
+ createElementVNode("div", _hoisted_3$6, [
480229
480548
  _cache[11] || (_cache[11] = createElementVNode("label", null, "色相:", -1)),
480230
480549
  createVNode$1(_component_el_slider, {
480231
480550
  modelValue: _ctx.filters.hue,
@@ -480235,9 +480554,9 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
480235
480554
  step: 1,
480236
480555
  onInput: handleFilterChange
480237
480556
  }, null, 8, ["modelValue"]),
480238
- createElementVNode("span", _hoisted_4$5, toDisplayString(_ctx.filters.hue) + "°", 1)
480557
+ createElementVNode("span", _hoisted_4$6, toDisplayString(_ctx.filters.hue) + "°", 1)
480239
480558
  ]),
480240
- createElementVNode("div", _hoisted_5$5, [
480559
+ createElementVNode("div", _hoisted_5$6, [
480241
480560
  _cache[12] || (_cache[12] = createElementVNode("label", null, "饱和度:", -1)),
480242
480561
  createVNode$1(_component_el_slider, {
480243
480562
  modelValue: _ctx.filters.saturate,
@@ -480372,14 +480691,14 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
480372
480691
  };
480373
480692
  }
480374
480693
  });
480375
- const _hoisted_1$4 = { class: "style-config-panel" };
480376
- const _hoisted_2$4 = { class: "panel-title" };
480377
- const _hoisted_3$4 = {
480694
+ const _hoisted_1$5 = { class: "style-config-panel" };
480695
+ const _hoisted_2$5 = { class: "panel-title" };
480696
+ const _hoisted_3$5 = {
480378
480697
  key: 0,
480379
480698
  class: "config-section"
480380
480699
  };
480381
- const _hoisted_4$4 = { class: "config-item" };
480382
- const _hoisted_5$4 = { class: "value-text" };
480700
+ const _hoisted_4$5 = { class: "config-item" };
480701
+ const _hoisted_5$5 = { class: "value-text" };
480383
480702
  const _hoisted_6$3 = { class: "config-item" };
480384
480703
  const _hoisted_7$2 = { class: "value-text" };
480385
480704
  const _hoisted_8$2 = {
@@ -480391,7 +480710,7 @@ const _hoisted_10$1 = { class: "config-item" };
480391
480710
  const _hoisted_11$1 = { class: "config-item" };
480392
480711
  const _hoisted_12$1 = { class: "config-item" };
480393
480712
  const _hoisted_13$1 = { class: "panel-actions" };
480394
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
480713
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
480395
480714
  __name: "LayerStyleConfig",
480396
480715
  props: {
480397
480716
  layerData: {}
@@ -480422,11 +480741,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
480422
480741
  const _component_el_select = resolveComponent("el-select");
480423
480742
  const _component_el_switch = resolveComponent("el-switch");
480424
480743
  const _component_el_button = resolveComponent("el-button");
480425
- return openBlock(), createElementBlock("div", _hoisted_1$4, [
480426
- createElementVNode("h4", _hoisted_2$4, toDisplayString(_ctx.layerData.label) + " - 样式配置", 1),
480427
- isClusterLayer.value ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
480744
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
480745
+ createElementVNode("h4", _hoisted_2$5, toDisplayString(_ctx.layerData.label) + " - 样式配置", 1),
480746
+ isClusterLayer.value ? (openBlock(), createElementBlock("div", _hoisted_3$5, [
480428
480747
  _cache[8] || (_cache[8] = createElementVNode("h5", null, "聚合配置", -1)),
480429
- createElementVNode("div", _hoisted_4$4, [
480748
+ createElementVNode("div", _hoisted_4$5, [
480430
480749
  _cache[6] || (_cache[6] = createElementVNode("label", null, "聚合距离:", -1)),
480431
480750
  createVNode$1(_component_el_slider, {
480432
480751
  modelValue: _ctx.layerData.clusterDistance,
@@ -480436,7 +480755,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
480436
480755
  size: "small",
480437
480756
  onInput: handleClusterDistanceChange
480438
480757
  }, null, 8, ["modelValue"]),
480439
- createElementVNode("span", _hoisted_5$4, toDisplayString(_ctx.layerData.clusterDistance) + "px", 1)
480758
+ createElementVNode("span", _hoisted_5$5, toDisplayString(_ctx.layerData.clusterDistance) + "px", 1)
480440
480759
  ]),
480441
480760
  createElementVNode("div", _hoisted_6$3, [
480442
480761
  _cache[7] || (_cache[7] = createElementVNode("label", null, "最小距离:", -1)),
@@ -480521,12 +480840,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
480521
480840
  };
480522
480841
  }
480523
480842
  });
480524
- const _hoisted_1$3 = { class: "font-medium" };
480525
- const _hoisted_2$3 = { class: "layer-info" };
480526
- const _hoisted_3$3 = { class: "layer-name" };
480527
- const _hoisted_4$3 = { class: "opacity-control" };
480528
- const _hoisted_5$3 = { class: "opacity-value" };
480529
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480843
+ const _hoisted_1$4 = { class: "font-medium" };
480844
+ const _hoisted_2$4 = { class: "layer-info" };
480845
+ const _hoisted_3$4 = { class: "layer-name" };
480846
+ const _hoisted_4$4 = { class: "opacity-control" };
480847
+ const _hoisted_5$4 = { class: "opacity-value" };
480848
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
480530
480849
  __name: "LayerTreeNode",
480531
480850
  props: {
480532
480851
  data: {},
@@ -480578,7 +480897,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480578
480897
  ]),
480579
480898
  _: 1
480580
480899
  }),
480581
- createElementVNode("span", _hoisted_1$3, toDisplayString(_ctx.data.label), 1)
480900
+ createElementVNode("span", _hoisted_1$4, toDisplayString(_ctx.data.label), 1)
480582
480901
  ], 32)) : (openBlock(), createElementBlock("div", {
480583
480902
  key: 1,
480584
480903
  class: "layer-item",
@@ -480586,7 +480905,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480586
480905
  onClick: _cache[5] || (_cache[5] = withModifiers(() => {
480587
480906
  }, ["stop"]))
480588
480907
  }, [
480589
- createElementVNode("div", _hoisted_2$3, [
480908
+ createElementVNode("div", _hoisted_2$4, [
480590
480909
  createVNode$1(_component_el_icon, {
480591
480910
  class: normalizeClass(["layer-icon", layerIconClass.value])
480592
480911
  }, {
@@ -480595,7 +480914,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480595
480914
  ]),
480596
480915
  _: 1
480597
480916
  }, 8, ["class"]),
480598
- createElementVNode("span", _hoisted_3$3, toDisplayString(_ctx.data.label), 1)
480917
+ createElementVNode("span", _hoisted_3$4, toDisplayString(_ctx.data.label), 1)
480599
480918
  ]),
480600
480919
  createElementVNode("div", {
480601
480920
  class: "layer-controls",
@@ -480606,7 +480925,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480606
480925
  onDblclick: _cache[4] || (_cache[4] = withModifiers(() => {
480607
480926
  }, ["stop"]))
480608
480927
  }, [
480609
- createElementVNode("div", _hoisted_4$3, [
480928
+ createElementVNode("div", _hoisted_4$4, [
480610
480929
  createVNode$1(_component_el_slider, {
480611
480930
  modelValue: _ctx.data.layerData.opacity,
480612
480931
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.data.layerData.opacity = $event),
@@ -480616,7 +480935,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480616
480935
  class: "opacity-slider",
480617
480936
  onInput: handleOpacityChange
480618
480937
  }, null, 8, ["modelValue"]),
480619
- createElementVNode("span", _hoisted_5$3, toDisplayString(_ctx.data.layerData.opacity) + "%", 1)
480938
+ createElementVNode("span", _hoisted_5$4, toDisplayString(_ctx.data.layerData.opacity) + "%", 1)
480620
480939
  ]),
480621
480940
  createVNode$1(_component_el_popover, {
480622
480941
  placement: "left",
@@ -480645,7 +480964,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480645
480964
  })
480646
480965
  ]),
480647
480966
  default: withCtx(() => [
480648
- createVNode$1(_sfc_main$4, {
480967
+ createVNode$1(_sfc_main$5, {
480649
480968
  "layer-data": _ctx.data.layerData,
480650
480969
  onClusterDistanceChange: handleClusterDistanceChange,
480651
480970
  onSuperMapConfigChange: handleSuperMapConfigChange,
@@ -480660,15 +480979,15 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480660
480979
  };
480661
480980
  }
480662
480981
  });
480663
- const _hoisted_1$2 = { class: "flex-1 overflow-y-auto p-4" };
480664
- const _hoisted_2$2 = { class: "pb-2 flex items-center justify-between" };
480665
- const _hoisted_3$2 = { class: "text-xs font-semibold text-gray-700 px-1 py-1 border-b border-gray-200 mb-2" };
480666
- const _hoisted_4$2 = { class: "global-style-panel" };
480667
- const _hoisted_5$2 = { class: "config-section" };
480982
+ const _hoisted_1$3 = { class: "flex-1 overflow-y-auto p-4" };
480983
+ const _hoisted_2$3 = { class: "pb-2 flex items-center justify-between" };
480984
+ const _hoisted_3$3 = { class: "text-xs font-semibold text-gray-700 px-1 py-1 border-b border-gray-200 mb-2" };
480985
+ const _hoisted_4$3 = { class: "global-style-panel" };
480986
+ const _hoisted_5$3 = { class: "config-section" };
480668
480987
  const _hoisted_6$2 = { class: "config-item" };
480669
480988
  const _hoisted_7$1 = { class: "current-style-display" };
480670
480989
  const _hoisted_8$1 = { class: "style-preview" };
480671
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
480990
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
480672
480991
  __name: "LayerPanel",
480673
480992
  props: {
480674
480993
  modelValue: { type: Boolean }
@@ -480791,7 +481110,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
480791
481110
  }
480792
481111
  const willCheck = checkedKeys ? checkedKeys.includes(data.id) : !defaultCheckedKeys.value.includes(data.id);
480793
481112
  const toggleNodeAndChildren = (node, checked) => {
480794
- if (node.type === "layer" && node.layerData) {
481113
+ if ((node.type === "layer" || node.type === "group") && node.layerData) {
480795
481114
  node.layerData.visible = checked;
480796
481115
  handleLayerVisibilityChange(node.layerData);
480797
481116
  if (node.layerData.type === "group") {
@@ -481506,7 +481825,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481506
481825
  const _component_el_tree = resolveComponent("el-tree");
481507
481826
  const _component_el_tab_pane = resolveComponent("el-tab-pane");
481508
481827
  const _component_el_tabs = resolveComponent("el-tabs");
481509
- return openBlock(), createBlock(_sfc_main$k, mergeProps({
481828
+ return openBlock(), createBlock(_sfc_main$l, mergeProps({
481510
481829
  modelValue: visible.value,
481511
481830
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => visible.value = $event)
481512
481831
  }, dialogProps.value, { onClose: handleClose }), createSlots({
@@ -481544,8 +481863,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481544
481863
  name: "layers"
481545
481864
  }, {
481546
481865
  default: withCtx(() => [
481547
- createElementVNode("div", _hoisted_1$2, [
481548
- createElementVNode("div", _hoisted_2$2, [
481866
+ createElementVNode("div", _hoisted_1$3, [
481867
+ createElementVNode("div", _hoisted_2$3, [
481549
481868
  _cache[7] || (_cache[7] = createElementVNode("div", { class: "text-sm text-gray-600" }, "树形视图", -1)),
481550
481869
  createVNode$1(_component_el_radio_group, {
481551
481870
  modelValue: activeTreeType.value,
@@ -481591,7 +481910,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481591
481910
  class: "layer-tree"
481592
481911
  }, {
481593
481912
  default: withCtx(({ node, data }) => [
481594
- createVNode$1(_sfc_main$3, {
481913
+ createVNode$1(_sfc_main$4, {
481595
481914
  data,
481596
481915
  "layer-tree-manager": unref(layerTreeManager),
481597
481916
  onDoubleClick: handleLayerDoubleClick,
@@ -481607,7 +481926,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481607
481926
  key: group2.id,
481608
481927
  class: "mb-3"
481609
481928
  }, [
481610
- createElementVNode("div", _hoisted_3$2, toDisplayString(group2.name), 1),
481929
+ createElementVNode("div", _hoisted_3$3, toDisplayString(group2.name), 1),
481611
481930
  createVNode$1(_component_el_tree, {
481612
481931
  ref_for: true,
481613
481932
  ref: (el) => classificationTreeRefs.value[group2.id] = el,
@@ -481629,7 +481948,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481629
481948
  class: "layer-tree"
481630
481949
  }, {
481631
481950
  default: withCtx(({ node, data }) => [
481632
- createVNode$1(_sfc_main$3, {
481951
+ createVNode$1(_sfc_main$4, {
481633
481952
  data,
481634
481953
  "layer-tree-manager": unref(layerTreeManager),
481635
481954
  onDoubleClick: handleLayerDoubleClick,
@@ -481652,7 +481971,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481652
481971
  name: "style"
481653
481972
  }, {
481654
481973
  default: withCtx(() => [
481655
- createElementVNode("div", _hoisted_4$2, [
481974
+ createElementVNode("div", _hoisted_4$3, [
481656
481975
  createVNode$1(_component_el_tabs, {
481657
481976
  modelValue: activeStyleTab.value,
481658
481977
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => activeStyleTab.value = $event),
@@ -481664,7 +481983,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481664
481983
  name: "filters"
481665
481984
  }, {
481666
481985
  default: withCtx(() => [
481667
- createVNode$1(_sfc_main$5, {
481986
+ createVNode$1(_sfc_main$6, {
481668
481987
  filters: unref(globalFilters),
481669
481988
  onFilterChange: applyFilterEffect,
481670
481989
  onReset: resetFilters,
@@ -481678,7 +481997,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481678
481997
  name: "custom"
481679
481998
  }, {
481680
481999
  default: withCtx(() => [
481681
- createElementVNode("div", _hoisted_5$2, [
482000
+ createElementVNode("div", _hoisted_5$3, [
481682
482001
  createElementVNode("div", _hoisted_6$2, [
481683
482002
  createVNode$1(unref(ElInput), {
481684
482003
  modelValue: unref(globalCustomCss),
@@ -481749,6 +482068,150 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
481749
482068
  };
481750
482069
  }
481751
482070
  });
482071
+ const _hoisted_1$2 = { class: "layer-panel" };
482072
+ const _hoisted_2$2 = ["onClick"];
482073
+ const _hoisted_3$2 = ["title"];
482074
+ const _hoisted_4$2 = {
482075
+ key: 0,
482076
+ class: "active-border"
482077
+ };
482078
+ const _hoisted_5$2 = { class: "layer-name" };
482079
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
482080
+ __name: "OlBaseLayerSwitcher",
482081
+ props: {
482082
+ map: {},
482083
+ baseLayers: {}
482084
+ },
482085
+ setup(__props) {
482086
+ const props = __props;
482087
+ const expand2 = ref(false);
482088
+ const validBaseLayers = computed(() => {
482089
+ return props.baseLayers.filter((layer2) => layer2.baseImgUrl && layer2.baseImgUrl.trim() !== "");
482090
+ });
482091
+ const containerStyle = computed(() => {
482092
+ if (!expand2.value) {
482093
+ return { width: "96px" };
482094
+ }
482095
+ const count2 = validBaseLayers.value.length;
482096
+ if (count2 === 0)
482097
+ return { width: "96px" };
482098
+ const width = count2 * 86 + (count2 - 1) * 10 + 10;
482099
+ return { width: `${width}px` };
482100
+ });
482101
+ const currentLayer = ref(null);
482102
+ watch(() => props.baseLayers, (layers) => {
482103
+ if (!currentLayer.value) {
482104
+ const visibleLayer = layers.find((l2) => l2.visible && l2.baseImgUrl);
482105
+ if (visibleLayer) {
482106
+ currentLayer.value = visibleLayer;
482107
+ } else if (validBaseLayers.value.length > 0) {
482108
+ currentLayer.value = validBaseLayers.value[0];
482109
+ }
482110
+ }
482111
+ }, { deep: true, immediate: true });
482112
+ const switchLayer = (targetLayer) => {
482113
+ if (!props.map)
482114
+ return;
482115
+ currentLayer.value = targetLayer;
482116
+ layerEventBus.emit("basemap-switch-request", {
482117
+ basemapId: targetLayer.id,
482118
+ basemapName: targetLayer.name,
482119
+ basemapType: targetLayer.type,
482120
+ basemapConfig: targetLayer
482121
+ });
482122
+ props.baseLayers.forEach((layerConfig) => {
482123
+ const isVisible2 = layerConfig.id === targetLayer.id;
482124
+ setLayerVisibility(layerConfig, isVisible2);
482125
+ });
482126
+ expand2.value = false;
482127
+ };
482128
+ const setLayerVisibility = (config, visible) => {
482129
+ config.visible = visible;
482130
+ if (config.type === "group") {
482131
+ if (config.layers) {
482132
+ config.layers.forEach((child) => setLayerVisibility(child, visible));
482133
+ }
482134
+ if (config.children) {
482135
+ config.children.forEach((child) => setLayerVisibility(child, visible));
482136
+ }
482137
+ }
482138
+ if (config.id) {
482139
+ const layer2 = findLayerById(props.map, config.id);
482140
+ if (layer2) {
482141
+ layer2.setVisible(visible);
482142
+ }
482143
+ }
482144
+ };
482145
+ const findLayerById = (map2, id) => {
482146
+ const layers = map2.getLayers().getArray();
482147
+ return findLayerRecursive(layers, id);
482148
+ };
482149
+ const findLayerRecursive = (layers, id) => {
482150
+ for (const layer2 of layers) {
482151
+ if (layer2.get("id") === id) {
482152
+ return layer2;
482153
+ }
482154
+ if (layer2.getLayers && typeof layer2.getLayers === "function") {
482155
+ const found = findLayerRecursive(layer2.getLayers().getArray(), id);
482156
+ if (found)
482157
+ return found;
482158
+ }
482159
+ }
482160
+ return null;
482161
+ };
482162
+ return (_ctx, _cache) => {
482163
+ var _a3, _b3;
482164
+ return openBlock(), createElementBlock("div", {
482165
+ class: normalizeClass(["ol-base-layer-switcher", { "is-expanded": expand2.value }]),
482166
+ style: normalizeStyle$1(containerStyle.value),
482167
+ onMouseenter: _cache[0] || (_cache[0] = ($event) => expand2.value = true),
482168
+ onMouseleave: _cache[1] || (_cache[1] = ($event) => expand2.value = false)
482169
+ }, [
482170
+ createElementVNode("div", _hoisted_1$2, [
482171
+ (openBlock(true), createElementBlock(Fragment, null, renderList(validBaseLayers.value, (layer2) => {
482172
+ var _a4, _b4;
482173
+ return openBlock(), createElementBlock("div", {
482174
+ key: layer2.id,
482175
+ class: normalizeClass(["layer-item", { active: ((_a4 = currentLayer.value) == null ? void 0 : _a4.id) === layer2.id }]),
482176
+ onClick: ($event) => switchLayer(layer2),
482177
+ style: normalizeStyle$1({ backgroundImage: `url(${layer2.baseImgUrl})` })
482178
+ }, [
482179
+ createElementVNode("div", {
482180
+ class: "layer-name",
482181
+ title: layer2.name
482182
+ }, toDisplayString(layer2.name), 9, _hoisted_3$2),
482183
+ ((_b4 = currentLayer.value) == null ? void 0 : _b4.id) === layer2.id ? (openBlock(), createElementBlock("div", _hoisted_4$2, [..._cache[2] || (_cache[2] = [
482184
+ createElementVNode("div", { class: "check-icon" }, [
482185
+ createElementVNode("svg", {
482186
+ viewBox: "0 0 1024 1024",
482187
+ width: "16",
482188
+ height: "16"
482189
+ }, [
482190
+ createElementVNode("path", {
482191
+ d: "M384 725.333333l-192-192 64-64 128 128 320-320 64 64z",
482192
+ fill: "#fff"
482193
+ })
482194
+ ])
482195
+ ], -1)
482196
+ ])])) : createCommentVNode("", true)
482197
+ ], 14, _hoisted_2$2);
482198
+ }), 128))
482199
+ ]),
482200
+ createElementVNode("div", {
482201
+ class: normalizeClass(["layer-trigger", { "is-hidden": expand2.value }])
482202
+ }, [
482203
+ createElementVNode("div", {
482204
+ class: "current-layer-box",
482205
+ style: normalizeStyle$1({ backgroundImage: `url(${(_a3 = currentLayer.value) == null ? void 0 : _a3.baseImgUrl})` })
482206
+ }, [
482207
+ createElementVNode("div", _hoisted_5$2, toDisplayString((_b3 = currentLayer.value) == null ? void 0 : _b3.name), 1)
482208
+ ], 4)
482209
+ ], 2)
482210
+ ], 38);
482211
+ };
482212
+ }
482213
+ });
482214
+ const OlBaseLayerSwitcher = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-396e5ed1"]]);
481752
482215
  const _hoisted_1$1 = {
481753
482216
  key: 2,
481754
482217
  class: "tooltip-content"
@@ -482994,12 +483457,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
482994
483457
  isInFullscreen: () => isFullscreen.value
482995
483458
  });
482996
483459
  return (_ctx, _cache) => {
483460
+ var _a3;
482997
483461
  const _component_el_icon = resolveComponent("el-icon");
482998
483462
  const _component_el_button = resolveComponent("el-button");
482999
483463
  return openBlock(), createElementBlock("div", {
483000
483464
  class: normalizeClass(["relative w-full h-full overflow-hidden", { "fixed top-0 left-0 w-screen h-screen z-9999": isFullscreen.value }])
483001
483465
  }, [
483002
- createVNode$1(_sfc_main$m, {
483466
+ createVNode$1(_sfc_main$n, {
483003
483467
  ref_key: "mapContainerRef",
483004
483468
  ref: mapContainerRef,
483005
483469
  config: finalMapConfig.value,
@@ -483103,7 +483567,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
483103
483567
  }, null, 8, ["config", "left-offset", "right-offset", "top-offset", "bottom-offset"]), [
483104
483568
  [vShow, finalShowToolbar.value]
483105
483569
  ]),
483106
- withDirectives(createVNode$1(_sfc_main$8, {
483570
+ withDirectives(createVNode$1(_sfc_main$9, {
483107
483571
  ref_key: "mapSearchRef",
483108
483572
  ref: mapSearchRef,
483109
483573
  config: finalSearchConfig.value,
@@ -483138,7 +483602,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
483138
483602
  hasToolbarSlot.value ? renderSlot(_ctx.$slots, "toolbar", { key: 2 }) : createCommentVNode("", true),
483139
483603
  hasMapInfoSlot.value ? renderSlot(_ctx.$slots, "mapInfo", { key: 3 }) : createCommentVNode("", true),
483140
483604
  hasMapInfoSlot.value ? renderSlot(_ctx.$slots, "map-info", { key: 4 }) : createCommentVNode("", true),
483141
- finalEnableLayerPanel.value ? (openBlock(), createBlock(_sfc_main$2, {
483605
+ finalEnableLayerPanel.value ? (openBlock(), createBlock(_sfc_main$3, {
483142
483606
  key: 5,
483143
483607
  modelValue: showLayerPanel.value,
483144
483608
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => showLayerPanel.value = $event)
@@ -483169,7 +483633,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
483169
483633
  key: "2"
483170
483634
  } : void 0
483171
483635
  ]), 1032, ["modelValue"])) : createCommentVNode("", true),
483172
- showLegend.value ? (openBlock(), createBlock(_sfc_main$6, {
483636
+ showLegend.value ? (openBlock(), createBlock(_sfc_main$7, {
483173
483637
  key: 6,
483174
483638
  position: finalLegendPosition.value,
483175
483639
  width: finalLegendWidth.value,
@@ -483217,7 +483681,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
483217
483681
  }), 128))
483218
483682
  ])
483219
483683
  ])) : createCommentVNode("", true),
483220
- createVNode$1(_sfc_main$d, {
483684
+ map2.value && ((_a3 = finalMapConfig.value.baseLayers) == null ? void 0 : _a3.length) ? (openBlock(), createBlock(OlBaseLayerSwitcher, {
483685
+ key: 9,
483686
+ map: map2.value,
483687
+ "base-layers": finalMapConfig.value.baseLayers
483688
+ }, null, 8, ["map", "base-layers"])) : createCommentVNode("", true),
483689
+ createVNode$1(_sfc_main$e, {
483221
483690
  modelValue: showPrintDialog.value,
483222
483691
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showPrintDialog.value = $event),
483223
483692
  "map-instance": map2.value,
@@ -491499,7 +491968,7 @@ function(t3) {
491499
491968
  */
491500
491969
  function(t3) {
491501
491970
  function e8() {
491502
- return (n.canvg ? Promise.resolve(n.canvg) : import("./index.es-6551e4c0.mjs")).catch(function(t4) {
491971
+ return (n.canvg ? Promise.resolve(n.canvg) : import("./index.es-4f33fe12.mjs")).catch(function(t4) {
491503
491972
  return Promise.reject(new Error("Could not load canvg: " + t4));
491504
491973
  }).then(function(t4) {
491505
491974
  return t4.default ? t4.default : t4;
@@ -500374,14 +500843,14 @@ const getAssetUrl = (path2) => {
500374
500843
  };
500375
500844
  const install = (app) => {
500376
500845
  app.component("CustomOpenlayer", _sfc_main);
500377
- app.component("CustomDialog", _sfc_main$k);
500378
- app.component("SvgIcon", _sfc_main$l);
500846
+ app.component("CustomDialog", _sfc_main$l);
500847
+ app.component("SvgIcon", _sfc_main$m);
500379
500848
  };
500380
500849
  const index = {
500381
500850
  install,
500382
500851
  CustomOpenlayer: _sfc_main,
500383
- CustomDialog: _sfc_main$k,
500384
- SvgIcon: _sfc_main$l
500852
+ CustomDialog: _sfc_main$l,
500853
+ SvgIcon: _sfc_main$m
500385
500854
  };
500386
500855
  const version = "1.0.0";
500387
500856
  export {
@@ -500426,8 +500895,8 @@ export {
500426
500895
  _defineProperty as b,
500427
500896
  commonjsGlobal as c,
500428
500897
  _sfc_main as d,
500429
- _sfc_main$k as e,
500430
- _sfc_main$l as f,
500898
+ _sfc_main$l as e,
500899
+ _sfc_main$m as f,
500431
500900
  index as g,
500432
500901
  getAssetUrl as h,
500433
500902
  install as i,