Files
xian_vue_new/src/component/map/AdministrativeDivision.vue
T
2026-05-07 13:59:14 +08:00

71 lines
2.1 KiB
Vue

<!-- 加载行政区划 -->
<template>
<div></div>
</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';
// 配置参数
const { areas, areasId, areasColor, areaTransparency, labelTransparency } =
useAdministrativeDivision();
const statusStore = useStatusStore();
const loadingResourceStore = useLoadingResourceStore();
onMounted(async () => {
// 构建批量添加配置数组
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,
},
},
}));
await CesiumUtilsSingleton.batchAddGeoJsonLayers(layerConfigs);
// 记录行政区划id
loadingResourceStore.addLoadingResource(
LoadingResource.ADMINISTRATIVE_DIVISION,
{ ids: areasId, info: [] } // 此处info不进行记录
);
});
// 监听显示状态改变
watch(
() => statusStore.mapLayers.showAdministrativeDivision.show,
(newValue: boolean) => {
if (newValue) {
CesiumUtilsSingleton.batchShowGeoJsonLayers(areasId);
} else {
CesiumUtilsSingleton.batchHideGeoJsonLayers(areasId);
}
}
);
</script>
<style scoped></style>