import {
    Zondy
} from '../../common/Base';
import {
    copyExcluce
} from "../../common/Util";
import {
    AnalysisBase
} from "./AnalysisBase";
import {
    IgsServiceBase
} from "../../baseserver/IServiceBase";
import {
    MeshingParam
} from "../extend/MeshingParam";
import {
    ContourParam
} from "../extend/ContourParam";

/**
 * 等值线追踪分析
 * @class module:分析服务.ContourAnalyse
 * @classdesc 等值线追踪分析
 * @description Zondy.Service.ContourAnalyse 
 * @extends Zondy.Service.AnalysisBase
 * @param {Object} option 属性键值对
 * @param {String} [option.linSfclsURL = null] 线简单要素Url
 * @param {String} [option.regSfclsURL = null] 区简单要素Url
 * @param {String} [option.annoClsURL = null] 注记要素Url
 * @param {Zondy.Object.ContourAnalyse.MeshingParam} [option.meshingParam = null] 离散数据网格化参数类
 * @param {Zondy.Object.ContourAnalyse.ContourParam} [option.contourParam = null] 平面等值线追踪参数类
 * @example
 var myDate = new Date();
 //定义起始和终点，中间有5条，生成步长t
 var t = parseInt((300 - 0) / 5 + 0.5);
 //获取系统时间
 var time = self.getTime(myDate);
 //临时存储的地址
 var GdbpTempStr = "gdbp://MapGisLocal/OpenLayerVecterMap/ds/ContourAnalyse/";
 var wp = GdbpTempStr + "sfcls/ContourP_" + time;
 var wl = GdbpTempStr + "sfcls/ContourL_" + time;
 var wt = GdbpTempStr + "acls/ContourT_" + time;
 var layerName = "gdbp://MapGisLocal/OpenLayerVecterMap/ds/ContourAnalyse/sfcls/离散点";
 //创建一个离散数据网格化参数类
 var mp = new Zondy.Object.ContourAnalyse.MeshingParam({
                    SfClsURL: layerName,
                    FieldName: "Rainfall",
                    XCellNum: 400,
                    Bound: null
                });
 var mpStr = JSON.stringify(mp);
 //创建一个平面等值线追踪所用到的注记参数类
 var cp = new Zondy.Object.ContourAnalyse.ContourParam();
 //等值线层参数
 var zValues = new Array();
 //循环描述等值线信息
 for (var i = 0; i < t; i++) {
                    //等值线层参数类，用来描述每一层的信息
                    var z = new Zondy.Object.ContourAnalyse.ContourZValue();
                    //等值线层值
                    z.ZValue = i * 5;
                    //等值线参数
                    z.LineInfo = new Zondy.Object.ContourAnalyse.SlopLineParam();
                    z.LineInfo.Color = i * parseInt(5) + 9;
                    z.LineInfo.LinStyleID = 1;
                    z.LineInfo.LinWidth = 0.02;
                    //生成区参数
                    z.RegInfo = new Zondy.Object.ContourAnalyse.ContourRegionInfo();
                    z.RegInfo.FillColor = i * parseInt(5) + 4;
                    z.RegInfo.FillMode = 0;
                    z.RegInfo.PatID = 0;
                    //该层是否绘制注记
                    z.IsOutputNote = true;
                    zValues.push(z);
                }
 //等值线层参数
 cp.ZValues = zValues;
 //平面等值线追踪所用到的注记参数类
 var noteParam = new Zondy.Object.ContourAnalyse.ContourNoteParam();
 //注记间最小允许距离
 noteParam.MinDist = 10;
 //注记尺寸
 noteParam.FixSize = 0.01;
 //注记生成参数。默认值为NULL，只有在IsMakeNote为true时该参数才能发挥作用。
 cp.NoteParam = noteParam;
 //示坡线参数。默认值为NULL，只有在IsMakeSLin为true时该参数参能发挥作用。
 var slopLineParam = new Zondy.Object.ContourAnalyse.SlopLineParam();
 cp.SlopLineParam = slopLineParam;
 //是否生成注记
 cp.IsMakeNote = true;
 //是否生成区
 cp.IsMakeReg = true;
 var cpStr = JSON.stringify(cp);
 //实例化对象信息
 var obj = {
                    "linSfclsURL": wl,
                    "regSfclsURL": wp,
                    "annoClsURL": wt,
                    "meshingParam": mpStr,
                    "contourParam": cpStr
                };
 var param = [{ "Key": "linSfclsURL", "Value": obj.linSfclsURL },
 { "Key": "regSfclsURL", "Value": obj.regSfclsURL },
 { "Key": "annoClsURL", "Value": obj.annoClsURL },
 //离散数据网格化参数类
 {"Key": "meshingParam", "Value": obj.meshingParam },
 //平面等值线追踪参数类
 {"Key": "contourParam", "Value": obj.contourParam}];
 var urlStr = "http://develop.smaryun.com:6163/igs/rest/mrfws/execute/" + "600320" + "?f=json";
 var service = new Zondy.Service.QueryServiceBase();
 service.restQuery(urlStr, param, function (res) {
                    console.log(res);
                }, "POST",function (error) {
                    console.log(error);
                });
 */
class ContourAnalyse extends AnalysisBase {
    constructor(option) {
        var options = option || {};
        super(options);

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.flowID
         * @type {String}
         * @description 工作流ID
         * @default "600320"
         */
        this.flowID = '600320';

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.linSfclsURL
         * @type {String}
         * @description 线简单要素Url
         * @default null
         */
        this.linSfclsURL = options.linSfclsURL !== undefined ? options.linSfclsURL : null;

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.regSfclsURL
         * @type {String}
         * @description 区简单要素Url
         * @default null
         */
        this.regSfclsURL = options.regSfclsURL !== undefined ? options.regSfclsURL : null;

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.annoClsURL
         * @type {String}
         * @description 注记简单要素Url
         * @default null
         */
        this.annoClsURL = options.annoClsURL !== undefined ? options.annoClsURL : null;

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.meshingParam
         * @type {Zondy.Object.ContourAnalyse.MeshingParam}
         * @description 离散数据网格化参数类
         * @default null
         */
        this.meshingParam = options.meshingParam !== undefined ? options.meshingParam : null;

        /**
         * @private
         * @member Zondy.Service.ContourAnalyse.prototype.ContourParam
         * @type {Zondy.Object.ContourAnalyse.ContourParam}
         * @description 平面等值线追踪参数类
         * @default null
         */
        this.contourParam = options.contourParam !== undefined ? options.contourParam : null;
    }
}
export {
    ContourAnalyse
};
Zondy.Service.ContourAnalyse = ContourAnalyse;