У меня проблема с загрузкой объектов с геосервера в векторный слой с использованием стратегии OpenLayers3 и ограничивающей рамки. Я пытался найти, как я могу загрузить более одного слоя, используя стратегию ограничивающей рамки, но безуспешно. Единственный пример, который я нашел, это с одним слоем и использованием глобальных функций, что в моем случае неприменимо (http://acanimal.github.io/thebookofopenlayers3/chapter03_08_loading_strategies.html). Проблема в том, что функция, которая загружает ответ, не определена глобально - если это так, мне придется создавать такую функцию для каждого отдельного слоя, который я хочу загрузить, верно? Это пример URL-адреса для запроса функций:
http://192.168.1.10/geoserver/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=ubutrusty:places&outputFormat=text/javascript&format_options=callback:success&srsname=EPSG:32635&bbox=161473.81383919955,4698323.564696768,234672.52335922938,4767981.6354873795,EPSG:32635
Вы можете видеть, что для параметра format_options установлено значение callback:success, и я уверен, что проблема именно в этом, но я не могу настроить правильную функцию обратного вызова. Мои познания в javascript не так хороши, поэтому вопрос для меня не из легких.
Вот как я пытаюсь создать новый векторный слой:
var layer = {
name: 'ubutrusty:places',
title: 'Позиции',
source: createVectorLayer(layer),
type: 'operational',
visible: true,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: '#800000',
width: 2
})
})
}
Эта функция вызывается для каждого слоя, который я хочу добавить на карту, — она возвращает объект ol.source.ServerVector:
MyApp.prototype.createVectorLayer = function(layerData){
var vectorSource = new ol.source.ServerVector({
format: new ol.format.GeoJSON(),
loader: function(extent, resolution, projection) {
extent = ol.proj.transformExtent(extent, projection.getCode(), ol.proj.get(layerData.srcEPSG).getCode());
var url = config.proxyUrl + layerData.url + '?service=WFS&' +
'version=1.1.0&request=GetFeature&typename=' + layerData.name + '&' + 'outputFormat=text/javascript' +
'&format_options=callback:success&srsname=' + layerData.srcEPSG + '&bbox=' + extent.join(',') + ',' + layerData.srcEPSG;
$.ajax({
url: url,
dataType: 'jsonp',
success: function(data) {
this.addFeatures(this.readFeatures(data));
},
error: function (e) {
var wtf = e.status;
}
});
},
strategy: ol.loadingstrategy.bbox,
projection: layerData.srcEPSG
})
return vectorSource;
}
MyApp.map.addLayer(new ol.layer.Vector(layer);
Вопрос в том, можно ли определить одну функцию для загрузки объектов из более чем одного слоя, и если да, то как это сделать? Если я не указываю функцию обратного вызова, то используется функция по умолчанию (для геосервера это parseResponse), которая также не определена. Если нужна дополнительная информация, я могу предоставить дополнительные параметры или примеры кода.
Спасибо