Gis OpenLayers中的WFS层查询服务器的GML数据,但不';t显示返回的数据

Gis OpenLayers中的WFS层查询服务器的GML数据,但不';t显示返回的数据,gis,openlayers,Gis,Openlayers,我已经在地图中添加了一个WFS图层,可以看到(使用Fiddler)向服务器请求图层数据。服务器使用GML作为数据格式,并且返回的数据是有效的。但是,OpenLayers不显示数据。这是我使用的代码 $(document).ready( function () { // allow testing of specific renderers via "?renderer=Canvas", etc var renderer = Open

我已经在地图中添加了一个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.5MB),我想知道这是否与缺少的显示有关

我毫不怀疑这是OpenLayers的配置问题。根据我对OpenLayers的了解,我已经正确地配置了它。事实证明,在我的例子中,设置featurePrefix选项是至关重要的。这是因为每个FeatureMember节点的XML响应(GML)中的名称空间和前缀用于标识响应的适当读取器。默认情况下,featurePrefix设置为“feature”。如果响应的名称空间+前缀与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);
}))