Страница 1 из 1

OpenLayers addFeatures

Добавлено: 13 окт 2012, 13:56
bms
В OL есть возможность создание слоя OpenLayers.Layer.Vector используя протокол wfs. То есть данные передаются, в виде json или любом другом формате, и рисуются на слое целиком. Для того, чтобы не грузить слой целиком, а добавлять данные к слою только когда их выберем из списка, хочется пойти другим путем:
1. Создать пустой слой OpenLayers.Layer.Vector
2. Применить к слою метод addFeatures(), где параметром передается OL.Feature.Vector.
Вопрос: Можно ли получить OL.Feature.Vector используя протокол wfs? То есть сделать нечто подобное:

Код: Выделить всё

layer = new OpenLayers.Layer.Vector('layer')
points = new OpenLayers.Feature.Vector({protocol: new OpenLayers.Protocol.WFS({.........})})
layer.addFeatures(points);
PS: Атрибута "protocol" у OpenLayers.Feature.Vector нет

Re: OpenLayers addFeatures

Добавлено: 13 окт 2012, 17:17
Denis Rykov
WFS возвращает ответ в одной из версий формата GML, поэтому нужно просто запросить фичи с WFS-сервера, распарсить ответ, используя нужный формат и добавить их на слой. Как-то так, но нужно проверять:

Код: Выделить всё

var layer = new OpenLayers.Layer.Vector();
var gml = new OpenLayers.Format.GML.v3();
OpenLayers.Request.GET({
    url: 'http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.1.0&request=GetFeature&typeName=topp:states',
    success: function(e) {
        layer.addFeatures(gml.read(e.responseText));
    }
});

Re: OpenLayers addFeatures

Добавлено: 15 окт 2012, 17:11
bms
спасибо, примерно так и сделал, только ответ получал в формате JSON

Код: Выделить всё

response = {...}
var geojson_format = new OpenLayers.Format.GeoJSON();
layer.addFeatures(geojson_format.read(response));