【问题标题】:WFS Layer in OpenLayers queries server for GML data but doesn't display the returned dataOpenLayers 中的 WFS 层向服务器查询 GML 数据,但不显示返回的数据
【发布时间】:2013-01-31 22:56:01
【问题描述】:

我已将 WFS 图层添加到地图中,并且可以看到(使用 Fiddler)向服务器发出的图层数据请求。服务器使用 GML 作为数据格式,返回的数据是有效的。但是,OpenLayers 不显示数据。这是我使用的代码。

$(document).ready(
        function () {
            // allow testing of specific renderers via "?renderer=Canvas", etc
            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
            renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
            var geographic = new OpenLayers.Projection("EPSG:4326");
            var mercator = new OpenLayers.Projection("EPSG:900913");

            map = new OpenLayers.Map({
                div: "map",
                layers: [
                    new OpenLayers.Layer.WMS("OpenLayers WMS",
                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                        { layers: "basic" }
                    ),
                    new OpenLayers.Layer.Vector("GML", {
                        strategies: [new OpenLayers.Strategy.Fixed()],
                        protocol: new OpenLayers.Protocol.WFS({
                                url: "http://localhost/MapServer/Default.aspx",
                                featureType: "Layer_ACTIVE",
                                featureNS: "http://www.tstgis.org/gml",
                                version: "1.1.0",
                                geometryName: "line"
                            }),
                            renderers: renderer
                        })
                ],
                zoom: 15
            });

            var bb = new OpenLayers.Bounds(-179.821327209473, 12.1057098342161, -56.5289154052734, 78.1442901657839);
            map.zoomToExtent(bb);
});

此测试脚本是在 localhost/mapserver 下运行的 HTML shell 的一部分,因此它排除了熟悉的跨域问题。

发生了什么事?注意:返回的数据集非常大(1.5 MB),我想知道这是否与丢失的显示有关。

【问题讨论】:

    标签: gis openlayers


    【解决方案1】:

    我毫不怀疑这是 OpenLayers 的配置问题。根据我对 OpenLayers 的了解,我已经正确配置了它。事实证明,就我而言,设置 featurePrefix 选项是必不可少的。这样做的原因是每个 FeatureMember 节点的 XML 响应 (GML) 中的名称空间和前缀用于识别响应的适当读取器。默认情况下,featurePrefix 设置为“功能”。如果响应的命名空间 + 前缀与 OpenLayers 中的配置不匹配,则特征不会添加到图层中,因此不会显示。在我的情况下,前缀设置为空字符串,因为服务器不会向响应添加前缀。

    另外,设置 geometryName 也很关键。对于 WFS 版本 1.0,geometryName 的默认值是“the_geom”,对于更高版本,默认值为 null。服务器使用geometryName 来实际定位要素。在我的例子中,服务器上使用的 geometryName 是“msGeometry”。

    这是工作代码。

    $(document).ready(
    function () {
        // allow testing of specific renderers via "?renderer=Canvas", etc
        var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
        renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
        var geographic = new OpenLayers.Projection("EPSG:4326");
        var mercator = new OpenLayers.Projection("EPSG:900913");
    
        map = new OpenLayers.Map({
            div: "map",
            layers: [
                new OpenLayers.Layer.WMS("OpenLayers WMS",
                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                    { layers: "basic" }
                ),
                new OpenLayers.Layer.Vector("GML", {
                    strategies: [new OpenLayers.Strategy.Fixed()],
                    protocol: new OpenLayers.Protocol.WFS({
                            url: "http://localhost/MapServer/Default.aspx",
                            featureType: "Data_ACTIVE",
                            version: "1.1.0",
                            geometryName: "msGeometry",
                            featurePrefix: ""
                        }),
                        renderers: renderer
                    })
            ],
            zoom: 15
        });
    
        var bb = new OpenLayers.Bounds(-179.821327209473, 12.1057098342161, -56.5289154052734, 78.1442901657839);
        map.zoomToExtent(bb);
    

    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多