OpenLayers : Получение информации об объекте

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

OpenLayers : Получение информации об объекте

Сообщение wmk » 04 май 2009, 12:52

Добрый день !!!

Возник такой вопрос:
Есть карта на KaMapCache и клиент на OpenLayers.


( + также есть WMS на MapServer и настроенный KaMap но в проекте они не использованы )

Выглядит карта примерно так:

Изображение

Задача заключается в том что бы получить информацию по выбранному домику. То есть грубо говоря , пользователь "тыкает" на домик и мы получаем номер дома и улицу (типа "Баумана д.25"), далее срабатывает какая то пользовательская AJAX ф-ия которая получает (черз Backend на PHP) из MySql информацию по всем фирмам которые там есть.

А вопрос такой: какими способами можно получить в OpenLayers информацию об объекте
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: OpenLayers : Получение информации об объекте

Сообщение Максим Дубинин » 04 май 2009, 16:40

попробуйте GeFeatureInfo http://trac.openlayers.org/wiki/GetFeatureInfo
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: OpenLayers : Получение информации об объекте

Сообщение wmk » 05 май 2009, 09:15

Уже разобрался :) ... но спасибо.

А тем у кого такой вопрос ... вот примерная строка запроса к 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 
  
# ==============================================================================
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: OpenLayers : Получение информации об объекте

Сообщение wmk » 05 май 2009, 15:42

попробуйте GetFeatureInfo

Кстати вопрос такой , а можно ответы полученные через GetFeatureInfo каким то образом кэшировать ???


Нужно это для того чтоб сделать карту ВООБЩЕ без серверов. И получить максимально возможную производительность
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

alaevka
Интересующийся
Сообщения: 22
Зарегистрирован: 28 авг 2009, 11:02
Репутация: 0

Re: OpenLayers : Получение информации об объекте

Сообщение alaevka » 08 окт 2009, 08:42

wmk, спасибо за разъяснения - сделал - все отлично работает, МС возвращает необходимые мне данные, однако я планировал из возвращаемых данных взять номер дома и улицу и уже по ним искать в другой таблице описание предприятий, расположенных по данному адресу. Получается, что необходимо будет делать два асинхронных (ajax) обращения к серверу и соответственно 2 запроса к базе:

1) Чтобы получить информацию от мапсервера
2) Обработать (кстати как ее можно обработать, ведь возвращается не массив) и сделать еще один запрос к базе..

Это большая и ненужная нагрузка на сервер.

dimas4
Интересующийся
Сообщения: 17
Зарегистрирован: 16 апр 2009, 18:28
Репутация: 0

Re: OpenLayers : Получение информации об объекте

Сообщение dimas4 » 20 фев 2010, 13:09

только в OL Ajax работает вроде в UTF-8 и русские буквы отображает не корректно. Но это мелочи :) которые легко поправить
а как их исправить?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers : Получение информации об объекте

Сообщение Mavka » 20 фев 2010, 16:38

Сколько работал в GeoServer с cp1251 ни разу в OL проблем не возникало.
лангольеры под окном жрали время ом-ном-ном

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя