Files
xian_vue_new/src/component/map/AdministrativeDivision.vue
T

71 lines
2.1 KiB
Vue
Raw Normal View History

2026-04-09 10:26:30 +08:00
<!-- 加载行政区划 -->
<template>
<div></div>
2026-04-09 10:26:30 +08:00
</template>
<script lang="ts" setup>
import { useAdministrativeDivision } from '@/hooks/map/useAdministrativeDivision';
import { useLoadingResourceStore } from '@/stores/useLoadingResourceStore';
import { useStatusStore } from '@/stores/useStatusStore';
import { LoadingResource } from '@/types/common/LoadingResourceType';
import { CesiumUtilsSingleton } from '@/utils/cesium/CesiumUtils';
import { Color } from 'cesium';
import { onMounted, watch } from 'vue';
2026-04-09 10:26:30 +08:00
// 配置参数
const { areas, areasId, areasColor, areaTransparency, labelTransparency } =
useAdministrativeDivision();
2026-04-09 10:26:30 +08:00
2026-05-07 12:53:25 +08:00
const useStatus = useStatusStore();
const useLoadingResource = useLoadingResourceStore();
2026-04-14 08:59:05 +08:00
onMounted(async () => {
2026-04-09 15:52:56 +08:00
// 构建批量添加配置数组
const layerConfigs = areasId.map((id, index) => ({
layerId: id,
geojsonData: areas[index],
options: {
showName: true,
isDefault: true,
labelStyle: {
labelText: areas[index].features[0].properties.name,
center: [
areas[index].features[0].properties.center[0],
areas[index].features[0].properties.center[1],
0,
] as [number, number, number],
labelColor: Color.BLACK,
backgroundColor: areasColor[index].withAlpha(labelTransparency),
},
polygonStyle: {
fill: true,
fillColor: areasColor[index].withAlpha(areaTransparency),
outline: false,
},
},
2026-04-09 15:52:56 +08:00
}));
2026-04-14 08:59:05 +08:00
await CesiumUtilsSingleton.batchAddGeoJsonLayers(layerConfigs);
// 记录行政区划id
2026-05-07 12:53:25 +08:00
useLoadingResource.addLoadingResource(
LoadingResource.ADMINISTRATIVE_DIVISION,
2026-04-27 21:57:12 +08:00
{ ids: areasId, info: [] } // 此处info不进行记录
);
});
// 监听显示状态改变
watch(
2026-05-07 12:53:25 +08:00
() => useStatus.mapLayers.showAdministrativeDivision.show,
(newValue: boolean) => {
if (newValue) {
CesiumUtilsSingleton.batchShowGeoJsonLayers(areasId);
} else {
CesiumUtilsSingleton.batchHideGeoJsonLayers(areasId);
}
}
);
2026-04-09 10:26:30 +08:00
</script>
<style scoped></style>