美文网首页
cesium 图层构建的那些事 (二十一)

cesium 图层构建的那些事 (二十一)

作者: haibalai | 来源:发表于2022-08-04 15:14 被阅读0次

    对于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);

     更多参考 https://xiaozhuanlan.com/topic/5836490271

    相关文章

      网友评论

          本文标题:cesium 图层构建的那些事 (二十一)

          本文链接:https://www.haomeiwen.com/subject/rbypwrtx.html