0

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 シェルの一部であるため、おなじみのクロスドメインの問題が除外されます。

何が起こっている?注: 返されたデータ セットは非常に大きく (1.5 MB)、表示の欠落と関係があるのでしょうか。

4

1 に答える 1

0

これがOpenLayersの構成の問題であることは間違いありませんでした。私がOpenLayersについて知っていたことから、私はそれを適切に構成しました。私の場合、featurePrefixオプションを設定することが不可欠です。これは、各FeatureMemberノードのXML応答(GML)の名前空間とプレフィックスを使用して、応答の適切なリーダーを識別するためです。デフォルトでは、featurePrefixは「feature」に設定されています。応答の名前空間+プレフィックスがOpenLayersの構成と一致しない場合、機能はレイヤーに追加されないため、表示されません。私の場合、サーバーが応答にプレフィックスを追加しないため、プレフィックスは空の文字列に設定されます。

また、geometryNameの設定も重要です。GeometryNameのデフォルト値は、WFSバージョン1.0の場合は「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);

});

于 2013-02-06T20:05:21.343 に答える