在ol3中显示WFS层

时间:2015-05-22 02:25:40

标签: geoserver openlayers-3

我正在使用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)。 当我使用firebug时,在网络/图像选项卡下,我可以看到wms请求,但不能查看wfs。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

我以前的代码中首先出现了一些错误,这是设置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请求,paramvalue opengeo是地理服务器中的工作区,comgeo是图层。

您需要使用encodeURIComponent函数来转义此网址,因此您不会收到如下的着名错误:

  

无法从http请求中确定地理标志服务请求

我的网址/cgi-bin/proxy.cgi?url=的第一部分是因为如果您的应用程序从其他位置运行(我使用wamp来托管我的),您需要一个代理。

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

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

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

ol3中无法使用。

答案 1 :(得分:1)

看起来你正在混淆OpenLayers 2和OpenLayers 3.请查看thisthis示例。这些示例使用JSONP,因此您不需要代理。