# Source: CoordinateConvert.js

    /*
     * @Description: In User Settings Edit
     * @Author: xiaoying
     * @Date: 2019-09-18 10:27:06
     * @LastEditTime: 2019-09-18 15:10:51
     * @LastEditors: mayuanye
     */
    import { NativeModules } from 'react-native';
    import CoordinateConvertParameter from './CoordinateConvertParameter';
    import Dot from './Dot';
    let CC = NativeModules.JSCoordinateConvert;

    /**
     * @class CoordinateConvert
     * @description 坐标转换类
     */
    export default class CoordinateConvert {
      /**
       * 构造一个新的CoordinateConvert对象
       *
       * @memberof CoordinateConvert
       * @returns {CoordinateConvert}
       */
      async createObj() {
        try {
          var { CoordinateConvertId } = await CC.createObj();
          var coordinateConvert = new CoordinateConvert();
          coordinateConvert._MGCoordinateConvertId = CoordinateConvertId;
          return coordinateConvert;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置坐标转换参数
       *
       * @memberof CoordinateConvert
       * @param {Object} coordinateConvertParameter 坐标转换参数 （CoordinateConvertParameter类型的Object）
       * @returns {CoordinateConvert}
       */
      async setConvertParams(coordinateConvertParameter) {
        try {
          var { CoordinateConvertId } = await CC.setConvertParams(
            this._MGCoordinateConvertId,
            coordinateConvertParameter._MGCoordinateConvertParameterId
          );
          var coordinateConvert = new CoordinateConvert();
          coordinateConvert._MGCoordinateConvertId = CoordinateConvertId;
          return coordinateConvert;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取坐标转换参数
       *
       * @memberof CoordinateConvert
       * @returns {Promise<CoordinateConvert>}
       */
      async getConvertParams() {
        try {
          var { CoordinateConvertParameterId } = await CC.getConvertParams(
            this._MGCoordinateConvertId
          );
          var coordinateConvertParameter = new CoordinateConvertParameter();
          coordinateConvertParameter._MGCoordinateConvertParameterId = CoordinateConvertParameterId;
          return coordinateConvertParameter;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 坐标转换
       *
       * @memberof CoordinateConvert
       * @param {Object} dot 转换前的点 （Dot类型的Object）
       * @returns {Promise<Dot>} 转换后的点
       */
      async convert(dot) {
        try {
          var { point2DId } = await CC.convert(
            this._MGCoordinateConvertId,
            dot._MGDotId
          );
          let convertDot = null;
          if (point2DId != null) {
            convertDot = new Dot();
            convertDot._MGDotId = point2DId;
          }
          return convertDot;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 异步坐标转换
       *
       * @memberof CoordinateConvert
       * @param {Object} dot 转换前的点 （Dot类型的Object）
       * @returns {Promise<Dot|String>} 成功--返回转换后的点，失败--返回String
       */
      async convertAsync(dot) {
        try {
          let { isSuccess, result } = await CC.convertAsync(
            this._MGCoordinateConvertId,
            dot._MGDotId
          );
          if (isSuccess) {
            let dotResult = new Dot();
            dotResult._MGDotId = result;
            return dotResult;
          } else {
            return result;
          }
        } catch (e) {
          console.error(e);
        }
      }
    }