import {
Zondy
} from '../../common/Base';
import {
GeometryAnalysisBase
} from "./GeometryAnalysisBase";
import {
IgsServiceBase
} from "../../baseserver/IServiceBase";
import {
GPoint
} from "../../common/GPoint";
import {
GLine
} from "../../common/GLine";
import {
GRegion
} from "../../common/GRegion";
import {
getTopAnalysisResult
} from "../../common/Util";
/**
* 拓扑分析类,您只应该对pnt,line,reg3个属性中的一个赋值
* @class module:几何分析服务.TopAnalysis
* @classdesc 拓扑分析类
* @description Zondy.Service.TopAnalysis 只应该对pnt,line,reg3个属性中的一个赋值
* @extends Zondy.Service.GeometryAnalysisBase
* @param {Object} option 属性键值对
* @param {Zondy.Object.GPoint} [option.pnt = null] 需要设置的点类型
* @param {Zondy.Object.GLine} [option.line = null] 需要设置的线类型
* @param {Zondy.Object.GRegion} [option.reg = null] 需要设置的区类型
* @param {Number} [option.nearDis = 0.01] 分析半径
* @param {Zondy.Object.GRegion} [option.relativeObj = null] 相对对象
* @param {function} [option.p_onSuccess = null] 回调函数
* @example
//创建线几何对象
var lineObj = new Zondy.Object.GLine(
new Zondy.Object.AnyLine([new Zondy.Object.Arc
([
new Zondy.Object.Point2D(114.40, 30.60),
new Zondy.Object.Point2D(114.45, 30.20)
])
])
);
//创建区几何对象
var regionObj = new Zondy.Object.GRegion([
new Zondy.Object.AnyLine([new Zondy.Object.Arc([
new Zondy.Object.Point2D(114.301586, 30.533613),
new Zondy.Object.Point2D(114.301586, 30.396517),
new Zondy.Object.Point2D(114.544453, 30.396517),
new Zondy.Object.Point2D(114.444453, 30.533613),
new Zondy.Object.Point2D(114.401586, 30.533613)
])
])
]);
//初始化TopAnalysis类
var topService = new Zondy.Service.TopAnalysis({
//IP地址
ip: "develop.smaryun.com",
//端口号
port: "6163"
});
//调用setLine方法,设置线类型
topService.setLine(lineObj);
//调用setRelativeObj方法,设置拓扑分析参照物
topService.setRelativeObj(regionObj);
//设置拓扑分析半径
topService.nearDis = "0.05";
topService.execute(function (res) {
console.log(res);
}, function (error) {
console.log(error);
});
*/
class TopAnalysis extends GeometryAnalysisBase {
constructor(option) {
var options = option ? option : {};
super(options);
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.pnt
* @type {Zondy.Service.GPoint}
* @description 需要设置的点类型
* @default null
*/
this.pnt = options.pnt !== undefined ? options.pnt : null;
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.line
* @type {Zondy.Service.GLine}
* @description 步长,插值时的间隔步长
* @default null
*/
this.line = options.line !== undefined ? options.line : null;
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.reg
* @type {Zondy.Service.GRegion}
* @description 步长,插值时的间隔步长
* @default null
*/
this.reg = options.reg !== undefined ? options.reg : null;
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.nearDis
* @type {Number}
* @description 分析半径
* @default 0.01
*/
this.nearDis = options.nearDis !== undefined ? options.nearDis : 0.01;
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.relativeObj
* @type {Zondy.Object.GRegion}
* @description 相对对象
* @default null
*/
this.relativeObj = options.relativeObj !== undefined ? options.relativeObj : null;
/**
* @private
* @member Zondy.Service.TopAnalysis.prototype.p_onSuccess
* @type {function}
* @description 回调函数
* @default null
*/
this.p_onSuccess = options.p_onSuccess !== undefined ? options.p_onSuccess : null;
}
/**
* @function Zondy.Service.TopAnalysis.prototype.setPnt
* @description 设置点类型
* @param {Zondy.Object.GPoint} pnt 需要设置的点类型
*/
setPnt(pnt) {
this.pnt = pnt;
}
/**
* @function Zondy.Service.TopAnalysis.prototype.setLine
* @description 设置线类型
* @param {Zondy.Object.GLine} line 需要设置的线类型
*/
setLine(line) {
this.line = line;
}
/**
* @function Zondy.Service.TopAnalysis.prototype.setReg
* @description 设置区类型
* @param {Zondy.Object.GRegion} reg 需要设置的区类型
*/
setReg(reg) {
this.reg = reg;
}
/**
* @function Zondy.Service.TopAnalysis.prototype.setReg
* @description 设置拓扑分析的相对参照物
* @param {Zondy.Object.GRegion} obj 相对参照物
*/
setRelativeObj(obj) {
this.relativeObj = obj;
}
/**
* @function Zondy.Service.TopAnalysis.prototype.onGetRltSuccess
* @description 这里应该还需对返回结果解析(2018/01/30)
* @param {Number} enumNum 缺少注释,请联系IGServer部门
*/
onGetRltSuccess(enumNum) {
var rlt = getTopAnalysisResult(enumNum);
this.p_onSuccess(rlt);
}
/**
* @function Zondy.Service.TopAnalysis.prototype.execute
* @description 执行拓扑分析
* @param {callback} onSuccess 执行成功后的回调函数
* @param {callback} onError 执行失败后的回调函数
*/
execute(onSuccess, onError) {
var me = this;
me.p_onSuccess = onSuccess;
var postObj = {};
postObj.NearDis = this.nearDis;
postObj.Pnt = this.pnt;
postObj.Line = this.line;
postObj.Reg = this.reg;
postObj.RelativeObj = this.relativeObj;
me.partUrl = "geomservice/topanalysis?f=json";
var url = me.getFullUrl();
var me = this;
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: me.onGetRltSuccess,
processFailed: onError
}
});
service.processAsync({
method: 'POST',
data: JSON.stringify(postObj),
headers: {
'Content-Type': 'text/plain;charset=UTF-8'
}
});
}
}
export {
TopAnalysis
};
Zondy.Service.TopAnalysis = TopAnalysis;