# Source: VectorMapServer.js

    /*
     * @Description: In User Settings Edit
     * @Author: xiaoying
     * @Date: 2019-09-04 14:29:07
     * @LastEditTime: 2019-09-11 19:56:38
     * @LastEditors: mayuanye
     */
    import { NativeModules } from 'react-native';
    import MapServer from './MapServer.js';
    let VMS = NativeModules.JSVectorMapServer;

    /**
     * @class VectorMapServer
     * @description 矢量地图服务
     */
    export default class VectorMapServer extends MapServer {
      constructor() {
        super();
        Object.defineProperty(this, '_MGVectorMapServerId', {
          get: function() {
            return this._MGMapServerId;
          },
          set: function(_MGVectorMapServerId) {
            this._MGMapServerId = _MGVectorMapServerId;
          },
        });
      }

      /**
       * 创建一个新的VectorMapServer对象
       *
       * @memberof VectorMapServer
       * @returns {Promise<VectorMapServer>}
       */
      async createObj() {
        try {
          var { VectorMapServerId } = await VMS.createObj();
          var vectorMapServer = new VectorMapServer();
          vectorMapServer._MGVectorMapServerId = VectorMapServerId;
          return vectorMapServer;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取动态参照系个数
       *
       * @memberof VectorMapServer
       * @returns {int} 照系个数
       */
      async getCRSCount() {
        try {
          let crsCount = await VMS.getCRSCount(this._MGVectorMapServerId);
          return crsCount;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取索引对应的动态参照系名称
       *
       * @memberof VectorMapServer
       * @param {int} index 参照系索引
       * @returns {String} 参照系名称
       */
      async getCRS(index) {
        try {
          let crs = await VMS.getCRS(this._MGVectorMapServerId, index);
          return crs;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置当前动态参照系名称
       *
       * @memberof VectorMapServer
       * @param {String} strCRS 参照系名称
       * @returns {int}  1-成功 ；0-失败
       */
      async setCurrentCRS(strCRS) {
        try {
          let result = await VMS.setCurrentCRS(this._MGVectorMapServerId, strCRS);
          return result;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取当前动态参照系名称
       *
       * @memberof VectorMapServer
       * @returns {String}  参照系名称
       */
      async getCurrentCRS() {
        try {
          let currentCRS = await VMS.getCurrentCRS(this._MGVectorMapServerId);
          return currentCRS;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取矢量图像
       *
       * @memberof VectorMapServer
       * @returns {Array}  矢量图像数据 (int类型的Array)
       */
      async getVectorImage(
        imgWidth,
        imgHeight,
        disPRectXMin,
        disPRectYMin,
        disPRectXMax,
        disPRectYMax
      ) {
        try {
          let buf = await VMS.getVectorImage(
            this._MGVectorMapServerId,
            imgWidth,
            imgHeight,
            disPRectXMin,
            disPRectYMin,
            disPRectXMax,
            disPRectYMax
          );
          return buf;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 释放矢量图像数据
       *
       * @memberof VectorMapServer
       * @param {Array} buf 矢量图像数据
       * @returns {int}  1-成功 ；0-失败
       */
      async freeVectorImage(buf) {
        try {
          let result = await VMS.freeVectorImage(this._MGVectorMapServerId, buf);
          return result;
        } catch (e) {
          console.error(e);
        }
      }
    }