类名 common/service/igs/ThemeServer/ThemeServer.js
import { Zondy } from '../../../base'
import BaseServer from '../../BaseServer'
import { newGuid, extendDeep, defaultValue, isNull, Log } from '../../../util'
import CMultiClassTheme from './CMultiClassTheme'
import CSimpleTheme from './CSimpleTheme'
import CChartTheme from './CChartTheme'
import CGraduatedSymbolTheme from './CGraduatedSymbolTheme'
import CDotDensityTheme from './CDotDensityTheme'
import CRandomTheme from './CRandomTheme'
import CFourColorTheme from './CFourColorTheme'
import CUniqueTheme from './CUniqueTheme'
import CRangeTheme from './CRangeTheme'
import FolderInfoAttribute from './FolderInfoAttribute'
import FolderInfo from './FolderInfo'
import ThemesInfo from './ThemesInfo'

/**
 * 专题图服务
 * @class ThemeServer
 * @moduleEx ServiceModule
 * @extends BaseServer
 * @param {Object} options 构造参数
 * @param {String} [options.url] 服务基地址
 * @example
 * // ES5引入方式
 * const { ThemeServer } = Zondy.Service
 * // ES6引入方式
 * import { ThemeServer } from "@mapgis/webclient-common"
 * const themeServer = new ThemeServer({
 *   url: 'http://192.168.82.89:6163/igs/rest/theme/Hubei4326'
 * });
 */
class ThemeServer extends BaseServer {
  constructor(options) {
    options = defaultValue(options, {})
    super(options)
    /**
     * @private
     * @type {String}
     * @description 客户端标识,用以服务器缓存地图
     * @default ""
     */
    this.guid = defaultValue(options.guid, newGuid())
  }

  /** *
   * @description 解析专题图信息
   * @param {Object} jsonObj 专题图信息Json对象
   */
  formatThemInfo(jsonObj) {
    const folderInfo = new FolderInfo()
    extendDeep(folderInfo, jsonObj.result || jsonObj)
    if (
      folderInfo !== null &&
      folderInfo.attribute !== null &&
      folderInfo.attribute.length > 0
    ) {
      const themeInfoArray = [] // new ThemesInfo[folderInfo.attribute.Length];
      let attArr = null
      for (let i = 0; i < folderInfo.attribute.length; i++) {
        themeInfoArray[i] = new ThemesInfo()
        if (folderInfo.attribute[i] !== null) {
          themeInfoArray[i].LayerName = folderInfo.attribute[i].name
          attArr = JSON.parse(folderInfo.attribute[i].value) // [];
          if (attArr !== null && attArr.length > 0) {
            themeInfoArray[i].ThemeArr = [] // new ThemeBase[attArr.Length];
            for (let j = 0; j < attArr.length; j++) {
              switch (attArr[j].name) {
                case 'CMultiClassTheme': // 多表达式(多分段)专题图
                  themeInfoArray[i].ThemeArr[j] = new CMultiClassTheme()
                  break
                case 'CSimpleTheme': // 简单专题图
                  themeInfoArray[i].ThemeArr[j] = new CSimpleTheme()
                  break
                case 'CChartTheme': // 统计专题图
                  themeInfoArray[i].ThemeArr[j] = new CChartTheme()
                  break
                case 'CGraduatedSymbolTheme': // 等级符号专题图
                  themeInfoArray[i].ThemeArr[j] = new CGraduatedSymbolTheme()
                  break
                case 'CDotDensityTheme': /// /点密度专题图
                  themeInfoArray[i].ThemeArr[j] = new CDotDensityTheme()
                  break
                case 'CRandomTheme': // 随机专题图
                  themeInfoArray[i].ThemeArr[j] = new CRandomTheme()
                  break
                case 'CFourColorTheme': // 四色专题图
                  themeInfoArray[i].ThemeArr[j] = new CFourColorTheme()
                  break
                case 'CUniqueTheme': // 唯一值专题图
                  themeInfoArray[i].ThemeArr[j] = new CUniqueTheme()
                  break
                case 'CRangeTheme': // 范围专题图(分段专题图)
                  themeInfoArray[i].ThemeArr[j] = new CRangeTheme()
                  break
                default:
                  themeInfoArray[i].ThemeArr[j] = new CSimpleTheme()
              }
              extendDeep(
                themeInfoArray[i].ThemeArr[j],
                JSON.parse(attArr[j].value)
              )
            }
          }
        }

        return themeInfoArray
      }

      return undefined
    }
  }

