    ﻿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;