Страница 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
Максим Дубинин
попробуйте GeFeatureInfo http://trac.openlayers.org/wiki/GetFeatureInfo

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 проблем не возникало.