Внимание: Для UMN MapServer инструкция не подходит. Там свои тонкости с СК и присутствует bug.
Cross-domain security
Допустим, что сайт обслуживается сервером Apache из состава OSGeo4W. GeoServer работает в отдельном контейнере сервлетов (Jetty, Tomcat). (Контейнеры сервлетов, как правило, могут выступать и в роли http-серверов, но в данном случае этот вариант не рассматривается.) Политика безопасности JavaScript запрещается обращаться на другие серверы. Получается, что веб-сайт расположен на сервере localhost:80, а GeoServer - на localhost:8080.
Поэтому потребуется на другом языке (php, python) создать proxy-скрипт, который будет обрабатываться тем же сервером, на котором расположен сайт. В нашем случае - Apache (localhost:80). Воспользуемся штатным скриптом из состава OpenLayers. Он входит в полный дистрибутив (OpenLayers-2.10\examples\proxy.cgi) и можно скачать отдельно.
Скрипт написан на python, поэтому потребуется интерпретатор. Отправляемся на оф. сайт и берем дистрибутив "Python 2.7 Windows installer" (версия не принципиальна). Устанавливаем в папку "C:\Python27". В proxy-скрипте в первой строке указываем полный путь к интерпретатору:
Код: Выделить всё
#!c:/Python27/python.exe -u
Код: Выделить всё
allowedHosts = ['localhost','localhost:8080','www.openlayers.org']
Полученный proxy-скрипт нужно положить в папку "C:\OSGeo4W\bin\". (Так как она уже настроена на выполнение cgi-скриптов). Расширение файла не имеет значения (любое, например proxy.cgi). Для проверки в веб-браузере открываем: http://localhost/cgi-bin/proxy.cgi, должен открыться сайт OpenLayers.org.
GeoServer
Очень важно создать правильный Workspace. Если для сервиса WMS он играл лишь второстепенное значение, то в WFS он необходим для парсинга (чтения) данных в OpenLayers. При создании Workspace в качестве Namespace URI принято указывать ссылку вида <адрес_сайта>/<проект> (например, http://localhost/test). В отличие от URL эта ссылка может не указывать на реальную страницу сайта, главное - что бы URI был уникальным. Если используется Workspace по-умолчанию (topp), то его URI будет таким: http://www.openplans.org/topp.
Далее создается хранилище (Store) и соответствующие слои (Layers). Специально для доступа по WFS ничего делать не требуется, все слои публикуются автоматически.
На этом этапе можно проверить работу в Qunatum GIS. В параметрах соединения:
URL - http://localhost:8080/geoserver/wfs
OpenLayers
Указываем OpenLayers адрес proxy-скрипта (обычно в самом начале кода):
Код: Выделить всё
OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
Код: Выделить всё
var layer_wfs = new OpenLayers.Layer.Vector('Слой WFS', {
strategies: [new OpenLayers.Strategy.Fixed({preload: true})],
protocol: new OpenLayers.Protocol.WFS({
version: '1.1.0',
url: 'http://localhost:8080/geoserver/wfs',
featureType: 'mylayer',
featureNS: 'http://localhost/test',
srsName: 'EPSG:900913'
}),
visibility: true
});
- featureNS - должен совпадать с Namespace URI в GeoServer;
- srsName - если не указан, то сервер по-умолчанию выдает данные в epsg:4326.