• WMS查询 via fetch API


    请求WMS图片

    /**
     * 请求WMS图片
     * @param {string} url 
     * @param {WMS_QUERY} query 
     * @typedef {Object} WMS_QUERY
     * @property {string} LAYERS 图层名,可设置多个,用 "," 隔开
     * @property {string} SRS 坐标系
     * @property {number} WIDTH 图片宽度
     * @property {number} HEIGHT 图片高度
     * @property {string} BBOX 边界,如: 546618.6589188746,3374265.5182118746,547991.593451125,3375638.452744125
     * @returns 
     */
    async function getWMSImage(url, query) {
        const DEFAULT = {
            VERSION: '1.1.1',
            FORMAT: 'image/png',
            TRANSPARENT: true,
        };
        var resp = await fetch(`${url}?` + new URLSearchParams({
            SERVICE: 'WMS',
            REQUEST: 'GetMap',
            ...DEFAULT,
            ...query,
        }));
        var blob = await resp.blob();
        var objectURL = URL.createObjectURL(blob);
        var image = new Image();
        image.src = objectURL;
        return new Promise((resolve, reject) => {
            image.addEventListener('load', function ({ target: image }) {
                resolve(image);
                URL.revokeObjectURL(image.src);
            });
        });
    }
    

    see

    查询字符串:
    https://stackoverflow.com/questions/35038857/setting-query-string-using-fetch-get-request

    GeoServer WMS过滤

    WMS 规范只允许有限的数据过滤。GeoServer 增强了 WMS 过滤功能以匹配 WFS 提供的功能。该filter参数可以指定 OGC XML 过滤器的列表。该列表括在括号中:( )。在 GET 请求中使用时,XML 标记括号必须是 URL 编码的。

    getWMSImage(WMS_SERVICE_URL, {
            LAYERS: WMS_LAYER_NAME,
            SRS: SRS,
            WIDTH: width,
            HEIGHT: width,
            BBOX: bbox.join(','),
            FILTER: `<Filter xmlns="http://www.opengis.net/ogc"><And><BBOX><PropertyName>geom</PropertyName><Envelope xmlns="http://www.opengis.net/gml" srsName="EPSG:4549"><lowerCorner>546754.6609554517 3374368.1461884514</lowerCorner><upperCorner>547842.5342045482 3375456.0194375482</upperCorner></Envelope></BBOX><Contains><PropertyName>geom</PropertyName><Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4549"><pos srsDimension="2">547302.724726 3374829.869844</pos></Point></Contains></And></Filter>`
        }).then(image => {
            bt_Util.SetGlobalOrthoTexture1(x1, y2, x2, y1, width, width, image);
            setAlpha(ALPHA);
        }).finally(err => {
            // pending = false;
        });
    

    see

    https://docs.geoserver.org/stable/en/user/services/wms/vendor.html#filter

    编码Filter

        var featureRequest = new WFS().writeGetFeature({
            // srsName: SRS,
            featureTypes: [`${WMS_LAYER_NAME}`],
            // outputFormat: 'text/xml; subtype=gml/3.1.1',
            // outputFormat: 'application/json',
            // filter: Filter.contains('geom', new Point([x, y]), SRS), // For PostGIS, it's "geom", not "geometry"
            filter: Filter.contains('geom', new Point([0,0]), SRS), // For PostGIS, it's "geom", not "geometry"
            // maxFeatures: 10,
        });
    
        var fr = new XMLSerializer().serializeToString(featureRequest);
        console.log('WFS查询请求');
        console.log(fr);
        var xml = new DOMParser().parseFromString(fr, 'text/xml');
        var filter = xml.getElementsByTagName('Filter')[0];
        var str_filter = filter?.outerHTML;
    

    END

  • 相关阅读:
    Java Web连接各种数据库方式汇总
    java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决办法
    <meta 标签的详细使用
    Redis实战之征服 Redis + Jedis + Spring (一)
    Redis实战之征服 Redis + Jedis + Spring (二)
    Redis实战之征服 Redis + Jedis + Spring (三)
    快速组合数
    HDU4632:Palindrome subsequence(区间DP)
    阿里暂停微信服务:让商家回归微信的本职,做好客户服务
    谈谈无穷小微积分对我国微积分教学改革的影响
  • 原文地址:https://www.cnblogs.com/develon/p/15188748.html
Copyright © 2020-2023  润新知