Использование контрола WMSGetFeatureInfo в OpenLayers: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 2: | Строка 2: | ||
[http://www.opengeospatial.org/standards/wms Web Map Service Interface Standard] (WMS) предоставляет простой HTTP-интерфейс для передачи клиенту изображений, имеющих географическую привязку. WMS-запрос обязательно содержит наименования запрашиваемого слоя и требуемый охват, а WMS-ответ представляет собой одно или несколько растровых изображений. Кроме того WMS поддерживает опцию прозрачности, позволяющую использовать WMS-слои совместно с остальными, не перекрывая их. Любой WMS-сервер в обязательном порядке поддерживает два типа типа запросов: GetCapabilities (возвращает описание конкретного WMS-сервиса и перечень доступных слоёв) и GetMap (непосредственно запрос изображений), остальные типы, описанные в стандарте, поддерживаются факультативно. Среди этих типов присутствует и GetFeatureInfo, позволяющий запрашивать атрибутивную информацию об объекте, расположенном по указаным координатам. Именно этот тип запроса используется во многих клиентских приложениях и со стороны пользователя может выглядеть, например, как всплывающее окно с информацией об объекте, появляющееся после клика на нём. | [http://www.opengeospatial.org/standards/wms Web Map Service Interface Standard] (WMS) предоставляет простой HTTP-интерфейс для передачи клиенту изображений, имеющих географическую привязку. WMS-запрос обязательно содержит наименования запрашиваемого слоя и требуемый охват, а WMS-ответ представляет собой одно или несколько растровых изображений. Кроме того WMS поддерживает опцию прозрачности, позволяющую использовать WMS-слои совместно с остальными, не перекрывая их. Любой WMS-сервер в обязательном порядке поддерживает два типа типа запросов: GetCapabilities (возвращает описание конкретного WMS-сервиса и перечень доступных слоёв) и GetMap (непосредственно запрос изображений), остальные типы, описанные в стандарте, поддерживаются факультативно. Среди этих типов присутствует и GetFeatureInfo, позволяющий запрашивать атрибутивную информацию об объекте, расположенном по указаным координатам. Именно этот тип запроса используется во многих клиентских приложениях и со стороны пользователя может выглядеть, например, как всплывающее окно с информацией об объекте, появляющееся после клика на нём. | ||
В данной статье дано подробное описание контрола | В данной статье дано подробное описание контрола WMSGetFeatureInfo, использующегося в [http://openlayers.org/ OpenLayers] и показан базовый пример его использования. | ||
== Настройки WMSGetFeatureInfo == | |||
Краткий перечень наиболее часто используемых настроек контрола: | |||
{|class="wikitable" | {|class="wikitable" | ||
! Свойство | ! Свойство | ||
Строка 15: | Строка 14: | ||
| {Boolean} | | {Boolean} | ||
| Запрос GetFeatureInfo выполняется при задержки курсора мыши над объектом. По умолчанию false. | | Запрос GetFeatureInfo выполняется при задержки курсора мыши над объектом. По умолчанию false. | ||
|- | |- | ||
| maxFeatures | | maxFeatures | ||
| {Integer} | | {Integer} | ||
| Максимальное количество возвращаемых записей, определяет значение параметра FEATURE_COUNT запроса GetFeatureInfo. По умолчанию 10. | | Максимальное количество возвращаемых записей, определяет значение параметра FEATURE_COUNT запроса GetFeatureInfo. По умолчанию 10. | ||
|- | |- | ||
| layers | | layers | ||
| {Array(OpenLayers.Layer.WMS)} | | {Array(OpenLayers.Layer.WMS)} | ||
| | | Список слоёв к которым будет выполнен запрос GetFeatureInfo. Если значение не определено, то будут использованы все WMS-слои карты, url которых совпадает со значением свойства url самого контрола или одним из url из массива layerUrls. По умолчанию не определено. | ||
|- | |- | ||
| queryVisible | | queryVisible | ||
Строка 47: | Строка 30: | ||
| {String} | | {String} | ||
| URL WMS-сервиса к которому будет осуществляться запрос. Если не установлено при создании контрола WMSGetFeatureInfo, то в качестве значения будет использованo свойство url первого подходящего слоя. По умолчанию не определено. | | URL WMS-сервиса к которому будет осуществляться запрос. Если не установлено при создании контрола WMSGetFeatureInfo, то в качестве значения будет использованo свойство url первого подходящего слоя. По умолчанию не определено. | ||
|- | |- | ||
| infoFormat | | infoFormat | ||
| {String} | | {String} | ||
| | | MIME-тип ответа, который должен отдать сервер. По умолчанию ''text/html''. При использовании в качестве WMS-сервера MapServer может быть использован один из трёх типов: text/plain, text/html или application/vnd.ogc.gml. | ||
|- | |- | ||
| vendorParams | | vendorParams | ||
Строка 62: | Строка 41: | ||
| format | | format | ||
| {OpenLayers.Format} | | {OpenLayers.Format} | ||
| | | Формат, используемый для парсинга ответа. По умолчанию OpenLayers.Format.WMSGetFeatureInfo. | ||
|} | |} | ||
Полный список доступных свойств и методов доступен в официальной [http://dev.openlayers.org/releases/OpenLayers-2.11/doc/devdocs/files/OpenLayers/Control/WMSGetFeatureInfo-js.html документации]. | |||
Здесь же хотелось бы остановить внимание еще на одном свойстве контрола WMSGetFeatureInfo, наследуемого от OpenLayers.Control - eventListeners - объекта, позволяющего слушать различные события, происходящие с контролом. Для WMSGetFeatureInfo доступно 3 таких события: ''beforegetfeatureinfo'', ''nogetfeatureinfo'', ''getfeatureinfo''. | |||
''beforegetfeatureinfo'' срабатывает перед отправкой запроса на сервер, данное событие удобно использовать, например, если при каждом запросе к серверу требуется передавать какой-либо изменяющийся параметр. Например: | |||
<syntaxhighlight lang="javascript"> | |||
eventListeners: { | |||
'beforegetfeatureinfo': function() { | |||
this.vendorParams.settings = Math.random(); | |||
} | |||
</syntaxhighlight> | |||
''nogetfeatureinfo'' срабатывает в случае если не определено ни одного слоя для запроса. И самое важно событие - ''getfeatureinfo'' наступает в момент прихода ответа от сервера. | |||
== Пример использования WMSGetFeatureInfo == | == Пример использования WMSGetFeatureInfo == |
Версия от 06:50, 21 марта 2012
Введение
Web Map Service Interface Standard (WMS) предоставляет простой HTTP-интерфейс для передачи клиенту изображений, имеющих географическую привязку. WMS-запрос обязательно содержит наименования запрашиваемого слоя и требуемый охват, а WMS-ответ представляет собой одно или несколько растровых изображений. Кроме того WMS поддерживает опцию прозрачности, позволяющую использовать WMS-слои совместно с остальными, не перекрывая их. Любой WMS-сервер в обязательном порядке поддерживает два типа типа запросов: GetCapabilities (возвращает описание конкретного WMS-сервиса и перечень доступных слоёв) и GetMap (непосредственно запрос изображений), остальные типы, описанные в стандарте, поддерживаются факультативно. Среди этих типов присутствует и GetFeatureInfo, позволяющий запрашивать атрибутивную информацию об объекте, расположенном по указаным координатам. Именно этот тип запроса используется во многих клиентских приложениях и со стороны пользователя может выглядеть, например, как всплывающее окно с информацией об объекте, появляющееся после клика на нём.
В данной статье дано подробное описание контрола WMSGetFeatureInfo, использующегося в OpenLayers и показан базовый пример его использования.
Настройки WMSGetFeatureInfo
Краткий перечень наиболее часто используемых настроек контрола:
Свойство | Тип | Описание |
---|---|---|
hover | {Boolean} | Запрос GetFeatureInfo выполняется при задержки курсора мыши над объектом. По умолчанию false. |
maxFeatures | {Integer} | Максимальное количество возвращаемых записей, определяет значение параметра FEATURE_COUNT запроса GetFeatureInfo. По умолчанию 10. |
layers | {Array(OpenLayers.Layer.WMS)} | Список слоёв к которым будет выполнен запрос GetFeatureInfo. Если значение не определено, то будут использованы все WMS-слои карты, url которых совпадает со значением свойства url самого контрола или одним из url из массива layerUrls. По умолчанию не определено. |
queryVisible | {Boolean} | Исключает скрытые слои из запроса GetFeatureInfo. По умолчанию false, то есть если, например, слой присутствует среди слоёв, описанных в массиве layers, но при этом выключен на карте, то запрос GetFeatureInfo к этому слою всё равно будет выполнен. |
url | {String} | URL WMS-сервиса к которому будет осуществляться запрос. Если не установлено при создании контрола WMSGetFeatureInfo, то в качестве значения будет использованo свойство url первого подходящего слоя. По умолчанию не определено. |
infoFormat | {String} | MIME-тип ответа, который должен отдать сервер. По умолчанию text/html. При использовании в качестве WMS-сервера MapServer может быть использован один из трёх типов: text/plain, text/html или application/vnd.ogc.gml. |
vendorParams | {Object} | Дополнительные параметры, которые будут включены в строку запроса. Например, при таком определении данного свойства: {radius: 10} в запрос добавится подстрока "&RADIUS=10" |
format | {OpenLayers.Format} | Формат, используемый для парсинга ответа. По умолчанию OpenLayers.Format.WMSGetFeatureInfo. |
Полный список доступных свойств и методов доступен в официальной документации.
Здесь же хотелось бы остановить внимание еще на одном свойстве контрола WMSGetFeatureInfo, наследуемого от OpenLayers.Control - eventListeners - объекта, позволяющего слушать различные события, происходящие с контролом. Для WMSGetFeatureInfo доступно 3 таких события: beforegetfeatureinfo, nogetfeatureinfo, getfeatureinfo. beforegetfeatureinfo срабатывает перед отправкой запроса на сервер, данное событие удобно использовать, например, если при каждом запросе к серверу требуется передавать какой-либо изменяющийся параметр. Например:
eventListeners: {
'beforegetfeatureinfo': function() {
this.vendorParams.settings = Math.random();
}
nogetfeatureinfo срабатывает в случае если не определено ни одного слоя для запроса. И самое важно событие - getfeatureinfo наступает в момент прихода ответа от сервера.
Пример использования WMSGetFeatureInfo
Создадим WMS слой и добавим контрол WMSGetFeatureInfo для запроса информации об объектах этого слоя:
//Создание карты
map = new OpenLayers.Map('map', ...);
// Создание WMS-слоя
var report = new OpenLayers.Layer.WMS('report',
"http://gis-lab.info/cgi-bin/mapserv?map=/usr/local/www/website/map/wms.map",
{layers: "report_l", transparent: true},
{isBaseLayer: false, opacity: 1, singleTile: true, visibility: true}
);
map.addLayers([report]);
// Создание контрола WMSGetFeatureInfo
var click_ctrl = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://gis-lab.info/cgi-bin/mapserv?map=/usr/local/www/website/map/wms.map",
layers: [report],
queryVisible: true,
infoFormat: 'application/vnd.ogc.gml',
maxFeatures: 50,
autoActivate: true,
// Vendor-specific параметр, используемый в MapServer (радиус поиска объектов в пикселях)
vendorParams: {
radius: 10
},
eventListeners: {
'getfeatureinfo': function(e) {
console.log(e);
}
}
});
// Добавляем контрол на карту
map.addControl(click_ctrl);
В данном примере при клике на объекте слоя report будет выполнен запрос GetFeatureInfo к WMS-серверу и при получении ответа (событие getfeatureinfo) будет выведен в консоль. Если с ответом нужно производить какие-то действия (выводить информацию во всплывающем окне, представить в виде таблицы и т.п.), то console.log(e) необходимо заменить на необходимый функционал.