  /** *
   * @description 查询专题图参数
   * @param {Object} options 查询参数
   * @param {String} [options.idxArr] 专题图索引(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引,必填
   * @param {Function} [options.success] 查询成功回调
   * @param {Function} [options.failure] 查询失败回调
   * @example
   * // 回调方式
   * themeServer.queryThemeInfo({
   *   idxArr: '1/0',
   *   success: function (result) {
   *     console.log('请求成功:', result);
   *   }
   * });
   * // promise方式
   * themeServer.queryThemeInfo({
   *   idxArr: '1/0'
   * }).then(function (result) {
   *   console.log('请求成功:', result);
   * }).catch(function (result) {
   *   console.log('请求失败:', result);
   * })
   */
  queryThemeInfo(options) {
    options = defaultValue(options, {})

    const idxArr = defaultValue(options.idxArr, undefined)
    if (isNull(idxArr)) {
      Log.error('idxArr不能为空!')
      return
    }
    if (!(typeof idxArr === 'string')) {
      Log.error('idxArr类型错误!')
      return
    }

    const url = `${this.url}/get?idxArr=${idxArr}&guid=${this.guid}`
    return this._getRequest(url, options)
  }

  /**
   * 删除专题图
   * @param {Object} options 查询参数
   * @param {String} [options.idxArr] 专题图索引(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引,必填
   * @param {Function} [options.success] 查询成功回调
   * @param {Function} [options.failure] 查询失败回调
   * @example
   * // 回调方式
   * themeServer.deleteTheme({
   *   idxArr: '1/0',
   *   success: function (result) {
   *     console.log('请求成功:', result);
   *   },
   *   failure: function (result) {
   *     console.log('请求失败:', result);
   *   }
   * });
   * // promise方式
   * themeServer.deleteTheme({
   *   idxArr: '1/0'
   * }).then(function (result) {
   *   console.log('请求成功:', result);
   * }).catch(function (result) {
   *   console.log('请求失败:', result);
   * });
   */
  deleteTheme(options) {
    options = defaultValue(options, {})

    const idxArr = defaultValue(options.idxArr, undefined)
    if (isNull(idxArr)) {
      Log.error('idxArr不能为空!')
      return
    }
    if (!(typeof idxArr === 'string')) {
      Log.error('idxArr类型错误!')
      return
    }

    const url = `${this.url}/remove?idxArr=${idxArr}&guid=${this.guid}`

    return this._getRequest(url, options)
  }

