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

68 lines
2.0 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-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
useLoadingResourceStore().addLoadingResource(
LoadingResource.ADMINISTRATIVE_DIVISION,
2026-04-27 21:36:37 +08:00
{ ids: areasId, names: [] } // 此处name不进行记录
);
});
// 监听显示状态改变
watch(
() => useStatusStore().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>