feature: 增加图层管理组件及相关逻辑(目前仅支持DataSource 和 ImageryLayer 的管理
parent
bb042154cd
commit
666dc130e2
@ -1,5 +0,0 @@
|
|||||||
export default class Airline {
|
|
||||||
constructor(points) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,96 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import {Menu} from "@vicons/ionicons5";
|
||||||
|
import {useLayerStore} from "@/store/layerManagerStore.ts";
|
||||||
|
import {ref} from "vue";
|
||||||
|
let layerShow = ref(true)
|
||||||
|
let layer: {name:string,id:string} = {
|
||||||
|
name:'', id:''
|
||||||
|
}
|
||||||
|
let itemOptions = [
|
||||||
|
{label: "移除图层", key: 'remove'},
|
||||||
|
{label: "缩放至图层", key: 'lookAt'},
|
||||||
|
{label: "移至顶层", key: 'moveTop'},
|
||||||
|
{label: "移至底层", key: 'moveBottom'},
|
||||||
|
]
|
||||||
|
function handleLayerItem(key:any) {
|
||||||
|
useLayerStore().Layers.forEach((layer) => {
|
||||||
|
if (layer.lName == props.lname && layer.lId == props?.lid) {
|
||||||
|
switch (key) {
|
||||||
|
case 'remove': {
|
||||||
|
if(layer.dataSource){
|
||||||
|
layer.dataSource.then((ds)=>{
|
||||||
|
window.viewer.dataSources.remove(ds)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(layer.imageLayer){
|
||||||
|
window.viewer.imageryLayers.remove(layer.imageLayer)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case 'lookAt': {
|
||||||
|
if(layer.dataSource) window.viewer.flyTo(layer.dataSource)
|
||||||
|
if(layer.imageLayer) window.viewer.flyTo(layer.imageLayer)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case 'moveTop': {
|
||||||
|
//TODO:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case 'moveBottom': {
|
||||||
|
// TODO:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
const props = defineProps<{ lname: String, lid?: String }>()
|
||||||
|
function onCheck(checked: boolean) {
|
||||||
|
useLayerStore().Layers.forEach((layer) => {
|
||||||
|
if (layer.lName == props.lname && layer.lId == props?.lid) {
|
||||||
|
if(checked){
|
||||||
|
// 选中事件
|
||||||
|
if(layer.dataSource) { // dataSource视Promise对象
|
||||||
|
layer.dataSource.then((ds)=>{
|
||||||
|
ds.show = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(layer.imageLayer) layer.imageLayer.show = true
|
||||||
|
window.viewer.flyTo(layer.dataSource);
|
||||||
|
}
|
||||||
|
else{ //取消选中 隐藏图层
|
||||||
|
if(layer.dataSource) {
|
||||||
|
layer.dataSource.then((ds)=>{
|
||||||
|
ds.show = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(layer.imageLayer) layer.imageLayer.show = false
|
||||||
|
window.viewer.scene.requestRender()
|
||||||
|
layer.show = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
layerShow.value = !layerShow.value
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<n-row justify-content="space-between" style="align-items: center; border-bottom: 1px solid #e7e6e6">
|
||||||
|
<n-checkbox size="medium" :label="props.lname" style="margin: 0 0 0 1rem;"
|
||||||
|
:checked="layerShow" @update:checked="onCheck"/>
|
||||||
|
|
||||||
|
<n-dropdown :options="itemOptions" @select="handleLayerItem">
|
||||||
|
<n-button tertiary type="success" size="medium">
|
||||||
|
<template #icon>
|
||||||
|
<n-icon><Menu/></n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</n-dropdown>
|
||||||
|
</n-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,30 @@
|
|||||||
|
import {defineStore} from "pinia";
|
||||||
|
type layer = {
|
||||||
|
lName: string
|
||||||
|
lId: string
|
||||||
|
dataSource?: any
|
||||||
|
imageLayer?: any
|
||||||
|
show: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useLayerStore = defineStore('LayerStore', {
|
||||||
|
state: ()=>{
|
||||||
|
return {
|
||||||
|
Layers: [] as layer[]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
addLayer(lName: string,dataSource?:any,imageLayer?: any,show=true) {
|
||||||
|
let time = new Date()
|
||||||
|
|
||||||
|
let layer: layer = {
|
||||||
|
dataSource: dataSource,
|
||||||
|
imageLayer: imageLayer,
|
||||||
|
lId: time.getTime().toString(),
|
||||||
|
lName: lName,
|
||||||
|
show: show
|
||||||
|
}
|
||||||
|
this.Layers.push(layer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue