import { Zondy } from '../../common/Base';
import { DataStoreService } from '../ServiceBase';
/**
* @author 创新中心-潘卓然
* @class module:PostGIS.PostgisQueryService
* @param {PostgisQueryParameter} option 查询条件
* @param {String} option.path 库名称/工作空间
* @param {String} option.tableNames 表名,多个用逗号分隔,如:X431102TDXZ2005GDLTB,dltb2005
*/
export class PostgisQueryService extends DataStoreService {
constructor(option) {
super(option);
/**
* @member module:PostGIS.PostgisQueryService.prototype.serviceUrl
* @description 服务地址
*/
this.serviceUrl = '/datastore/rest/dataset/pg/query/';
/**
* @member module:PostGIS.PostgisQueryService.prototype.path
* @description 库名称/工作空间/表名称
* @see 映射平台的pglink/hdf/layer
*/
this.path = option.path;
/**
* @member module:PostGIS.PostgisQueryService.prototype.geometry
* @description 几何信息,wkt、geojson、自定义等字符串
*/
this.geometry = option.geometry;
/**
* @member module:PostGIS.PostgisQueryService.prototype.geoFormat
* @description 几何类型,支持wkt、geojson、circle、rect四种,
* 其中当为circle时,geometry格式为:x坐标,y坐标,半径;
* 当为rect时,geometry格式为:xmin,ymin,xmax,ymax
*/
this.geoFormat = option.geoFormat;
/**
* @member module:PostGIS.PostgisQueryService.prototype.sref
* @description 动态投影坐标系ID,支持MapGIS和EPSG标准编号,
* 其中MapGIS只支持当前库中自带的坐标系的ID,EPSG标准请使用EPSG:4326格式,
* 若指定了该参数,则系统认为geometry的坐标系为此坐标系
*/
this.sref = option.sref;
/**
* @member module:PostGIS.PostgisQueryService.prototype.filter
* @description 属性条件 (例如:id>5,id<10)
*/
this.filter = option.filter;
/**
* @member module:PostGIS.PostgisQueryService.prototype.fields
* @description 统计计算中用于分组字段名列表,用逗号分隔
* @see 该属性与segments冲突,不能同时存在
*/
this.fields = option.fields;
/**
* @member module:PostGIS.PostgisQueryService.prototype.segments
* @description 分段分组条件,如["银行<1000","银行 between 1000 and 4000"]
* @see 该属性与fields冲突,不能同时存在
*/
this.segments = option.segments;
/**
* @member module:PostGIS.PostgisQueryService.prototype.statisticFields
* @description Json格式,[field] 方法类型:count,min,max,mean,sum,variance(方差),stddev(标准差)
* @see 激活属性统计信息后,由于一些特定的统计聚类函数,几何字段会丢失
*/
this.statisticFields = option.statisticFields;
/**
* @member module:PostGIS.PostgisQueryService.prototype.includeProperites
* @description 返回结果是否包含属性
* @default false
*/
this.includeProperites = option.includeProperites;
/**
* @member module:PostGIS.PostgisQueryService.prototype.includeGeometry
* @description 返回结果是否包含几何
* @default true*
*/
this.includeGeometry = option.includeGeometry;
this.fixOption(option);
}
/**
* @private 修正get/post需要的真正参数
*/
fixOption(option) {
this.option = {
geometry: option.geometry,
geoFormat: option.geoFormat,
sref: option.sref,
filter: option.filter,
fields: option.fields,
segments: option.segments,
statisticFields: option.statisticFields,
includeProperites: option.includeProperites,
propertyNames: option.propertyNames,
includeGeometry: option.includeGeometry,
pageSize: option.pageSize,
pageNo: option.pageNo
};
}
/**
* @description 查询函数,向服务器发送请求,返回地名地址格式数据
* @function module:PostGIS.PostgisQueryService.prototype.query
* @param {Function} onSuccess 查询成功回调函数。
* @param {Function} onError 查询失败回调函数。
*/
query(onSuccess, onError) {
let { serviceUrl, path, option, geometry, geoFormat } = this;
serviceUrl += path;
let url = this.getFullUrl(serviceUrl, option);
this.get(url, onSuccess, onError);
}
/**
* @description 通过wkt查询数据
* @param {String} wkt
*/
queryByWkt(wkt) {}
/**
* @description 通过geojson查询数据
* @param {String} geojson
*/
queryByGeojson(geojson) {}
/**
* @description 通过circle查询数据
* @param {String} circle 格式: x坐标,y坐标,半径
*/
queryByCircle(circle) {}
/**
* @description 通过rect查询数据
* @param {String} rect 格式: xmin,ymin,xmax,ymax
*/
queryByRect(rect) {}
}
export default PostgisQueryService;
Zondy.DataStore.PostGIS.PostgisQueryService = PostgisQueryService;