import {Zondy} from '../../common/Base';
import {QueryServiceBase} from "./QueryServiceBase";
import {MultiGeoQueryParameter} from "./MultiGeoQueryParameter";
import {IgsServiceBase} from "../../baseserver/IServiceBase";
/**
* @author 基础平台/产品2部 龚跃健
* @class module:要素服务.MultiGeoQuery
* @classdesc 多几何查询类
* @description Zondy.Service.MultiGeoQuery
* @extends Zondy.Service.QueryServiceBase
* @param queryParam -{Zondy.Object.QueryByLayerParameter} 查询参数信息。
* @param docName - {String} 文档名称。
* @param layerIndex -{Number} 图层序号。
* @param option - {Object} 属性键值对。
*/
class MultiGeoQuery extends QueryServiceBase {
constructor(queryParam, docName, layerIndex, option) {
var options = option ? option : {};
super(options);
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.queryParam{Zondy.Object.QueryByLayerParameter}
* @type {String}
* @description 查询参数信息
*/
this.queryParam = queryParam;
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.mapName
* @type {String}
* @description 地图名称
*/
this.mapName = docName;
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.mapIndex
* @type {Number}
* @description 地图索引
*/
this.mapIndex = 0;
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.layerIndex
* @type {Number}
* @description 图层索引
*/
this.layerIndex = layerIndex;
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.baseUrl
* @type {String}
* @description 基类地址
*/
this.baseUrl = "igs/rest/extend/MultiGeo";
/**
* @private
* @member Zondy.Service.MultiGeoQuery.prototype.partUrl
* @type {String}
* @description 查询参数地址
*/
this.partUrl = "docs/" + this.mapName + "/" + this.mapIndex.toString() + "/" + this.layerIndex + "/Geoquery";
this.partUrl += queryParam.getParameterURL();
}
/**
* @description 查询函数,向服务器发送请求
* @function Zondy.Service.MultiGeoQuery.prototype.query
* @param onSuccess - {Function} 查询成功回调函数。
* @param onError - {Function} 查询失败回调函数。
* @example
//初始化查询结构对象,设置查询结构包含几何信息
var queryStruct = new Zondy.Service.QueryFeatureStruct();
//是否包含几何信息
queryStruct.IncludeGeometry = true;
//创建两个用于查询的矩形数组
var pointObj = new Array();
pointObj[0] = new Zondy.Object.Point2D(116.4375, 41.53125);
pointObj[1] = new Zondy.Object.Point2D(114.6875, 39.08125);
pointObj[2] = new Zondy.Object.Point2D(118.1875, 39.34375);
pointObj[3] = new Zondy.Object.Point2D(116.4375, 41.53125);
var geomObj1 = new Zondy.Object.Polygon(pointObj);
var pointObj2 = new Array();
pointObj2[0] = new Zondy.Object.Point2D(105.5875, 48.70625);
pointObj2[1] = new Zondy.Object.Point2D(106.1125, 46.86875);
pointObj2[2] = new Zondy.Object.Point2D(108.3875, 48.44375);
pointObj2[3] = new Zondy.Object.Point2D(105.5875, 48.70625);
var geomObj2 = new Zondy.Object.Polygon(pointObj2);
//实例化查询参数对象
var queryParam = new Zondy.Service.MultiGeoQueryParameter({
//设置查询几何对象
geometry: [geomObj1, geomObj2],
//设置查询几何类型
geometryType: "polygon",
//设置结果返回类型
resultFormat: "json",
//设置查询结构对象
struct: queryStruct
});
//实例化地图文档查询服务对象
var queryService = new Zondy.Service.MultiGeoQuery(queryParam, "WorldJWVector", 1, {
//IP地址
ip: "develop.smaryun.com",
//端口号
port: "6163"
});
queryService.query(function (res) {
console.log(res);
}, function (error) {
console.log(error);
});
*/
query(onSuccess, onError) {
if (this.queryParam === null || !(this.queryParam instanceof MultiGeoQueryParameter)) {
return;
}
var dataObj = null;
if (this.queryParam.geometryType === "point") {
dataObj = {pointArr: this.queryParam.geometry};
}
else if (this.queryParam.geometryType === "line") {
dataObj = {lineArr: this.queryParam.geometry};
}
else if (this.queryParam.geometryType === "polygon") {
dataObj = {PolygonObjs: this.queryParam.geometry};
}
var me = this;
var url = me.getFullUrl();
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: onSuccess,
processFailed: onError
}
});
service.processAsync({
method: 'POST',
data: JSON.stringify(dataObj),
headers: {'Content-Type': 'text/plain;charset=UTF-8'}
});
}
}
export {MultiGeoQuery};
Zondy.Service.MultiGeoQuery = MultiGeoQuery;