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序列化工具


/**

将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);

 更多参考 https://xiaozhuanlan.com/topic/5836490271
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值