viewer,entity,dataSource的关系
viewer.entities.add({})
通过viwer.entities.add()
直接加载的entity,默认是在viewer.entities(即viewer.dataSourceDisplay.defaultDataSource.entities)
中,不会加载在viewer.dataSource中。
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,
// 也可以是一个urlconst baoHuQuJson = require("../xxx.geojson")Cesium.GeoJsonDataSource.load(baoHuQuJson).then(dataSource => {window.viewer.dataSources.add(dataSource)this.boudingEntities = dataSource.entities.valuesthis.$bus.$on("toggleBhqBounding", () => {this.boudingEntities.forEach(entity => {// console.log(entity)if (entity.polyline) {entity.show = !entity.show}})})})
自定义dataSource,设置name,统一管理实体如点,多边形等
// 根据实体创建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
dataSource.entities.add({})
实体类型
- point
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,},
}