【Cesium】--viewer,entity,dataSource

viewer,entity,dataSource的关系

  • viewer.entities.add({})
    通过viwer.entities.add()直接加载的entity,默认是在viewer.entities(即viewer.dataSourceDisplay.defaultDataSource.entities)中,不会加载在viewer.dataSource中。
typescript 复制代码
window.viewer.entities.add({
		position: Cesium.Cartesian3.fromDegrees(start.longitude, start.latitude, start.height),
		billboard: {
			image: imgUrl_start,
				scale: 1,
				pixelOffset: new Cesium.Cartesian2(-10, -10),
				},
			})
  • viewer.dataSources.add(dataSource)
    dataSource可以来源于直接加载json数据,也可以自己通过new Cesium.CustomDataSource()构造,可以统一控制该数据源或者entity,dataSource.entities.values就是加载json后的entities,
typescript 复制代码
	    // 也可以是一个url
		const baoHuQuJson = require("../xxx.geojson")
		Cesium.GeoJsonDataSource.load(baoHuQuJson).then(dataSource => {
				window.viewer.dataSources.add(dataSource)
				this.boudingEntities = dataSource.entities.values

				this.$bus.$on("toggleBhqBounding", () => {
					this.boudingEntities.forEach(entity => {
						// console.log(entity)
						if (entity.polyline) {
							entity.show = !entity.show
						}
					})
				})
			})

自定义dataSource,设置name,统一管理实体如点,多边形等

js 复制代码
// 根据实体创建dataSource
function createEntityDataSource(dataSourceName,entities,cb){
	const dataSource = new window.Cesium.CustomDataSource(dataSourceName)
	for(let i=0;i<entities.length;i++){
		dataSource.entities.add(entities)
	}
	
	if(typeof cb =='function'){
		cb(dataSource)
	}

	window.viewer.dataSources.add(dataSource)
	return dataSource
}

// 根据name获取dataSource
function getDatasourceByName(name,cb){
	const dataSource = window.viewer.dataSources.getByName(name)
	
	if(typeof cb == 'undefined'){
		dataSource.forEach(item=>cb(item))
	}
	
	return dataSource
}

// 切换数据源显隐
function toggoleDataSourceShow(dataSourceOrName,show){
	let target = []
	if(typeof dataSourceOrName =='string'){
		target = window.viewer.dataSources.getByName(dataSourceOrName)
	}else if(!Array.isArray(dataSourceOrName)){
		target = [dataSourceOrName]
	}
	for(const datasource of target){
		if(typeof show == 'undefined'){
			datasource.show = !datasource.show
		}else{
			datasource.show = show
		}	
	}
}

// 删除dataSource
function removeDataSource(dataSourceOrName){
	let dataSrouce = []
	if(typeof dataSourceOrName == 'string'){
		dataSrouce = window.viewer.dataSources.getByName(dataSourceOrName)
	}else if(!Array.isArray(dataSourceOrNames)){
		dataSrouce = [dataSourceOrName]
	}
	dataSrouce.forEach(item=>window.viewer.dataSources.remove(item,true))
}

dataSource添加实体

各种实体,billboard,point,polygon

js 复制代码
dataSource.entities.add({})

实体类型

  1. point
js 复制代码
const entity = {
		  id: code,
          name: pointName,
          position: Cesium.Cartesian3.fromDegrees(Number(longitude), Number(latitude), 30),// 位置,参数是 经度,维度,高度
          billboard: {// 点位显示的图标
            show: true,
            image: require(`@/assets/svg/${code}.svg`),
            scale: 1,
            rotation: 0,
          },
          properties: {// 携带的属性
            code,
            longitude,
            latitude,
          },
}
相关推荐
OEC小胖胖8 分钟前
Vue 3 中 onUnload 和 onPageScroll 使用详解
前端·javascript·vue.js·前端框架·web
秋田君1 小时前
uniapp中使用Mescroll实现下拉刷新与上拉加载项目实战
javascript·uni-app
川石教育2 小时前
Vue前端开发-slot传参
前端·vue.js·前端框架·前端开发·slot组件
确实菜,真的爱2 小时前
vue3 element plus 把表格数据导出到excel
javascript·vue.js·excel
一舍予2 小时前
nuxt3项目搭建相关
开发语言·javascript·vue.js·nuxt
无恃而安2 小时前
localStorage缓存 接口 配置
javascript·vue.js·缓存
余道各努力,千里自同风2 小时前
HTML5 视频 Vedio 标签详解
前端·音视频·html5
_大菜鸟_2 小时前
修改element-ui-时间框date 将文字月份改为数字
javascript·vue.js·ui
尽兴-3 小时前
Vue 中父子组件间的参数传递与方法调用
前端·javascript·vue.js·父子组件·参数传递·组件调用