美文网首页开源
WFS服务查询慢怎么办?通过OGC查询过滤进行优化

WFS服务查询慢怎么办?通过OGC查询过滤进行优化

作者: 不玩了啊 | 来源:发表于2020-03-31 09:28 被阅读0次

    一、什么是OGC?

    OGC,全称是开放地理空间信息联盟(Open Geospatial Consortium),是一个非盈利的国际标准组织,它制定了数据和服务的一系列标准,GIS厂商按照这个标准进行开发可保证空间数据的互操作。(来源百度百科)

    二、OGC定义了些什么东西?

    OGC基于http或者说是web的空间数据操作技术,主要涉及Web Service的相关技术。与ISO/TC211一同推出

    基于Web服务(XML)的空间数据互操作实现规范

    用于空间数据传输与转换的地理信息标记语言GML

    提出了一个能无缝集成各种在线空间处理和位置服务的框架即OWS (OGC Web Service)

    意义:使得分布式空间处理系统能够通过XML和HTTP技术进行交互,并为各种在线空间数据资源、来自传感器的信息、空间处理服务和位置服务,基于Web的发现、访问、集成、分析、利用和可视化提供互操作框架。

    完整的WFS+Filter示例

    http://xxxx/xxxx/wfs100/utf-8?

    VERSION=1.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=RSWB:RSWB&Filter=

    (<Filter>

    <AND>

        <ogc:PropertyIsLike xmlns:ogc="http://www.opengis.net/ogc" wildCard="*" singleChar="?" escapeChar="\">

            <ogc:PropertyName>ID</ogc:PropertyName>

            <ogc:Literal>4201*</ogc:Literal>

        </ogc:PropertyIsLike>

        <ogc:PropertyIsEqualTo xmlns:ogc="http://www.opengis.net/ogc">

            <ogc:PropertyName>GRADE</ogc:PropertyName>

            <ogc:Literal>小二</ogc:Literal>

        </ogc:PropertyIsEqualTo>

    </AND>

    <AND>

        <ogc:PropertyIsLike xmlns:ogc="http://www.opengis.net/ogc" wildCard="*" singleChar="?" escapeChar="\">

            <ogc:PropertyName>ID</ogc:PropertyName>

            <ogc:Literal>4202*</ogc:Literal>

        </ogc:PropertyIsLike>

        <ogc:PropertyIsEqualTo xmlns:ogc="http://www.opengis.net/ogc">

            <ogc:PropertyName>GRADE</ogc:PropertyName>

            <ogc:Literal>小二</ogc:Literal>

        </ogc:PropertyIsEqualTo>

    </AND>

    </Filter>)

    完整的WFS+bbox+Filter 代码示例(通用格式):

     getVector: function () {

            var source = new ol.source.Vector({

                format: new ol.format.GeoJSON(),

                loader: function (extent) {

                    //坐标系转换

                    var bbox = ol.proj.transformExtent(extent, 'EPSG:3857', 'EPSG:4326');

                    var filter = '&filter='

                        + '<ogc:Filter xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc">'

                        + '<ogc:And>'

                        + '<ogc:PropertyIsEqualTo>'

                        + '<ogc:PropertyName>city_id</ogc:PropertyName>'

                        + '<ogc:Literal>'

                        +   rent.cityid

                        + '</ogc:Literal>'

                        + '</ogc:PropertyIsEqualTo>'

                        + '<ogc:BBOX>'

                        + '<gml:Box>'

                        + '<gml:coordinates>'

                        +  bbox[0] + ',' + bbox[1] + ' '+ bbox[2] + ',' + bbox[3]

                        + '</gml:coordinates>'

                        + '</gml:Box>'

                        + '</ogc:BBOX>'

                        + '</ogc:And>'

                        + '</ogc:Filter>';

                    //返回指定坐标系 &srsname=EPSG:3857

                    var url = '?service=WFS&version=1.0.0&request=GetFeature&typeName=xxx'

                        + filter + '&maxFeatures=10000&outputFormat=application%2Fjson&srsname=EPSG:3857';

                    var ajax = new XMLHttpRequest();

                    ajax.open('get', url, true);

                    ajax.onreadystatechange = function (data) {

                        if (ajax.readyState == 4 && ajax.status == 200) {

                            var text = data.currentTarget.responseText;

                            if(text.substring(0,1)!="{")return;

                            var features = source.getFormat().readFeatures(text);

                            source.forEachFeature(function (feat) {

                                source.removeFeature(feat)

                            });

                                source.addFeatures(features);

                            });

                        }

                    }

                    ajax.send();

                },

                strategy: ol.loadingstrategy.bbox

            });

            var vector = new ol.layer.Vector({

                source: source,

                style: function (feat) {

                }

            })

            vector.set('id', 'layer1');

            vector.setVisible(false)

            return vector;

        },

    ————————————————

    版权声明:本文为CSDN博主「hucbmz」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/hucbmz/java/article/details/104961540

    相关文章

      网友评论

        本文标题:WFS服务查询慢怎么办?通过OGC查询过滤进行优化

        本文链接:https://www.haomeiwen.com/subject/emiiuhtx.html