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({})
实体类型
- 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,
},
}