WFS—GetFeature方法

前言:WFS服务,可以通过OL进行加载,加载有简单方式也有GetFeature方式,该种方式自由度更大,可以结合一些过滤条件,这样一方面可以提高加载数据的效率,也是业务的一种。来张图效果图:

红色是通过GetFeature加载,轮廓线是简单加载的,北京市的道路也是简单方式加载的。

一、GetFeature方式(核心代码)

        // 创建一个请求
        var featureRequest = new ol.format.WFS().writeGetFeature({
            srsName: 'EPSG:4326',//坐标系
            featureNS: 'http://www.opengeospatial.net/cite',// 注意这个值必须为创建工作区时的命名空间URI
            featurePrefix: 'cite',//工作区的名称
            featureTypes: ['bou2_4p '],//所要访问的图层
            maxFeatures:5000,
            outputFormat: 'application/json',
            filter: ol.format.filter.equalTo('name', '河北省')
        });

        // 发送请求
        fetch('http://localhost:8080/geoserver/wfs', {
            method: 'POST',
            body: new XMLSerializer().serializeToString(featureRequest)
        }).then(function (response) {
            return response.json();
        }).then(function (json) {
            var features = new ol.format.GeoJSON().readFeatures(json);
            vectorSource.addFeatures(features);
        });

这里面有三个参数是必须的:featureNS、featurePrefix、featureTypes。这三个参数必须赋值否则错误。

二、完整demo

<!DOCTYPE html>
<html>
<head>
    <title>GetFeatures</title>
    <link href="../script/ol4/ol.css" rel="stylesheet" />
    <script src="../script/ol4/ol.js"></script>
</head>
<body>
    <input id="save" type="button" value="保存" onclick="onSave();" />
    <div id="map" class="map"></div>
    <script>
        var raster = new ol.layer.Tile({
            source: new ol.source.OSM()
        });

        var vectorSource = new ol.source.Vector();
        var vecLayer = new ol.layer.Vector({
            source: vectorSource,
            style: function (feature, resolution) {
                return new ol.style.Style({
                    stroke: new ol.style.Stroke({
                        color: 'red',
                        width: 5
                    })
                });
            }
        });
        var modifiedFeatures = null;
        var wfsVectorLayer1 = new ol.layer.Vector({
            source: new ol.source.Vector({
                format: new ol.format.GeoJSON({
                    geometryName: 'geom' // 因为数据源里面字段the_geom存储的是geometry,所以需要指定
                }),
                url: 'http://localhost:8080/geoserver/cite/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=cite%3Abou2_4p&maxFeatures=5000&outputFormat=application%2Fjson'
            }),
            style: function (feature, resolution) {
                return new ol.style.Style({
                    stroke: new ol.style.Stroke({
                        color: 'blue',
                        width: 5
                    })
                });
            }
        });
        var wfsVectorLayer = new ol.layer.Vector({
            source: new ol.source.Vector({
                format: new ol.format.GeoJSON({
                    geometryName: 'geom' // 因为数据源里面字段the_geom存储的是geometry,所以需要指定
                }),
                url: 'http://localhost:8080/geoserver/cite/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=cite%3Abeijing&maxFeatures=3100&outputFormat=application%2Fjson&srsname=EPSG:4326'
            }),
            style: function (feature, resolution) {
                return new ol.style.Style({
                    stroke: new ol.style.Stroke({
                        color: 'blue',
                        width: 5
                    })
                });
            }
        });
        var selectInteraction = new ol.interaction.Select({
            wrapX: false,
            //style: new ol.style.Style({
            //    stroke: new ol.style.Stroke({
            //        color: 'red',
            //        width: 4
            //    })
            //}),
            hitTolerance:10
        });
        var map = new ol.Map({
            interactions: ol.interaction.defaults().extend([selectInteraction]),
            layers: [raster, wfsVectorLayer1,vecLayer,wfsVectorLayer],
            target: 'map',
            view: new ol.View({
                center: [0, 0],
                projection: 'EPSG:4326',
                zoom: 2
            })
        });
        selectInteraction.on("select", function (evt) {

            console.log(evt.selected);
        });
        // 创建一个请求
        var featureRequest = new ol.format.WFS().writeGetFeature({
            srsName: 'EPSG:4326',//坐标系
            featureNS: 'http://www.opengeospatial.net/cite',// 注意这个值必须为创建工作区时的命名空间URI
            featurePrefix: 'cite',//工作区的命名
            featureTypes: ['bou2_4p '],//所要访问的图层
            maxFeatures:5000,
            outputFormat: 'application/json',
            filter: ol.format.filter.equalTo('name', '河北省')
        });

        // 发送请求
        fetch('http://localhost:8080/geoserver/wfs', {
            method: 'POST',
            body: new XMLSerializer().serializeToString(featureRequest)
        }).then(function (response) {
            return response.json();
        }).then(function (json) {
            var features = new ol.format.GeoJSON().readFeatures(json);
            vectorSource.addFeatures(features);
        });
    </script>
</body>
</html>

 

posted @ 2018-10-12 19:49  HPUGIS  阅读(1594)  评论(0编辑  收藏  举报