# Source: ElpTransformation.js

    /**
     * @content 椭球变换对象功能组件
     * @author lidafeng
     */
    import { NativeModules } from 'react-native';

    let ET = NativeModules.JSElpTransformation;

    import ElpParam from './ElpParam.js';
    import ElpTransParam from './ElpTransParam.js';
    /**
     * @class ElpTransformation
     */
    export default class ElpTransformation {
      /**
       * 获取椭球个数
       * @memberOf ElpTransformation
       * @return {Promise.<Number>}  椭球个数
       */
      static async getElpParamCount() {
        try {
          return await ET.getElpParamCount();
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据椭球索引，获取椭球参数
       * @memberOf ElpTransformation
       * @param index 椭球索引
       * @return {Promise.<ElpParam>} 成功返回椭球参数对象，失败返回空
       */
      static async getElpParamByIndex(index) {
        try {
          let { ElpParamId } = await ET.getElpParam(index);
          var elpParam = new ElpParam();
          elpParam._MGElpParamId = ElpParamId;

          return elpParam;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据椭球名称，获取椭球参数
       * @memberOf ElpTransformation
       * @param name 椭球名称
       * @return {Promise.<ElpParam>} 成功返回椭球参数对象，失败返回空
       */
      static async getElpParamByName(name) {
        try {
          let { ElpParamId } = await ET.getElpParam(name);
          var elpParam = new ElpParam();
          elpParam._MGElpParamId = ElpParamId;

          return elpParam;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据椭球索引，设置或替换椭球参数（不永久保存）
       * @memberOf ElpTransformation
       * @param index 椭球索引
       * @param param 椭球参数
       * @return {Promise.<void>}
       */
      static async setElpParam(index, param) {
        try {
          await ET.setElpParam(index, param._MGElpParamId);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 椭球坐标系变换参数对象个数
       * @memberOf ElpTransformation
       * @return {Promise.<Number>} 椭球坐标系变换参数个数
       */
      static async getElpTransParamCount() {
        try {
          return await ET.getElpTransParamCount();
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据索引，获取椭球转换参数对象
       * @memberOf ElpTransformation
       * @param index 转换参数的索引值
       * @return {Promise.<ElpTransParam>} 成功返回椭球转换参数对象，失败返回空
       */
      static async getElpTransParamByIndex(index) {
        try {
          let { ElpTransParamId } = await ET.getElpTransParam(index);
          var elpTransParam = new ElpTransParam();
          elpTransParam._MGElpTransParamId = ElpTransParamId;

          return elpTransParam;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据名称，获取椭球转换参数
       * @memberOf ElpTransformation
       * @param name 椭球转换参数对象的名称
       * @return {Promise.<ElpTransParam>} 成功返回椭球转换参数对象，失败返回空
       */
      static async getElpTransParamByName(name) {
        try {
          let { ElpTransParamId } = await ET.getElpTransParam(name);
          var elpTransParam = new ElpTransParam();
          elpTransParam._MGElpTransParamId = ElpTransParamId;

          return elpTransParam;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 修改/设置椭球转换参数
       * @memberOf ElpTransformation
       * @param index 椭球转换参数对象索引
       * @param param 椭球转换参数对象
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async setElpTransParamByIndex(index, param) {
        try {
          return await ET.setElpTransParam(index, param._MGElpTransParamId);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 修改/设置椭球转换参数
       * @memberOf ElpTransformation
       * @param name 椭球转换参数对象名称
       * @param param 椭球转换参数对象
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async setElpTransParamByName(name, param) {
        try {
          return await ET.setElpTransParam(name, param._MGElpTransParamId);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 添加椭球坐标系变换参数对象
       * @memberOf ElpTransformation
       * @param param 椭球坐标系变换参数对象
       * @return {Promise.<Number>} 成功则返回椭球参数对象索引
       */
      static async addElpTransParam(param) {
        try {
          return await ET.addElpTransParam(param._MGElpTransParamId);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据索引删除椭球坐标系变换参数对象
       * @memberOf ElpTransformation
       * @param index 椭球转换参数对象索引
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async delElpTransParamByIndex(index) {
        try {
          return await ET.delElpTransParam(index);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据索引删除椭球坐标系变换参数对象
       * @memberOf ElpTransformation
       * @param name 椭球转换参数对象名称
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async delElpTransParamByName(name) {
        try {
          return await ET.delElpTransParam(name);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 清空椭球坐标系变换参数对象
       * @memberOf ElpTransformation
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async clearElpTransParam() {
        try {
          return await ET.clearElpTransParam();
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 导入椭球变换参数
       * @memberOf ElpTransformation
       * @param strFile 文件URL
       * @return {Promise.<boolean>} 成功返回true，失败返回false
       */
      static async loadElpTransParam(strFile) {
        try {
          return await ET.loadElpTransParam(strFile);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 从文件导入椭球转换参数
       * @memberOf ElpTransformation
       * @param strFile 文件URL
       * @return {Promise.<ElpTransParam>} 成功返回椭球转换对象列表，失败返回空
       */
      static async loadElpTransParam0(strFile) {
        try {
          var objArr = [];
          let { ElpTransParamArr } = await ET.loadElpTransParam0(strFile);
          for (var i = 0; i < ElpTransParamArr.length; i++) {
            var elpTransParam = new ElpTransParam();
            elpTransParam._MGElpTransParamId = ElpTransParamArr[i];
            objArr.push(elpTransParam);
          }
          return objArr;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 导出椭球变换参数
       * @memberOf ElpTransformation
       * @param strFile 文件URL
       * @return {Promise.<boolean>}成功返回true，失败返回false
       */
      static async saveElpTransParam(strFile) {
        try {
          return await ET.saveElpTransParam(strFile);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 根据控制点结构对象序列，计算椭球参数转换对象
       * @memberOf ElpTransformation
       * @param transType 转换类型(0/1:三参数直角平移/七参数)
       * @param pnts 控制点结构对象序列
       * @param sourceSpheroid 椭球体索引(1开始)
       * @param sourceAngUnit 获取空间数据水平坐标单位：角度(4/7/3/5:度/分/秒/度分秒)
       * @param spheroid 椭球体索引(1开始)
       * @param angUnit 获取空间数据水平坐标单位：角度(4/7/3/5:度/分/秒/度分秒)
       * @return {Promise.<ElpTransParam>} 椭球坐标系变换参数
       */
      static async countCoeByPntList(
        transType,
        pnts,
        sourceSpheroid,
        sourceAngUnit,
        spheroid,
        angUnit
      ) {
        try {
          let { ElpTransParamId } = await ET.countCoeByPntList(
            transType,
            pnts,
            sourceSpheroid,
            sourceAngUnit,
            spheroid,
            angUnit
          );
          var elpTransParam = new ElpTransParam();
          elpTransParam._MGElpTransParamId = ElpTransParamId;
          return elpTransParam;
        } catch (e) {
          console.error(e);
        }
      }
    }