zoukankan      html  css  js  c++  java
  • OL3实现空间查询的代码示例

    前言:在左开发的时候我们会用到空间查询,尤其在poi范围内的查询,该功能在arcgis api中有专门的类封装该功能,OL3和OL4中针对WFS服务,也可以实现该功能,需要结合WFS 和Filter共同完成。先看张图片:

    空间查询示例:青海、西藏、新疆

    一、代码示例

                $("#boxQuery").on("click", function () {
                    Draw();
                });
                function getQuery(geometry) {
                    // 创建一个请求
                    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: new ol.format.filter.Intersects('geom',geometry)
                    });
    
                    // 发送请求
                    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);
                    });
                }
                function Draw() {
                    draw = new ol.interaction.Draw({
                        type: "Polygon",
                        wrapX: false,
                        active: true,
                        style: new ol.style.Style({
                            fill: new ol.style.Fill({
                                color: 'rgba(255, 255, 255, 0.2)'
                            }),
                            stroke: new ol.style.Stroke({
                                color: '#ffcc33',
                                 2
                            }),
                            image: new ol.style.Circle({
                                radius: 7,
                                fill: new ol.style.Fill({
                                    color: '#ffcc33'
                                })
                            })
                        })
                    });
                    map.addInteraction(draw);
                    draw.on("drawend", function (evt) {
                        var feture = evt.feature;
                        var inputGeometry = feture.getGeometry();
                        getQuery(inputGeometry);
                    });
                }

    用的过滤条件是 ol.format.filter.Intersects

    二、可能出现的错误

    一直出现错误:“org.geoserver.wfs.WFSException: Illegal property name: geometry for feature type”。后来经过仔细研究接口,发现查询参数设置中,ol.format.filter.intersects接口中的"geometryName"中的属性名称不能任意填写,而是必须填写WFS相关数据源中空间属性字段名称,故将 ol.format.filter.intersects接口中的geometryName设置成空间字段名称“geom”则查询正常

  • 相关阅读:
    GDB+QEMU调试内核模块(实践篇)
    排序算法的python实现
    Linux命令行相关
    操作系统与网络
    计算机组成原理
    有了自己的技术博客
    if 和 if else
    十效率换算成十六进制
    <<左移 >>右移 >>>无符号右移 &与运算 |或运算 ^异或运算 ~反码
    // &与 // |或 // ^异或 // !非 // &&短路 // ||短路
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752297.html
Copyright © 2011-2022 走看看