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

Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 июн 2009, 09:15
churilova
Здравствуйте!
В Geoserver создала хранилище данных PostGis, смотрю через MapPreview, карта отображается, атрибуты объектов получаем. Исходный код сохраняем в отдельный файл и выкладываем его на web-сервере, карта отображается нормально, но атрибуты не получаем. Я так понимаю, что нужно что-то изменить вот в этой функции:

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

               map.events.register('click', map, function (e) {
                    document.getElementById('nodelist').innerHTML = "Loading... please wait...";
                    var params = {
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/html',
                        QUERY_LAYERS: map.layers[0].params.LAYERS,
                        FEATURE_COUNT: 50,
                        Layers: 'chita_map1',
                        Styles: '',
                        Srs: 'EPSG:4326',
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h,
                        format: format};
                        
                    updateFeatureInfoFilters(params);
                    
                    OpenLayers.loadURL("http://10.4.12.57:8080/geoserver/wms", params, this, setHTML, setHTML);
                    OpenLayers.Event.stop(e);
                });
ну или в этой, но я сомневаюсь:

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

            function setHTML(response){
                window.alert(params.QUERY_LAYERS);
                document.getElementById('nodelist').innerHTML = response.responseText;
            };
Может кто-то сталкивался с такой проблемой, подскажите решение...

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 июн 2009, 09:48
Konstantin Tokar
Скорее всего это конфликт с защитой браузера. Ваш сайт запускает AJAX запрос для получения инфо, но выполняется запрос на другом домене. Надо с этим как-то побороться.

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 июн 2009, 13:41
churilova
Спасибо большое, проблема действительно была в этом. В ИЕ разрешилась добавлением домена в список разрешенных узлов, а вот найти соответствия в firefox пока не удалось...

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 июн 2009, 14:08
Konstantin Tokar
churilova писал(а):Спасибо большое, проблема действительно была в этом. В ИЕ разрешилась добавлением домена в список разрешенных узлов, а вот найти соответствия в firefox пока не удалось...
Это вообще неправильно - надо другим путём попробовать идти, а именно сделать в фронтенде сайта проксирование ссылки на сайт геосервера, тогда не надо будет нарушать политику безопасности на клиенте.

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 10 июн 2009, 17:29
churilova
Konstantin Tokar писал(а):Это вообще неправильно - надо другим путём попробовать идти, а именно сделать в фронтенде сайта проксирование ссылки на сайт геосервера, тогда не надо будет нарушать политику безопасности на клиенте.
А можно немного поподробнее? В какую сторону копать? mod_proxy к апачу?

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 11 июн 2009, 08:58
Mavka

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 15 июн 2009, 09:01
churilova
Спасибо, Mavka! Сделали, ошибка доступа исчезла, но все равно ничего не работает :( Может быть, подскажете какие-нибудь примеры, статьи и т. д. по настройке wfs? Потому что у меня в самом html-файле все также, как во всех готовых примерах работы wfs (wfs-t). Это наталкивает на мысль, что косяк где-то в настройках... даже не понятно чего (OL, wfs, postGIS в конце концов) :(...

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 15 июн 2009, 11:35
Mavka
Перевел раздел по ProxyHost:
http://trac.openlayers.org/wiki/ru_proxyhost

Для WFS запрашивать не приходилось, а с WMS через прокси у меня работает хорошо.

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 15 июн 2009, 12:25
churilova
Спасибо, только мы и на английском разобрались :)

Просто уже не знаем, что и думать, куда копать... Уже на нерусских форумах зависаем :(

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 16 июн 2009, 08:10
Mavka
А вы случаем не из простого файла работаете? То есть html-страница не на сервере, а просто файл в браузере открываете. Как то были проблемы со слоями vector.

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 16 июн 2009, 12:10
Mavka
Специально разобрался с WFS слоем. Получаю аттрибуты так
Создаю слой WFS [у меня он точечный]:

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

var wfs_layer = new OpenLayers.Layer.WFS('wfs test',
    'http://localhost:8080/geoserver/wfs',
    {typename: 'geology:drillhole'},
    {extractAttributes: true}
); 
Создаю функцию, которая получит управление

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

function wfs_info(e) {
     alert(e.id + "\n" + e.attributes.name);
} 
Теперь контроллер. Все векторные слои должны работать через SelectFeature.
Регистрирую функцию только на событие onSelect, вообще у него есть и другие:

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

wfs_ctrl = new OpenLayers.Control.SelectFeature(
    wfs_layer,
    {onSelect: wfs_info}
); 
Добавляем слой и контроллер на карту:

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

map.addLayer(wfs_layer);
map.addControl(wfs_ctrl);
wfs_ctrl.activate(); 
Все. Щелкаем мышкой на нужную точку и запускается функция wfs_info. В параметре 'e' содержится вся информация об объекте:
e.attributes - аттрибутика; в моем примере name - строковое поле в базе PostGIS
e.geometry - геометрия; я не разбирался, что от туда можно вытащить, но в примерах есть
.geometry.getBounds().getCenterLonLat()
.geometry.getArea()

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 16 июн 2009, 13:03
churilova
За это прям не знаю, как и благодарить :oops: Завтра буду все пробовать! :)

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 09 июл 2009, 03:20
churilova
Mavka писал(а):Перевел раздел по ProxyHost:
http://trac.openlayers.org/wiki/ru_proxyhost

Для WFS запрашивать не приходилось, а с WMS через прокси у меня работает хорошо.
Ну вот я и добралась до прокси-хост и wfs. Базовый слой wms у меня загружается нормально, а вот wfs слои не совсем. Точнее не загружается ни одна feature (они не отрисовываются и при просмотре свойств слоя свойство features - пустое). При этом в логи записывается успешный запрос к /geoserver/wfs... Может быть, проблема в том, что теперь обращение идет через Апач и поэтому где-то неправильно настроены права? Может у кого-нибудь будут другие идеи? Буду рада любому ответу....

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 май 2010, 17:20
nextstopsun
Кто-нибудь уже решил эту проблему?
У меня все тоже самое, только все стоит на MAC OS: PostGIS - Geoserver - Openlayers.
WMS отрабатывает нормально - возвращает картинку и инфо, а WFS не отображается и не отвечает на запросы.

Я пробовал запускать у себя примеры WFS с OpenLayers - и на примере wfsstates (там где wfs США) обнаружил, что при удалении из кода параметра featureNS, WFS перестает отображаться.

Кто может подсказать - за что может отвечать этот параметр?
Или проблема в чем-то другом?

Re: Работа с Geoserver, запрос GetFeatureInfo

Добавлено: 04 май 2010, 18:48
Mavka
Вот мой рабочий код:

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

var geol_region = new OpenLayers.Layer.Vector('Участки', {
    strategies: [new OpenLayers.Strategy.BBOX],
    protocol: new OpenLayers.Protocol.WFS({
        url: 'http://localhost:8080/geoserver/wfs',
        featureType: 'area',
        featureNS: 'http://geology.local/geology',
        srsName: 'EPSG:4326',
        version: '1.1.0'
    }),
    styleMap: geol_region_style
}); 
featureNS - это такой префикс в именах тэгов, если с XML работали то поймете.
В GeoServer по умолчанию "http://www.openplans.org/topp" (см. Workspaces).