Как правильно создать WFS слой в OpenLayers 2.12 ?
Добавлено: 03 дек 2012, 08:15
Здравствуйте!
Необходимо создать слой WFS получающий данные GET запросом. Сервер не понимает JSONP, поэтому для доступа к серверу (он сторонний) настроен proxy. OSM слои (тайловые) стягиваются на ура, а вот WFS слой не получается даже создать нормально. Просто не понимаю как, хотя и примеры смотрел и гуглил, но что-то не доходит ни как.
Запрос к серверу на получение WFS:
WFS слой пытаюсь создать так (через протокол WFS) :
Получаю такой POST запрос к серверу:
причем в POST вообще нет ни каких параметров - то есть ничего из параметров не передалось даже в POST параметрах - просто url с несколькими автоматически добавляемыми заголовками OpenLayers и браузером
Пробовал получать данные и так (через протокол Script) :
В ответе сервера я получаю то что и должен - XML.
Но вот не задача - при таком протоколе в параметры добавляется ещё один параметр
В результате чего вываливается ошибка что callback не найдена. Что естественно, ведь сервер не поддерживает JSONP
Так как же правильно создать WFS слой (что бы он тянул данные GET запросом приведенного вида) ?
--------------------------------------------------
Дополнение:
--------------------------------------------------
Получилось послать запрос, используя Script, без callack, так
В результате чего посылается запрос вида:
Но все равно вываливается ошибка:
Если кто подключал WFS с GET запросом к серверу, подскажите как быть ?
Необходимо создать слой WFS получающий данные GET запросом. Сервер не понимает JSONP, поэтому для доступа к серверу (он сторонний) настроен proxy. OSM слои (тайловые) стягиваются на ура, а вот WFS слой не получается даже создать нормально. Просто не понимаю как, хотя и примеры смотрел и гуглил, но что-то не доходит ни как.
Запрос к серверу на получение WFS:
Код: Выделить всё
localhost/proxy?service=WFS&version=1.0.0&srsname=EPSG:4326&request=GetFeature&typeName=TheNameLayer
Код: Выделить всё
var layer = new OpenLayers.Layer.Vector(
'Название слоя',
{
//strategies: [new OpenLayers.Strategy.BBOX()],
strategies: [new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Save()],
layers: 'TheNameLayer',
protocol: new OpenLayers.Protocol.WFS({
version: "1.0.0",
url: "/proxy",
featurePrefix: '',
featureType: 'TheNameLayer',
srsname: 'EPSG:4326'
}),
visibility: false
}
);
Код: Выделить всё
http://localhost/proxy
Пробовал получать данные и так (через протокол Script) :
Код: Выделить всё
var protocol = new OpenLayers.Protocol.Script({
url: serverUrl,
params: {
service: "WFS",
version: "1.0.0",
srsname: "EPSG:4326",
request: "GetFeature",
typeName: 'TheNameLayer'
}
});
Но вот не задача - при таком протоколе в параметры добавляется ещё один параметр
Код: Выделить всё
callback=OpenLayers.Protocol.Script.registry.c{N}
Так как же правильно создать WFS слой (что бы он тянул данные GET запросом приведенного вида) ?
--------------------------------------------------
Дополнение:
--------------------------------------------------
Получилось послать запрос, используя Script, без callack, так
Код: Выделить всё
var protocol = new OpenLayers.Protocol.Script({
url: serverUrl,
params: {
service: "WFS",
version: "1.0.0",
srsname: "EPSG:4326",
request: "GetFeature",
typeName: layerName
},
callbackTemplate: "",
callbackKey: ""
});
Код: Выделить всё
localhost/proxy?service=WFS&version=1.0.0&srsname=EPSG:4326&request=GetFeature&typeName=TheNameLayer&=
Похожу он все равно ищет в ответе callback функцию и пытается её вызвать, а её то нет в помине в ответе сервера!Resource interpreted as Script but transferred with MIME type text/xml: "http://localhost/proxy?service=WFS&vers ... eNameLayer&=".
OpenLayers.js:24953
OpenLayers.Protocol.Script.OpenLayers.Class.createRequest
OpenLayers.Protocol.Script.OpenLayers.Class.read
OpenLayers.Strategy.Fixed.OpenLayers.Class.load
OpenLayers.Events.OpenLayers.Class.triggerEvent
OpenLayers.Layer.OpenLayers.Class.setVisibility
OpenLayers.Control.LayerSwitcher.OpenLayers.Class.updateMap
OpenLayers.Control.LayerSwitcher.OpenLayers.Class.onButtonClick
OpenLayers.Events.OpenLayers.Class.triggerEvent
OpenLayers.Events.buttonclick.OpenLayers.Class.buttonClick
OpenLayers.Events.OpenLayers.Class.triggerEvent
OpenLayers.Events.OpenLayers.Class.handleBrowserEvent
(anonymous function)
Uncaught SyntaxError: Unexpected token <
Если кто подключал WFS с GET запросом к серверу, подскажите как быть ?