Показать слой WFS в ol3

Я работаю с геосервером и openlayers 3, у меня есть размещенный слой в геосервере, который я хочу отображать, используя 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. Заранее спасибо.


person gis newbie    schedule 22.05.2015    source источник


Ответы (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, значение параметра opengeo — это рабочая область в геосервере, а comgeo — это слой.

Вам нужно избежать этого URL-адреса с помощью функции encodeURIComponent, чтобы вы не получили известную ошибку, например:

Не удалось определить запрос геосервера из http-запроса

Первая часть моего URL-адреса /cgi-bin/proxy.cgi?url= связана с тем, что вам нужен прокси-сервер, если ваше приложение работает из другого места (я использую wamp для размещения своего).

Чтобы заставить ваш прокси работать, попробуйте это руководство: data-access.html" rel="nofollow noreferrer">установить прокси

Используйте прокси, как в моем коде, это

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

недоступен в ol3.

person gis newbie    schedule 24.05.2015
comment
Чувак, я пытался 10 часов понять, как это работает, и, наконец, благодаря тебе я это сделал. Смешно, как все копируют и вставляют бесполезные ответы о jsonp и т. д. Ни одна из этих вещей не сработала для меня. Но твой ответ помог. Большое спасибо за ваше время, чтобы опубликовать его. - person user1919; 26.11.2015

Похоже, вы путаете OpenLayers 2 и OpenLayers 3. Пожалуйста, взгляните на это или в этом примере. В этих примерах используется JSONP, поэтому прокси-сервер не нужен.

person tsauerwein    schedule 22.05.2015
comment
Спасибо за ответ, есть ли способ сделать это без использования JSONP? - person gis newbie; 22.05.2015
comment
я думаю, что у меня есть другая проблема, я только что сделал свое приложение в причале/веб-приложениях, но слой wfs не отображается.. так что это не о cors - person gis newbie; 23.05.2015