OpenLayers активный слой

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

OpenLayers активный слой

Сообщение Malig » 06 сен 2012, 10:30

Есть работающая связка OL+MapServer+PostGis. В PG есть таблица, где каждая запись хранит геометрию некоторой полигон-фигуры.
OL отображает этот слой через WMS.
Хотелось бы, чтобы вместо фигуры выводился, например, треугольник, а по-хорошему, надо бы, чтобы заданный растрик в виде значка. Например знак дпс. И чтобы по клику на нем можно было выводить определенную инфу об этом знаке.

Т.е. логика примерно как в яндекс API у активных слоев.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 06 сен 2012, 11:48

Сделать view в PostGIS, хранящий центроиды полигонов, подключить его в MapServer и настроить символику, подключив нужные вам значки.
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 06 сен 2012, 12:11

настроить символику, подключив нужные вам значки.
Здесь можно немного по подробнее?

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 06 сен 2012, 12:20

Я не очень понимаю как туда вставить нужный мне растр.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 06 сен 2012, 12:31

Создаёте файл symbols.sym, в нём прописываете определение символов (подключаете нужный значок):

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

SYMBOLSET
SYMBOL
  NAME "herbary"
  TYPE pixmap
  IMAGE "grass.png"
END
Затем в map-файле подключаете файл стилей и используете его при определении стиля:

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

SYMBOLSET   "symbols/symbols.sym"

CLASS
    NAME "Herbary"
    STYLE
       SYMBOL "herbary"
    END
END
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 06 сен 2012, 13:10

Огромное спасибо за подробный ответ.
Осталось выяснить, как повесить клик на эти значки, и различать их между собой, чтобы выводить свойственную значку инфу.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 06 сен 2012, 13:30

WMSGetFeatureInfo

Получилось настроить символику слоя?
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 07 сен 2012, 05:51

Да, сделал таблицу с центрами полигонов, и к этим точкам привязал символ. Работает и с растрами и с вектором!

Сейчас буду изучать WMSGetFeatureInfo. Думаю вопросы еще будут

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 07 сен 2012, 09:39

Возникло несколько вопросов:
1. Как обратиться к конкретному слою в WMS? Или придется делать на каждый слой отдельный map-файл. И подключать несколько WMS-слоев в OL?
2. Как из ответа получить конкретный атрибут, например ID?
3. Как это все можно кэшировать? После каждого клика существенная задержка.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 07 сен 2012, 11:17

1. Все слои описываются в одном map-файле, обращение идёт к слою согласно настройкам WMSGetFeatureInfo, например, можно сконфигурировать так, чтобы запросы шли только к слоям, которые сейчас включены;
2. При возвращении ответа от сервера OpenLayers автоматом парсит ответ (если тип запроса application/vnd.ogc.gml):

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

eventListeners: {
    'getfeatureinfo': function(e) {
        //Обращение к атрибуту 'attr' первого объекта из массива features
        console.log(e.features[0].attributes['attr']);
    }
}
3. Что кэшировать, ответы?
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 07 сен 2012, 11:31

Да, ответы

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 07 сен 2012, 11:56

Что то я не догоняю слегка....

Вот слой WMS в OL:

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

var M = new OpenLayers.Layer.WMS("RoadLayer", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&", {transparent: 'true', layers: 'uzl,azs', format: 'png'});
Вот создание контрола:

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

var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
    url: "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&",
    layers: [M],
    queryVisible: true,
    infoFormat: 'application/vnd.ogc.gml',
    maxFeatures: 50,
    autoActivate: true,
    vendorParams: {
        radius: 10
    },
    eventListeners: {
        'getfeatureinfo': function(e) {
            alert(e.features[0].attributes['id']);
         }
    }
});
Как мне сделать так, чтобы кликалось только по слою "azs"? При этом должны отображаться и azs и uzl

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 07 сен 2012, 15:05

Опишите каждый wms слой отдельным объектом OpenLayers.Layer.WMS, и используйте в контроле нужный вам слой.

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Malig
Участник
Сообщения: 66
Зарегистрирован: 04 сен 2012, 11:28
Репутация: 0

Re: OpenLayers активный слой

Сообщение Malig » 12 сен 2012, 05:52

Все настроил, все работало, пока не столкнулся с новой проблемой.

Настроил кэширование через GeoWebCache. И соответственно перестал работать Control.WMSGetFeatureInfo...
Как его перенастроить?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers активный слой

Сообщение Denis Rykov » 12 сен 2012, 07:48

То есть вы отдаёте на клиента тайлы и поменяли тип слоя с WMS на XYZ или TMS? Можно попробовать указать опцию layerUrls в контроле WMSGetFeatureInfo.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

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

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

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