  /**
   * 更新专题图
   * @param {Object} options 查询参数
   * @param {String} [options.idxArr] 专题图索引(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引,必填
   * @param {Array} [options.themeInfoArray] 专题图参数,必填
   * @param {Function} [options.success] 查询成功回调
   * @param {Function} [options.failure] 查询失败回调
   * @example
   * // 回调方式
   * // 更新专题图
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].RegInfo.FillClr = 11;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].RegInfo.FillClr = 16;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].RegInfo.FillClr = 22;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].RegInfo.FillClr = 26;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].RegInfo.FillClr = 110;
   * themeServer.updateThemesInfo({
   *   idxArr: '1/0',
   *   themeInfoArray: themesInfoArr,
   *   success: function (result) {
   *     console.log('请求成功:', result);
   *   },
   *   failure: function (result) {
   *     console.log('请求失败:', result);
   *   }
   * });
   * // promise方式
   * themeServer.updateThemesInfo({
   *   idxArr: '1/0',
   *   themeInfoArray: themesInfoArr
   * }).then(function (result) {
   *   console.log('请求成功:', result);
   * }).catch(function (result) {
   *   console.log('请求失败:', result);
   * })
   */
  updateThemesInfo(options) {
    options = defaultValue(options, {})

    const idxArr = defaultValue(options.idxArr, undefined)
    if (isNull(idxArr)) {
      Log.error('idxArr不能为空!')
      return
    }
    if (!(typeof idxArr === 'string')) {
      Log.error('idxArr类型错误!')
      return
    }

    const themeInfoArray = defaultValue(options.themeInfoArray, undefined)
    if (isNull(themeInfoArray)) {
      Log.error('themeInfoArray不能为空!')
      return
    }
    if (!(themeInfoArray instanceof Array)) {
      Log.error('themeInfoArray类型错误!')
      return
    }

    const url = `${this.url}/update?idxArr=${idxArr}&guid=${this.guid}`
    const folderInfo = new FolderInfo()
    if (themeInfoArray.length > 0) {
      folderInfo.name = 'ThemeInfo'
      folderInfo.attribute = []
      for (let i = 0; i < themeInfoArray.length; i++) {
        folderInfo.attribute[i] = new FolderInfoAttribute()
        folderInfo.attribute[i].name = themeInfoArray[i].LayerName
        if (
          themeInfoArray[i].ThemeArr !== null &&
          themeInfoArray[i].ThemeArr.length > 0
        ) {
          const res = []
          for (let j = 0; j < themeInfoArray[i].ThemeArr.length; j++) {
            if (themeInfoArray[i].ThemeArr[j] !== null) {
              res[j] = new FolderInfoAttribute(
                themeInfoArray[i].ThemeArr[j].Type,
                JSON.stringify(themeInfoArray[i].ThemeArr[j])
              )
            }
          }
          folderInfo.attribute[i].value = JSON.stringify(res)
        }
      }
    }

    options.data = JSON.stringify(folderInfo)
    return this._postRequest(url, options)
  }

