标签:option Object 二十一 value key cesium 图层 type any
对于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);
标签:option,Object,二十一,value,key,cesium,图层,type,any 来源: https://www.cnblogs.com/haibalai/p/15827446.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。