service/OGC/OGCWMSInfo.js Source
import {Zondy} from '../common/Base';
import {ServiceBase}  from  "../ServiceBase";
import axios from 'axios';

/**
 * @author 基础平台/产品2部 龚跃健
 * @class module:OGC服务.OGCWMSInfo
 * @classdesc  OGC-WMS信息类
 * @description  Zondy.OGC.OGCWMSInfo 获取OGC WMS 信息类
 * @extends  Zondy.Service.ServiceBase
 * @param option - {Object} 属性字段
 * @param {String} [option.ip = "localhost"] 必选。服务器ip。(getWMSInfo,getFeatureInfo)
 * @param {String} [option.port = "6163"] 必选。服务器端口。(getWMSInfo,getFeatureInfo)
 * @param {String} [option.serverType] 必选。查询的服务类型。(getWMSInfo,getFeatureInfo)
 * @param {String} [option.serverName] 必选。查询的服务名。(getWMSInfo,getFeatureInfo)
 * @param {String} [option.version = "1.1.1"] 可选。请求的版本号,1.1.1或1.3.0,服务默认版本为1.1.1。(getWMSInfo,getFeatureInfo)
 * @param {String} [option.layersName] 必选。请求的图层名,用逗号分隔多个图层;既支持单纯的图层名,也支持服务名称(图层名)。(getFeatureInfo)
 * @param {String} [option.srs] 必选。空间坐标参考系。(getFeatureInfo)
 * @param {String} [option.bbox] 必选。显示范围,坐标用minx,miny,maxx,maxy表示(1.1.1版本),坐标用miny,minx,maxy,maxx表示(1.3.0版本),与srs对应设置可以达到动态投影的效果。(getFeatureInfo)
 * @param {String} [option.width = "1024"] 可选。输出地图图片的象素宽。(getFeatureInfo)
 * @param {String} [option.height = "768"] 可选。输出地图图片的象素高。(getFeatureInfo)
 * @param {String} [option.I] 必选。目标图形上进行点查询时的水平方向像素值。(getFeatureInfo)
 * @param {String} [option.J] 必选。目标图形上进行点查询时的垂直方向像素值。(getFeatureInfo)
 * @param {String} [option.style = "default"] 可选。图层样式,用逗号分隔各图层对应的样式。(getFeatureInfo)
 * @param {String} [option.format = "image/png"] 可选。输出图象的类型,支持三种格式gif、png、jpg。(getFeatureInfo)
 * @param {String} [option.infoFormat = "text/html"] 可选。返回要素信息的格式,1.1.1版本支持以下三种格式:application/vnd.ogc.gml,text/plain,text/html;
 * 1.3.0版本支持以下三种格式:text/xml,text/plain,text/html。(getFeatureInfo)
 */
class OGCWMSInfo extends ServiceBase {
    constructor(option) {
        var options = option || {};
        super(options);
        options.baseUrl = "igs/rest/ogc";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.ip
         * @type {String}
         * @description 服务器ip
         * @default localhost
         */
        this.ip = options.ip || "localhost";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.port
         * @type {String}
         * @description 服务器port
         * @default 6163
         */
        this.port = options.port || "6163";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.baseUrl
         * @type {String}
         * @description 查询路径的基础字段
         */
        this.baseUrl = options.baseUrl;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.serverType
         * @type {String}
         * @description 查询的服务类型
         */
        this.serverType = options.serverType;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.serverName
         * @type {String}
         * @description 查询的服务名
         */
        this.serverName = options.serverName;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.version
         * @type {String}
         * @description 请求的版本号,1.1.1或1.3.0,服务默认版本为1.1.1
         */
        this.version = options.version || "1.1.1";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.layersName
         * @type {String}
         * @description 请求的图层名,用逗号分隔多个图层;既支持单纯的图层名,也支持服务名称(图层名)
         */
        this.layersName = options.layersName;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.style
         * @type {String}
         * @description 图层样式,用逗号分隔各图层对应的样式
         * @default default
         */
        this.style = options.style || "default";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.srs
         * @type {String}
         * @description 空间坐标参考系
         */
        this.srs = options.srs;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.bbox
         * @type {String}
         * @description 显示范围,坐标用minx,miny,maxx,maxy表示(1.1.1版本),与srs对应设置可以达到动态投影的效果;坐标用miny,minx,maxy,maxx表示(1.3.0版本),与crs对应设置可以达到动态投影的效果(设置crs为地理坐标系时如EPSG:4326、EPSG:4214等)
         */
        this.bbox = options.bbox;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.width
         * @type {String}
         * @description 输出地图图片的象素宽
         * @default 1024
         */
        this.width = options.width || "1024";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.height
         * @type {String}
         * @description 输出地图图片的象素高
         * @default 768
         */
        this.height = options.height || "768";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.format
         * @type {String}
         * @description 输出图象的类型,支持三种格式gif、png、jpg
         * @default image/png
         */
        this.format = options.format || "image/png";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.infoFormat
         * @type {String}
         * @description 返回要素信息的格式,1.1.1版本支持以下三种格式:application/vnd.ogc.gml,text/plain,text/html,1.3.0版本支持以下三种格式:text/xml,text/plain,text/html。
         * @default text/html
         */
        this.infoFormat = options.infoFormat || "text/html";

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.I
         * @type {String}
         * @description 目标图形上进行点查询时的水平方向像素值
         */
        this.I = options.I;

        /**
         * @private
         * @member  Zondy.OGC.OGCWMSInfo.prototype.J
         * @type {String}
         * @description 目标图形上进行点查询时的垂直方向像素值
         */
        this.J = options.J;
    }