  /**
   * 添加专题图
   * @param {Object} options 查询参数
   * @param {String} [options.idxArr] 专题图索引(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引,必填
   * @param {Array} [options.themeInfoArray] 专题图参数,必填
   * @param {Function} [options.success] 查询成功回调
   * @param {Function} [options.failure] 查询失败回调
   * @example
   * //回调方式
   * // ES5引入方式
   * const { Theme } = Zondy.Object
   * // ES6引入方式
   * import { Theme } from "@mapgis/webclient-common"
   * //专题图信息数组
   * var themesInfoArr = [];
   * //初始化Zondy.Object.Theme.ThemesInfo,用于设置需添加的专题相关信息
   * themesInfoArr[0] = new Theme.ThemesInfo();
   * //初始化指定图层的专题图信息对象,之后再给该数组赋值
   * themesInfoArr[0].LayerName = "湖北省市级区划2";
   * themesInfoArr[0].ThemeArr = [];
   * //实例化CMultiClassTheme类
   * themesInfoArr[0].ThemeArr[0] = new Theme.CRangeTheme();
   * themesInfoArr[0].ThemeArr[0].Name = "分段专题图";
   * //指定为分段专题图
   * themesInfoArr[0].ThemeArr[0].IsBaseTheme = false;
   * themesInfoArr[0].ThemeArr[0].Visible = true;
   * themesInfoArr[0].ThemeArr[0].GeoInfoType = "Reg";
   * //未分段值的图形信息设置
   * themesInfoArr[0].ThemeArr[0].DefaultInfo = new Theme.CThemeInfo();
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.Caption = "未分类";
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.Ovprnt = true;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.Angle = 0;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.EndClr = 0;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.FillClr = 17;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.FillMode = 0;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.FullPatFlg = true;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.PatClr = 45;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.PatHeight = 5;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.PatWidth = 5;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.PatID = 0;
   * themesInfoArr[0].ThemeArr[0].DefaultInfo.RegInfo.OutPenW = 1;
   * //分段取值设置
   * themesInfoArr[0].ThemeArr[0].Expression = "GDP2016";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr = [];
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0] = new Theme.CRangeThemeInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].StartValue = "0";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].EndValue = "100";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].RegInfo.FillClr = 110;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1] = new Theme.CRangeThemeInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].StartValue = "100";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].EndValue = "150";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].RegInfo.FillClr = 26;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2] = new Theme.CRangeThemeInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].StartValue = "150";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].EndValue = "200";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].RegInfo.FillClr = 22;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3] = new Theme.CRangeThemeInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].StartValue = "200";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].EndValue = "400";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].RegInfo.FillClr = 16;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4] = new Theme.CRangeThemeInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].StartValue = "400";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].EndValue = "6000";
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].RegInfo = new Theme.CRegInfo();
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].RegInfo.FillClr = 11;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[0].RegInfo.FillClr = 110;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[1].RegInfo.FillClr = 26;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[2].RegInfo.FillClr = 22;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[3].RegInfo.FillClr = 16;
   * themesInfoArr[0].ThemeArr[0].RangeThemeInfoArr[4].RegInfo.FillClr = 11;
   * themeServer.addTheme({
   *   idxArr: '1/0',
   *   themeInfoArray: themesInfoArr,
   *   success: function (result) {
   *     console.log('请求成功:', result);
   *   },
   *   failure: function (result) {
   *     console.log('请求失败:', result);
   *   }
   * });
   * //promise方式
   * themeServer.addTheme({
   *    idxArr: '1/0',
   *    themeInfoArray: themesInfoArr
   *  }).then(function (result) {
   *    console.log('请求成功:', result);
   *  }).catch(function (result) {
   *    console.log('请求失败:', result);
   *  });
   */
  addTheme(options) {
    options = defaultValue(options, {})

    const idxArr = defaultValue(options.idxArr, undefined)
    if (isNull(idxArr)) {
      Log.error('idxArr不能为空!')
      return
    }
    if (!(typeof idxArr === 'string')) {
      Log.error('idxArr类型错误!')
      return
    }

    const themeInfoArray = defaultValue(options.themeInfoArray, undefined)
    if (isNull(themeInfoArray)) {
      Log.error('themeInfoArray不能为空!')
      return
    }
    if (!(themeInfoArray instanceof Array)) {
      Log.error('themeInfoArray类型错误!')
      return
    }

    const url = `${this.url}/add?idxArr=${idxArr}&guid=${this.guid}`
    const folderInfo = new FolderInfo()
    if (themeInfoArray.length > 0) {
      folderInfo.name = 'ThemeInfo'
      folderInfo.attribute = []
      for (let i = 0; i < themeInfoArray.length; i++) {
        folderInfo.attribute[i] = new FolderInfoAttribute()
        folderInfo.attribute[i].name = themeInfoArray[i].LayerName
        if (
          themeInfoArray[i].ThemeArr !== null &&
          themeInfoArray[i].ThemeArr.length > 0
        ) {
          const res = []
          for (let j = 0; j < themeInfoArray[i].ThemeArr.length; j++) {
            if (themeInfoArray[i].ThemeArr[j] !== null) {
              res[j] = new FolderInfoAttribute(
                themeInfoArray[i].ThemeArr[j].Type,
                JSON.stringify(themeInfoArray[i].ThemeArr[j])
              )
            }
          }
          folderInfo.attribute[i].value = JSON.stringify(res)
        }
      }
    }

    options.data = JSON.stringify(folderInfo)
    return this._postRequest(url, options)
  }
}

export default ThemeServer
Zondy.Service.ThemeServer = ThemeServer
构造函数
成员变量
方法
事件