在 ol3 中显示 WFS 图层

Display WFS layer in ol3

我正在使用 geoserver 和 openlayers 3,我在 geoserver 中有一个托管层,我想使用 ol3 作为 wfs 层来显示它。它没有显示任何错误,但我没有得到地图。它适用于 wms,但不适用于 wfs。 我正在使用 wamp 服务器来托管我的应用程序。

谁能帮我解决这个问题?这是我的代码:

var v=new ol.layer.Vector({
       source: new ol.source.Vector({
            format: new ol.format.WFS({
                version: '1.1.0',
                url: 'http://localhost:8080/geoserver/wfs',
                featurePrefix: 'opengeo', 
                featureType: 'comgeo', 
                featureNS: 'http://localhost:8080/opengeo', 
                geometryName: 'geom'
            })
        })  
});
var map = new ol.Map({
    target: 'map-id',
    layers: [v],
    view: new ol.View({
        projection: 'EPSG:4326',

        center: [0, 0],
        zoom: 1
    })     
});

我在论坛上看到我需要设置代理,我做到了并且我的代理工作正常,但我不知道如何在我的代码中使用它 (Openlayers.ProxyHost)。 当我在 network/images 选项卡下使用 firebug 时,我可以看到 wms 请求,但看不到 wfs。 提前致谢。

您似乎混淆了 OpenLayers 2 和 OpenLayers 3。请看一下 this or this example. These examples are using JSONP 这样您就不需要代理了。

终于解决了我的问题,所以我想和你分享解决方案。

首先,我之前的代码中存在一些错误,这是设置 wfs 层的正确方法:

var u = "http://localhost/geoserver/wfs?&service=wfs&version=1.1.0&request=GetFeature&typeNames=opengeo:comgeo";
var v = new ol.layer.Vector({
    title: 'comgeo',
           source: new ol.source.Vector({
                url: '/cgi-bin/proxy.cgi?url='+ encodeURIComponent(u),

                format: new ol.format.WFS({

                })
           })   
});

u是wfs请求,参数值opengeo是geoserver中的工作空间,comgeo是层。

你需要使用 encodeURIComponent 函数来转义这个 url,这样你就不会得到像 :

这样的著名错误

Could not determine geoserver request from http request

我的 url /cgi-bin/proxy.cgi?url= 的第一部分是因为如果您的应用程序是 运行 来自另一个位置(我正在使用 wamp托管我的)。

要让您的代理正常工作,请尝试本教程: set proxy

像我的代码一样使用代理,这个

OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";

ol3 中不可用。