    /**
     * @description 获取WMS信息
     * @function  Zondy.OGC.OGCWMSInfo.prototype.getWMSInfo
     * @param onSuccess -{Function} 获取WMTS信息成功回调函数
     * @param onError -{Function} 获取WMTS信息失败回调函数
     * @example
     var wmsInfo = new Zondy.OGC.OGCWMSInfo({
            ip: "localhost",
            port: "6163",
            serverName: "zhuanti",
            serverType: "layer",
            version: "1.1.1"
        });
     wmsInfo.getWMSInfo(function onSuccess(res) {
            var parser = new Zondy.Format.WMSCapabilities();
            var result = parser.read(res.data);
            console.log(result);
        }, function onError(error) {
            console.log(error);
        });
     */
    getWMSInfo(onSuccess, onError) {
        var me = this;
        me.partUrl = me.serverType + "/" + me.serverName + "/WMSServer?service=WMS&REQUEST=GetCapabilities&version=" + me.version;
        var url = me.getFullUrl();
        axios({
            method: 'get',
            url: url
        }).then(onSuccess).catch(onError);
    }

    /**
     * @description 要素拾取
     * @function  Zondy.OGC.OGCWMSInfo.prototype.getFeatureInfo
     * @param onSuccess -{Function} 获取WMTS信息成功回调函数
     * @param onError -{Function} 获取WMTS信息失败回调函数
     * @example
     var wmsInfo = new Zondy.OGC.OGCWMSInfo({
                    ip: "localhost",
                    port: "6163",
                    serverName: "zhuanti",
                    serverType: "layer",
                    version: "1.1.1",
                    layersName: ["省级行政区x", "省会城市"],
                    srs: "",
                    bbox: [73.4507840311814, 18.163867376307, 134.976488196105, 53.5323367652971],
                    width: '1024',
                    height: '768',
                    I: 639,
                    J: 468
                });
     wmsInfo.getFeatureInfo(function (res) {
            console.log(res);
        }, function onError(error) {
            console.log(error);
        });
     */
    getFeatureInfo(onSuccess, onError){
        var me = this;
        me.partUrl = me.serverType + '/' + me.serverName + '/WMSServer?layers=' + me.layersName + '&version='+ me.version +'&service=WMS&request=GetFeatureInfo&styles='+ me.style +'&format='+ me.format +'&bbox=' + me.bbox + '&width='+ me.width +'&height='+ me.height +'&query_Layers=' + me.layersName + '&info_Format='+ me.infoFormat;
        if (me.version === '1.1.1') {
            me.partUrl += '&srs=' + me.srs + '&&X=' + me.I + '&Y=' + me.J;
        } else if (me.version === '1.3.0') {//服务元数据的输出格式,1.3.0版本的请求参数(暂不支持)
            me.partUrl += '&crs=' + me.srs + '&&I=' + me.I + '&J=' + me.J;
        }
        var url = me.getFullUrl();
        axios({
            method: 'get',
            url: url
        }).then(onSuccess).catch(onError);
    }

}
export {OGCWMSInfo};
Zondy.OGC.OGCWMSInfo = OGCWMSInfo;