<template>
|
<HomeLeft></HomeLeft>
|
<!-- <div>中间搜索</div> -->
|
<HomeRight></HomeRight>
|
<SearchBox />
|
</template>
|
|
<script setup>
|
import HomeRight from './components/HomeRight/HomeRight.vue';
|
import HomeLeft from '@/views/Home/components/HomeLeft/HomeLeft.vue';
|
import { getAggregation } from '@/views/Home/aggregation';
|
import SearchBox from '@/views/Home/SearchBox.vue';
|
import jiangxi from '@/assets/geojson/jiangxi.json';
|
import nanchang from '@/assets/geojson/nanchang.json';
|
import jiangxishi from '@/assets/geojson/jiangxishi.json';
|
import zg from '@/assets/geojson/zg.json';
|
import * as Cesium from 'cesium';
|
|
const list = [
|
{ name: '县', value: [0,48651], gJson: null },
|
{ name: '市', value: [48651,314863], gJson: jiangxishi },
|
{ name: '省', value: [314863,1169651], gJson: jiangxi },
|
{ name: '国', value: [1169651,37962800], gJson: zg },
|
];
|
let viewer = null;
|
const active = ref('');
|
const init = () => {
|
determineScaling();
|
viewer.camera.moveEnd.addEventListener(() => {
|
determineScaling();
|
});
|
};
|
|
const determineScaling = () => {
|
let height = viewer.camera.positionCartographic.height;
|
console.log('缩放结束,高度为:', height);
|
// 根据高度展示对应的 gJson
|
for (let item of list) {
|
// if (height < item.value) {
|
if (height > item.value[0] && height <= item.value[1]) {
|
if (active.value !== item.name) {
|
viewer.dataSources.removeAll(true);
|
viewer.entities.removeAll();
|
active.value = item.name;
|
if (item.gJson) {
|
aggregation(item);
|
}
|
}
|
break;
|
}
|
}
|
};
|
|
const aggregation = item => {
|
const featuresList = item.gJson.features.map(item => ({
|
name: item.properties.name,
|
position: item.properties.center,
|
}));
|
// 遍历特征并添加实体
|
featuresList.forEach(feature => {
|
if (!feature.position) return;
|
const position = Cesium.Cartesian3.fromDegrees(feature.position[0], feature.position[1]);
|
viewer.entities.add({
|
position: position,
|
label: {
|
// 随机整数
|
text: feature.name + Math.floor(Math.random() * 100),
|
font: '14pt monospace',
|
fillColor: Cesium.Color.WHITE,
|
outlineColor: Cesium.Color.BLACK,
|
outlineWidth: 2,
|
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
|
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
|
pixelOffset: new Cesium.Cartesian2(0, -9),
|
},
|
});
|
});
|
// 加载新的 GeoJSON 数据
|
Cesium.GeoJsonDataSource.load(item.gJson).then(dataSource => {
|
viewer.dataSources.add(dataSource);
|
item.dataSource = dataSource; // 保存数据源以便后续删除
|
// 获取数据源中的实体
|
const entities = dataSource.entities.values;
|
entities.forEach(entity => {
|
entity.polygon.material = new Cesium.ColorMaterialProperty(
|
Cesium.Color.YELLOW.withAlpha(0) // 透明填充
|
);
|
entity.polygon.outline = true; // 显示边框
|
entity.polygon.outlineColor = Cesium.Color.YELLOW; // 黑色边框
|
});
|
});
|
};
|
onMounted(() => {
|
nextTick(() => {
|
viewer = window.$viewer;
|
init();
|
});
|
});
|
</script>
|