import {
    Zondy
} from '../../common/Base';
import {
    GeometryAnalysisBase
} from "./GeometryAnalysisBase";
import {
    Point2D
} from "../../common/Point2D";
import {
    CProjectParam
} from "./CProjectParam";
import {
    IgsServiceBase
} from "../../baseserver/IServiceBase";

/**
 * 投影点数组
 * @class  module:几何分析服务.ProjectDots
 * @classdesc 投影点数组
 * @description Zondy.Service.ProjectDots
 * @extends Zondy.Service.GeometryAnalysisBase
 * @param {Zondy.Object.Point2D} dots 需要转换的点坐标 Array{@link Zondy.Object.Point2D}
 * @param {Zondy.Service.CProjectParam} srcparam 源投影参数
 * @param {Zondy.Service.CProjectParam} desparam 目标投影参数
 * @param {Object} option 属性键值对,拓展属性,为其他属性赋值的键值对
 * @example
 //构造需投影转换的点数组
 var dots = new Array(1);
 dots[0] = new Zondy.Object.Point2D(4819.949688726125, 67647.39383493776);
 //设置源投影参数
 var srcProjParam = new Zondy.Service.CProjectParam({
                    // 度分秒,即±DDDMMSS.SSSS格式
                    ProjAngleUnit: 5,
                    // 投影平面直角坐标系
                    ProjType: 3,
                    // 高斯-克吕格(横切椭圆柱等角)投影
                    ProjTypeID: 5,
                    // 厘米
                    ProjUnit: 12,
                    // 投影带号
                    ProjZoneNO: 20,
                    // 投影类型为3度分带
                    ProjZoneType: 1,
                    // 北京/克拉索夫斯基(1940年)椭球
                    SphereID: 2,
                    // 水平比例尺
                    ProjRate: 5000,
                    // 中央子午线经度
                    ProjLon: 1170000
                });
 //设置目的投影参数
 var desProjParam = new Zondy.Service.CProjectParam({
                    // 角度单位为度
                    ProjAngleUnit: 4,
                    // 地理坐标系
                    ProjType: 1,
                    // 地理坐标系
                    ProjTypeID: 0,
                    // 毫米
                    ProjUnit: 1,
                    // 投影带号
                    ProjZoneNO: 20,
                    // 投影类型为6度分带
                    ProjZoneType: 0,
                    // 北京/克拉索夫斯基(1940年)椭球
                    SphereID: 1,
                    // 水平比例尺
                    ProjRate: 1,
                    // 中央子午线经度
                    ProjLon: 1170000
                });
 //初始化投影转换服务
 var projectDotsService = new Zondy.Service.ProjectDots(
 //设置需要投影转换的点数组
 dots,
 //设置源投影参数
 srcProjParam,
 //设置目的投影参数
 desProjParam,
 //设置Options参数,包括服务器地址、端口号、返回结果格式
 {
     //IP地址
     ip: "develop.smaryun.com",
     //端口号
     port: "6163",
     //结果格式
     resultFormat: "json"
 });
 projectDotsService.execute(function (res) {
                    console.log(res);
                }, function (error) {
                    console.log(error);
                });
 */
class ProjectDots extends GeometryAnalysisBase {
    constructor(dots, srcparam, desparam, option) {
        var options = option ? option : {};
        super(options);

        /**
         * @private
         * @member Zondy.Service.ProjectDots.prototype.InputDots
         * @type {Zondy.Object.Point2D}
         * @description 投影坐标 Array{@link Zondy.Object.Point2D}
         */
        this.InputDots = dots;

        /**
         * @private
         * @member Zondy.Service.ProjectDots.prototype.SrcProjParam
         * @type {Zondy.Service.CProjectParam}
         * @description 源投影参考
         */
        this.SrcProjParam = srcparam;

        /**
         * @private
         * @member Zondy.Service.ProjectDots.prototype.DesProjParm
         * @type {Zondy.Service.CProjectParam}
         * @description 目的投影参考
         */
        this.DesProjParm = desparam;
    }

    /**
     * @function Zondy.Service.ProjectDots.prototype.execute
     * @description 执行点投影
     * @param {callback} onSuccess 执行成功后的回调函数
     * @param {callback} onError 执行失败后的回调函数
     */
    execute(onSuccess, onError) {
        this.partUrl = "geomservice/projectdots?f=json";

        var postData = {};
        postData['InputDots'] = this.InputDots;
        postData['SrcProjParam'] = this.SrcProjParam;
        postData['DesProjParm'] = this.DesProjParm;
        var url = this.getFullUrl();
        var me = this;
        var service = new IgsServiceBase(url, {
            eventListeners: {
                scope: me,
                processCompleted: onSuccess,
                processFailed: onError
            }
        });
        service.processAsync({
            method: 'POST',
            data: JSON.stringify(postData),
            headers: {
                'Content-Type': 'text/plain;charset=UTF-8'
            }
        });
    }

}
export {
    ProjectDots
};
Zondy.Service.ProjectDots = ProjectDots;