GetFeatureInfo - вопрос новичка
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 28 июл 2009, 09:40
- Репутация: 0
GetFeatureInfo - вопрос новичка
Дорогие участники форума, еще один ламерский вопрос!
Свой mapfile я настроил в точности с инструкциями: http://gis-lab.info/qa/mapserver-getfeatureinfo.html.
Запрос у меня должен возвращаться в формате text/plain.
Однако никак не получается вывести GetfeatureInfo в OL, хотя все слои прекрасно отображаются. Просмотр примеров кода не дал мне ответа на мой вопрос. Хочу кликом мышки по полигону получить popup с атрибутами, подскажите, пожалуйста, что нужно для этого добавить в код?
Пока понял, что в код нужно добавить function (load) вместо function (init), function (add popup), function (showInfo)...правильно? Или что-то еще?
Заранее благодарен всем, кто откликнется!
Свой mapfile я настроил в точности с инструкциями: http://gis-lab.info/qa/mapserver-getfeatureinfo.html.
Запрос у меня должен возвращаться в формате text/plain.
Однако никак не получается вывести GetfeatureInfo в OL, хотя все слои прекрасно отображаются. Просмотр примеров кода не дал мне ответа на мой вопрос. Хочу кликом мышки по полигону получить popup с атрибутами, подскажите, пожалуйста, что нужно для этого добавить в код?
Пока понял, что в код нужно добавить function (load) вместо function (init), function (add popup), function (showInfo)...правильно? Или что-то еще?
Заранее благодарен всем, кто откликнется!
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
Пример (код) - включите тематические слои и посмотрите на popup'ы
Код: Выделить всё
wms_info = new OpenLayers.Control.WMSGetFeatureInfo({
title: 'wmsinfo',
layers: [thematic_1, thematic_2, thematic_3, oopt],
url: 'http://gis-lab.info:8180/geoserver/wms',
infoFormat: 'application/vnd.ogc.gml',
queryVisible: true
});
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
...
function showInfo(e) {
...
}
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 28 июл 2009, 09:40
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Большое спасибо за отклик, но, к сожалению, мне этот код пока не помогает.
Мне непонятно самое главное - как заставить WMS выдавать информацию по клику мышкой? Какой оператор в коде за это отвечает?
Вы извините, что я прошу дать мне подробную инструкцию, но я в этом вопросе совсем новичок, и освоение дается пока что с трудом)
Спасибо!
Мне непонятно самое главное - как заставить WMS выдавать информацию по клику мышкой? Какой оператор в коде за это отвечает?
Вы извините, что я прошу дать мне подробную инструкцию, но я в этом вопросе совсем новичок, и освоение дается пока что с трудом)
Спасибо!
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
Само обращение к серверу WMS выглядит так:
Где задаются географические координаты углов карты и относительные координаты пикселя, по которому запрашивается информация.
Теперь по коду:
Код: Выделить всё
http://gis-lab.info:8180/geoserver/wms?
<-- общая часть запроса WMS -->
SERVICE=WMS&
VERSION=1.1.1&
LAYERS=geosample:soils&
BBOX=75.805458,48.274987,89.139542,58.066013&
HEIGHT=514&WIDTH=700&
FORMAT=image/png&
INFO_FORMAT=application/vnd.ogc.gml&
SRS=EPSG:4326&
<-- непосредственно запрос информации -->
REQUEST=GetFeatureInfo&
QUERY_LAYERS=geosample:soils&
FEATURE_COUNT=10&
X=448&Y=263
Теперь по коду:
- Создаем контроллер - new OpenLayers.Control.WMSGetFeatureInfo
- Говорим, что при возникновении события 'getfeatureinfo' (получили ответ на запрос) вызвать функцию showInfo
- Добавляем контроллер на карту и активируем его (addControl и activate)
- Сама функция showInfo (ее текст смотрите по ссылке в пред. посте)
Нужно зарегистрировать обработчик событий "клик мышью" на div с картой. Примерно так. Тогда при щелчке будет вызываться приписанная функция. В этой функции вы должны сами прописать все параметры запроса (см. начало поста), отправить и принять его. Вот это все и делает контроллер WMSGetFeatureInfo.выдавать информацию по клику мышкой? Какой оператор в коде за это отвечает?
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 28 июл 2009, 09:40
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Спасибо!
Подскажите, а обращение к серверу WMS надо писать в адресной строке? И как я могу посмотреть аналогичное обращение к своему серверу WMS?
Подскажите, а обращение к серверу WMS надо писать в адресной строке? И как я могу посмотреть аналогичное обращение к своему серверу WMS?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
Да, это обычный url, только уберите <комментарии> и все соберите в одну строку.
Если подключитесь к WMS серверу из Quantum GIS (или аналога), то в нем можно инструментом "Определить объекты" пощелкать по карте. Убедиться что ответы приходят. А какие запросы к MapServer уходят узнать в логах Apache.
Если подключитесь к WMS серверу из Quantum GIS (или аналога), то в нем можно инструментом "Определить объекты" пощелкать по карте. Убедиться что ответы приходят. А какие запросы к MapServer уходят узнать в логах Apache.
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 28 июл 2009, 09:40
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Я не программист... к сожалению, совет, данный mavka, так и не помог мне.
По поводу пунктов 1,2,3 - вот мой пример -
var wms_info = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://localhost/cgi-bin/mapserv.exe?ma ... /U4MDB.map&',
title: 'wmsinfo',
layers: [wms],
infoFormat: 'text/plain',
queryVisible: true
});
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
- мне вроде бы все понятно. Но пункт 4 - создать функцию ShowInfo и прикрутить ее к движениям мыши - для меня до сих пор в тумане. В примере http://openlayers.org/dev/examples/getf ... ntrol.html, скажем, этого не указано.
Помогите, добрые люди, покажите код, где явно понятно, как движения мыши связать с getfeatureinfo! Буду очень благодарен.
По поводу пунктов 1,2,3 - вот мой пример -
var wms_info = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://localhost/cgi-bin/mapserv.exe?ma ... /U4MDB.map&',
title: 'wmsinfo',
layers: [wms],
infoFormat: 'text/plain',
queryVisible: true
});
wms_info.events.register('getfeatureinfo', this, showInfo);
map.addControl(wms_info);
wms_info.activate();
- мне вроде бы все понятно. Но пункт 4 - создать функцию ShowInfo и прикрутить ее к движениям мыши - для меня до сих пор в тумане. В примере http://openlayers.org/dev/examples/getf ... ntrol.html, скажем, этого не указано.
Помогите, добрые люди, покажите код, где явно понятно, как движения мыши связать с getfeatureinfo! Буду очень благодарен.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
Если вам нужно, что бы запросы отправлялись не только на щелчок мышкой, но и просто при движении, то для этого в том же контроллере есть hover.
Жаль что мое объяснение вам ничего не дает
Жаль что мое объяснение вам ничего не дает

лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 53
- Зарегистрирован: 04 мар 2010, 11:30
- Репутация: 0
- Откуда: Комсомольск-на-Амуре
- Контактная информация:
Re: GetFeatureInfo - вопрос новичка
Я реализую получение информации в Popup таким образом:
// создаю слой:
var layer = new OpenLayers.Layer.WMS('layer info',
'http://www.kmsmap.ru:8080/geoserver/wms',
{'layers': 'kmsmap:adr_pnt_clients'},
{isBaseLayer: false}
);
// создаю контроллер для слоя
var layer_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://www.kmsmap.ru:8080/geoserver/wms',
title: 'title control',
layers: [layer],
queryVisible: true
}
);
// подключаю слой:
map.addLayer(layer);
// определяю события на которое должен реагировать контроллер и функцию какую должен при этом вызывать
// showInfo - это имя вызываемой функции
layer_ctrl.events.register('getfeatureinfo', this, showInfo);
// подключаем контроллер и активируем его
map.addControl(layer_ctrl);
kmsmap_ctrl.activate();
Все что выше, обычно располагается в функции init(), вызываемой при загрузке страницы.
Функция showInfo у меня реализована так:
function showInfo(evt) {
var popup_markers = new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(evt.xy), // определяем координаты для popup-окна по месту клика мыши
null,
evt.text, // в этой переменной текст, вернутый geoserver'ом
null,
true
);
map.addPopup(popup_markers);
}
На самом деле все просто, но если ты идешь первый раз....
// создаю слой:
var layer = new OpenLayers.Layer.WMS('layer info',
'http://www.kmsmap.ru:8080/geoserver/wms',
{'layers': 'kmsmap:adr_pnt_clients'},
{isBaseLayer: false}
);
// создаю контроллер для слоя
var layer_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://www.kmsmap.ru:8080/geoserver/wms',
title: 'title control',
layers: [layer],
queryVisible: true
}
);
// подключаю слой:
map.addLayer(layer);
// определяю события на которое должен реагировать контроллер и функцию какую должен при этом вызывать
// showInfo - это имя вызываемой функции
layer_ctrl.events.register('getfeatureinfo', this, showInfo);
// подключаем контроллер и активируем его
map.addControl(layer_ctrl);
kmsmap_ctrl.activate();
Все что выше, обычно располагается в функции init(), вызываемой при загрузке страницы.
Функция showInfo у меня реализована так:
function showInfo(evt) {
var popup_markers = new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(evt.xy), // определяем координаты для popup-окна по месту клика мыши
null,
evt.text, // в этой переменной текст, вернутый geoserver'ом
null,
true
);
map.addPopup(popup_markers);
}
На самом деле все просто, но если ты идешь первый раз....
Чудес на свете не бывает, они просто случаются.
Знать - значит уметь использовать.
Интерактивная карта-схема Хабаровского края
Знать - значит уметь использовать.
Интерактивная карта-схема Хабаровского края
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Тоже столкнулся с этой проблемой (работаю с Mapserver+OpenLayers), и появился ряд нерешенных вопросов:
1. что определяет параметр "е" (в нижнем примере "evt") в функции showinfo?
2. oxch пишет
3. в примере этом функция "function info ()" заменена на "function load ()" ... какой в этом физический смысл?
1. что определяет параметр "е" (в нижнем примере "evt") в функции showinfo?
2. oxch пишет
Как это должно выглядеть при работе с mapserverevt.text, // в этой переменной текст, вернутый geoserver'ом
3. в примере этом функция "function info ()" заменена на "function load ()" ... какой в этом физический смысл?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
1. Когда сработает функция showinfo в параметре 'e' будет содержаться ответ сервера - аттрибуты и геометрия. Поставьте breakpoint в Firebug и посмотрите содержимое переменной, все сразу поймете.
2. Вот тут - в самом конце раздела 'text/plain'.
3. Ммм... сейчас там "function showInfo(evt)" точно как в примерах выше. Поясните.
2. Вот тут - в самом конце раздела 'text/plain'.
3. Ммм... сейчас там "function showInfo(evt)" точно как в примерах выше. Поясните.
Последний раз редактировалось Mavka 24 сен 2010, 12:15, всего редактировалось 1 раз.
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Извиняюсь, вышла описка: имел ввиду "function init()"
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
В html-документе в тэге <body onload="my_function()"> вы указываете функцию, которая будет вызвана по окончании загрузки всего документа. Как ее называть не принципиально.
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: GetFeatureInfo - вопрос новичка
Какую функциональную нагрузку несет строчка 'OpenLayers.ProxyHost= ', ведь простейшие карты работают без нее?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: GetFeatureInfo - вопрос новичка
Она нужна, если вы используете сторонний wms-сервер (на другом сервере или порте).
лангольеры под окном жрали время ом-ном-ном
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя