cesium 图层构建的那些事 (二十一)
对于cesium entiy的增删改查 我们来封装一个layer来统一管理
类似arcgis js 的GraphicLayer
中间数据管理类
- 
import {Layer} from "./Layer";
- 
- 
export abstract class DataSourceLayer extends Layer {
- 
type: string = "DataSourceLayer";
- 
- 
protected _addToMap(map: any) {
- 
map.dataSources.add(this.cesiumObj);
- 
}
- 
- 
protected _removeByMap(destroy: boolean = true) {
- 
this.map.dataSources.remove(this.cesiumObj);
- 
this.cesiumObj = null;
- 
}
- 
- 
on(eventName: string, callBacl: Function): this {
- 
return this;
- 
}
- 
- 
off(): this {
- 
return this;
- 
}
- 
}
json序列化工具
```javascript
/**
- 
将cesium对象json化 
 */
 export class CesiumToJson {
 private static excludes = ["_definitionChanged", "_children", "_propertyNames", "_type_"];
 public static entityToJson(entity: any): any {
 const option:any = {};
 if (!entity) {
 return option;
 }
 for (let key in entity) {
 if (!key.startsWith("_")) {
 continue;
 }
 if (this.excludes.indexOf(key) !== -1) {
 continue;
 }
 const value = entity[key];
 if (!value) {
 continue;
 }
 if (Object.prototype.toString.call(value) == "[object Function]") {
 continue;
 }
 key = key.substr(1, key.length);- 
if (key === "material") {
- 
option[key] = this.entityToJson(value);
- 
// 打包可能会引起问题,需要注意(未验证)
- 
option[key].type = value.constructor.name;
- 
continue;
- 
}
- 
if (Object.prototype.toString.call(value) == "[object Object]") {
- 
console.log(key, value);
- 
if (!(Object.prototype.toString.call(value._value) == "[object Undefined]")) {
- 
option[key] = value._value;
- 
} else if (!(Object.prototype.toString.call(value._callback) == "[object Undefined]")) {
- 
// 如果是动态执行方法的,暂时不支持保存,后期想办法解析
- 
continue;
- 
} else {
- 
option[key] = this.entityToJson(value);
- 
}
- 
} else {
- 
option[key] = value;
- 
}
- 
}
- 
return option;
 } 
 public static entitiesToJson(entities: any): any {
 return entities.values.map((entity: any) => {
 return this.entityToJson(entity);
 })
 }public static jsonToEntityObj(option: any) { 
 for (let key in option) {
 const value = option[key];
 if (key === "material") {
 let materialProperty = null;
 const type = value.type;
 delete value.type;
 let material = Cesium[type];
 if (material) {
 materialProperty = new material();
 for (const field in value) {
 materialProperty[field] = value[field];
 }
 }
 option[key] = materialProperty;
 } else if (Object.prototype.toString.call(value) == "[object Object]") {
 this.jsonToEntityObj(value);
- 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号