Страница 1 из 1
OpenLayers : Получение информации об объекте
Добавлено: 04 май 2009, 12:52
wmk
Добрый день !!!
Возник такой вопрос:
Есть карта на KaMapCache и клиент на OpenLayers.
( + также есть WMS на MapServer и настроенный KaMap но в проекте они не использованы )
Выглядит карта примерно так:
Задача заключается в том что бы получить информацию по выбранному домику. То есть грубо говоря , пользователь "тыкает" на домик и мы получаем номер дома и улицу (типа "Баумана д.25"), далее срабатывает какая то пользовательская AJAX ф-ия которая получает (черз Backend на PHP) из MySql информацию по всем фирмам которые там есть.
А вопрос такой: какими способами можно получить в OpenLayers информацию об объекте
Re: OpenLayers : Получение информации об объекте
Добавлено: 04 май 2009, 16:40
Максим Дубинин
Re: OpenLayers : Получение информации об объекте
Добавлено: 05 май 2009, 09:15
wmk
Уже разобрался

... но спасибо.
А тем у кого такой вопрос ... вот примерная строка запроса к MapServer:
Код: Выделить всё
http://localhost/cgi-bin/mapserv.exe?MAP=/ms4w/apps/example/wms1.map
&LAYERS=podlogka_kazan,water,streets,kazan_merged
&FORMAT=gif
&SERVICE=WMS
&VERSION=1.1.1
&REQUEST=GetFeatureInfo
&STYLES=
&EXCEPTIONS=application/vnd.ogc.se_inimage
&SRS=EPSG:4326
&BBOX=-0.001155112569393043,-0.0036253467052131698,0.00006400359881511986,-0.002406230537005007
&WIDTH=256
&HEIGHT=256
&X=-0.00066
&Y=-0.00300
&QUERY_LAYERS=kazan_merged
А это для JS:
Код: Выделить всё
// == GetFutureInfo ============================================================
map.events.register('click', map, function (e) {
OpenLayers.Util.getElement('nodeList').innerHTML = "Ща ща я типа работаю ...";
var url = Gorodinform.getFullRequestString({
REQUEST: "GetFeatureInfo",
EXCEPTIONS: "application/vnd.ogc.se_inimage",
BBOX: Gorodinform.map.getExtent().toBBOX(),
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: 'text/html',
QUERY_LAYERS: 'kazan_merged',
WIDTH: Gorodinform.map.size.w,
HEIGHT: Gorodinform.map.size.h});
OpenLayers.loadURL(url, '', this, setHTML);
OpenLayers.Event.stop(e);
});
function setHTML(response) {
OpenLayers.Util.getElement('nodeList').innerHTML = response.responseText;
}
// =============================================================================
Соответственно
Gorodinform - это твой Layer по которому будет идти запрос ... только в OL Ajax работает вроде в UTF-8 и русские буквы отображает не корректно. Но это мелочи

которые легко поправить
В мапфайле LAYER должен выглядеть примерно так:
Код: Выделить всё
# === СЛОЙ "ДОМА" ==============================================================
LAYER
NAME kazan_merged
DATA kazan_merged
STATUS ON
TYPE POLYGON
TRANSPARENCY ALPHA
MAXSCALEDENOM 6760
MINSCALEDENOM 1
CLASSITEM "COLOR_ID"
CLASS
NAME "Подложка"
EXPRESSION '20'
STYLE
ANTIALIAS TRUE
COLOR 191 107 22
OUTLINECOLOR 128 128 128
END
END
...
...
CLASS
NAME "Подложка"
EXPRESSION '22'
STYLE
ANTIALIAS TRUE
COLOR 123 82 82
OUTLINECOLOR 128 128 128
END
END
PROJECTION
"init=epsg:900913"
END
template 'dummy'
DUMP TRUE
METADATA
wms_title "Дома"
wms_abstract "Слой с домами"
wms_include_items "all"
END
END
# ==============================================================================
Re: OpenLayers : Получение информации об объекте
Добавлено: 05 май 2009, 15:42
wmk
попробуйте GetFeatureInfo
Кстати вопрос такой , а можно ответы полученные через GetFeatureInfo каким то образом кэшировать ???
Нужно это для того чтоб сделать карту ВООБЩЕ без серверов. И получить максимально возможную производительность
Re: OpenLayers : Получение информации об объекте
Добавлено: 08 окт 2009, 08:42
alaevka
wmk, спасибо за разъяснения - сделал - все отлично работает, МС возвращает необходимые мне данные, однако я планировал из возвращаемых данных взять номер дома и улицу и уже по ним искать в другой таблице описание предприятий, расположенных по данному адресу. Получается, что необходимо будет делать два асинхронных (ajax) обращения к серверу и соответственно 2 запроса к базе:
1) Чтобы получить информацию от мапсервера
2) Обработать (кстати как ее можно обработать, ведь возвращается не массив) и сделать еще один запрос к базе..
Это большая и ненужная нагрузка на сервер.
Re: OpenLayers : Получение информации об объекте
Добавлено: 20 фев 2010, 13:09
dimas4
только в OL Ajax работает вроде в UTF-8 и русские буквы отображает не корректно. Но это мелочи

которые легко поправить
а как их исправить?
Re: OpenLayers : Получение информации об объекте
Добавлено: 20 фев 2010, 16:38
Mavka
Сколько работал в GeoServer с cp1251 ни разу в OL проблем не возникало.