# Source: QueryDef.js

    /**
     * @content 查询条件定义功能组件
     * @author  2019-09-16
     */
    import { NativeModules } from 'react-native';

    let QD = NativeModules.JSQueryDef;

    /**
     * @class QueryDef
     * @description 扩展字段头
     */
    export default class QueryDef {
      /**
       * 构造一个新的 QueryDef 对象。
       * @memberOf QueryDef
       * @returns {Promise.<QueryDef>} QueryDef 对象。
       */
      async createObj() {
        try {
          var { QueryDefId } = await QD.createObj();
          var queryDef = new QueryDef();
          queryDef._MGQueryDefId = QueryDefId;
          return queryDef;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置属性查询条件
       * @memberOf QueryDef
       * @param whereClause 属性查询条件
       * @return {Promise} 成功:>0;失败：<=0
       */
      async setFilter(whereClause) {
        try {
          return await QD.setFilter(this._MGQueryDefId, whereClause);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 属性相关选项设置,设置查询结果字段集
       * @memberOf QueryDef
       * @param flds 查询结果字段集
       * @return {Promise} 成功:>0;失败：<=0
       */
      async setSubFields(flds) {
        try {
          return await QD.setSubFields(this._MGQueryDefId, flds._MGFieldsId);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 矩形范围查询条件
       * @memberOf QueryDef
       * @param rect 矩形范围
       * @param queryMode 空间查询模式
       * @return {Promise} 成功:>0;失败：<=0
       */
      async setRect(rect, queryMode) {
        try {
          return await QD.setRect(this._MGQueryDefId, rect._MGRectId, queryMode);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置空间查询条件
       * @memberOf QueryDef
       * @param geom 空间查询条件
       * @param queryMode 空间查询模式
       * @return {Promise} 成功:>0;失败：<=0
       */
      async setSpatial(polygon, queryMode) {
        try {
          return await QD.setSpatial(
            this._MGQueryDefId,
            polygon._MGGeoPolygonId,
            queryMode
          );
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * Near点查询
       * @memberOf QueryDef
       * @param dot 点坐标
       * @param xmax x最大值
       * @param xmin x最小值
       * @return {Promise} 成功:>0;失败：<=0
       */
      async setNear(dot, xmax, xmin) {
        try {
          return await QD.setNear(this._MGQueryDefId, dot._MGDotId, xmax, xmin);
        } catch (e) {
          console.error(e);
        }
      }
    }