Методы
WFS – это протокол для работы с векторными слоями геосервера.
GetDescribe — метод, который предоставляет данные о структуре объекта слоя (названия и типы атрибутов, имя геометрии, тип объекта).
DescribeFeature GetDescribe(Layer layer);
public List GetFeature(Model.Layer layer,
int maxFeatures = 0,
string featureId = null,
double[] bbox = null,
string srs = null,
string sortBy = null,
string[] propertyName = null)
string[] Layer layer | экземпляр слоя |
GetCapabilities — метод, который возвращает список всех возможностей текущего геосервера данного слоя (список слоев, список поддерживаемых функций и логических операций).
GetCapabilitiesType GetCapabilities(int layserId);
int layserId | идентификатор слоя |
GetFeature — метод, который возвращает список объектов слоя.
public List GetFeature(Model.Layer layer,
int maxFeatures = 0,
string featureId = null,
double[] bbox = null,
string srs = null,
string sortBy = null,
string[] propertyName = null)
string[] propertyName | имена полей в выборке |
Layer layer | экземпляр слоя |
int maxFeatures | количество объектов в выборке |
string featureId | координаты описывающего прямоугольника |
string srs | идентификатор srs, например srs = «4326» |
string sortBy | имя поля для сортировки |
WFS-T — это протокол редактирования объектов слоя геосервера через post-запросы.
Insert — метод для добавления нового объекта.
InsertObject(Feature feature)
Feature feature | объект слоя; feature.Layer не должен быть null |
Update — метод для обновления объекта слоя.
UpdateObject(Feature feature)
Feature feature | объект слоя; feature.Layer не должен быть null |
Delete — метод для удаления объекта.
DeleteObject(Feature feature)
Feature feature | объект слоя; feature.Layer не должен быть null |
Transaction — транзакция; в данном случае это список операций в формате XML/GML.
Имеется класс Transaction, который может содержать от 0 до n элементов транзакции (с операциями обновления, удаления, добавления). Все операции, представленные выше, работают через класс Transaction с одним элементом внутри.
Transaction(Layer layer) | конструктор |
Transaction.Elements.Add(ITransactionElement el) | заполнение транзакции |
Transaction.Execute() | выполнение транзакции |
REST API помимо авторизации также поддерживает несколько методов, расширяющих интерфейс геосервера.
GetLayers — метод для возвращения списка слоев.
List< WfsLib.Model.Layer> GetLayers()
GetLayer — метод для возвращения экземпляра класса Layer.
Model.Layer GetLayer(int id))
GetAttributes — метод для получения атрибутов слоя и их сохранения в свойстве Layer.Attributes.
List GetLayerAttributes(Model.Layer layer)
Схема классов
На рисунках ниже приведены схемы классов Layer, Geometry, REST, LayerAttribute, Transaction, ITransactionElements, Feature, WFSClient:
Что такое token
Token – это ключ сессии, уникальный идентификатор, который передается в каждом запросе REST; имеет тип string.
Авторизация
Авторизация
Для авторизации в системе REST необходимо передать имя пользователя, пароль и адрес сервера REST в конструктор WfsClient:
WFSClient (Uri address, string username, string password, int defaultSrs)
В конструкторе будет вызван метод REST.GetToken(), результат которого будет сохранен в объекте WfsClient:
WFSClient (Uri address, string username, string password, int defaultSrs, string token)
Также можно самостоятельно пройти авторизацию и передать вместе с данными пользователя полученный токен. В этом случае данные пользователя будут нужны для обновления просроченного токена в ходе работы.
Что такое REST
REST – это прослойка между интерфейсом геосервера и программным интерфейсом. Основные задачи REST – это авторизация пользователя, разграничение прав и безопасность. Также REST упрощает работу с некоторыми функциями геосервера и объединяет несколько геосерверов под одним общим интерфейсом.
mapSurfer — javascript-интерфейс — gp
Объект GP
Пример использования события
GP.on(
"widgetCreate",
function(data){
console.log(data.widget);
},
cotext
)
События вебсокетов
Событие | Описание |
---|---|
«webSocket:created» | Создался вебсокет |
«webSocket:destroy» | Вебсокет прекратил свою работу |
События виджета затемнения экрана
Класс виджета GP.Widget.AjaxLoader
Событие | Описание |
---|---|
«loader:show» | Затемнился экран |
«loader:close» | Экран стал прежним, пользователь может продолжать работу |
Общие события виджетов
Событие | Описание | параметры (относительно «data») |
---|---|---|
«widgetCreate» | Произошло создание виджета | widget — созданный виджет |
«widgetDestroy» | Произошло удаление виджета | widget — удаленный виджет |
Общие события элементов управления
Событие | Описание | параметры (относительно «data») |
---|---|---|
«controlCreate» | Произошло создание элемента управления | control — созданный контрол |
«control:activate» | Произошла активация контрола | control — созданный контрол |
События левой панели
Класс виджета GP.Widget.LeftPanel
Событие | Описание | параметры (относительно «data») |
---|---|---|
«leftPanel:show» | Показана левая панель | leftPanel — виджет левой панели |
«leftPanel:reload» | Перезапещена левая панель | leftPanel — виджет левой панели |
События связанные с картой.
Событие | Описание | параметры (относительно «data») |
---|---|---|
«offLayer» | Выключен слой | layer — слой карты |
«turnLayer» | Включен слой | layer — слой карты |
mapSurfer — javascript-интерфейс — features
Виджеты features
класс GP.Widget.WFSFeatures
Класс WFS features (объектов на карте).
События
Событие | Описание |
---|---|
«eisLoaded» | Медиа информация слоя загружена. |
класс GP.Widget.WMSFeatures
Класс WMS features (объектов на карте).
События
Событие | Описание |
---|---|
«eisLoaded» | Медиа информация слоя загружена. |
mapSurfer — javascript-интерфейс — кнопки управления
Виджеты кнопок управления
класс GP.Widget.DirectButton
Виджет кнопки управления. От этого класса наследуются классы всех кнопок управления.
Объект с опциями, который можно передавать при создании экземпляра класса:
options: {
first - boolean, элемент должен быть первым в панели
last - boolean, элемент должен быть последним панели
bindClick - boolean, слушать ли событие клика по кнопке сразу при создании виджета
}
Объект с опциями, который необходимо определить внутри виджета, который наследуется от GP.Widget.DirectButton.
mainOptions:{
buttonId: "",
title: "",
image: "",
bindClick: true - boolean, слушать ли событие клика по кнопке сразу при создании виджета. Значение по умолчанию.
}
Методы
Метод | Описание |
---|---|
_activateControl() | Активирование контрола. |
_disableControl() | Деактивирование контрола. |
класс GP.Widget.Distance
Виджет кнопки «Измерить расстояние».
Объект mainOptions, описанный в виджете
options: {
mainOptions: {
popups: true,
buttonId: "distanceButton",
title: "Измерить расстояние",
image: GP.imagesPath + "/icons/distance.png",
bindClick: true
}
Методы
Метод | Описание |
---|---|
getLine() | Возвращает линию маршрута. |
События
Событие | Описание |
---|---|
«control:distance:enable» | Виджет измерение дистанции включен. |
«control:distance:disable» | Виджет измерение дистанции выключен. |
класс GP.Widget.FeatureBBox
Виджет кнопки «Список объектов области».
Объект mainOptions, описанный в виджете
mainOptions: {
buttonId: "featureBBoxButton",
title: "Список объектов области",
image: GP.imagesPath + "/icons/bbox-search.png",
bindClick: true
}
Методы
Метод | Описание |
---|---|
requestData() | Возвращает список объектов области. |
События
Событие | Описание |
---|---|
«control:featureBBox:enable» | Виджет «Список объектов области» включен. |
класс GP.Widget.FixedLink
Виджет кнопки «Фиксированная ссылка».
Объект mainOptions, описанный в виджете
mainOptions: {
popups: true,
buttonId: "fixedLinkButton",
title: "Фиксированная ссылка",
image: GP.imagesPath + "/icons/fixedLink.png",
bindClick: true
}
класс GP.Widget.Print
Виджет кнопки «Печать карты».
Объект mainOptions, описанный в виджете
mainOptions: {
buttonId: "print",
title: "Печать карты",
image: GP.imagesPath + "/icons/print.png",
bindClick: true
}
класс GP.Widget.Reports
Виджет кнопки «Отчеты».
Объект mainOptions, описанный в виджете
mainOptions: {
buttonId: "reportsButton",
title: "Отчеты",
image: GP.imagesPath + "/icons/report.png",
bindClick: false
}
Методы
Метод | Описание |
---|---|
destroy() | Отключает контрол. |
класс GP.Widget.ZoomControl
Виджет контрола управления приближения карты.
Методы
Метод | Описание |
---|---|
draw() | Отрисовка контрола. |
События
Событие | Описание |
---|---|
«handClick» | Событие срабатывает при нажатии на иконку руки. |
Примеры
Пример класса кнопки управления для модуля.
В данном классе описан контролл, который включает/выключает определенный слой
GP.Module.Widget.MyControlButton = GP.Widget.DirectButton.extend({
mainOptions:{
buttonId: "MyControl",
title: "Кнопка управления",
image: "/public/modules/myModule/images/controlIcon.png",
bindClick: true
},
_createWidget: function(){
GP.Widget.DirectButton.prototype._createWidget.call(this);
this._layer = this.options.layer;
this._active = false;
},
_activateControl: function(){
if(!this._layer)
return;
GP.Widget.DirectButton.prototype._activateControl.call(this);
if (this._active){
this._disableControl();
} else {
/* активация действия кнопки */
this._active = true;
GP.mainMap.map.addLayer(this._layer);
}
},
_disableControl: function(){
GP.Widget.DirectButton.prototype._disableControl.call(this);
/* деактивация действия кнопки */
this._active = false;
if (this._layer != null) {
GP.mainMap.map.removeLayer(this._layer);
}
},
destroy: function() {
this._disableControl();
this._element.remove();
}
});
// наследование от GP.Widget.DirectButton
// id кнопки
// заголовок кнопки
// картинка кнопки
// if false, то функция _activateControl
// не будет автоматически выполняться при клике на кнопку.
// конструктор
// вызов конструктора родителя
//активация контрола
// вызов активации родителя
// если контрол активен
// выключить
// деактивация
// выключение контрола
// удаление контрола
Добавление контрола.
GP.widgets.actions.add("myControlButton", new GP.Module.Widget.MyControlButton());
Удаление контрола.
if(typeof GP.widgets.actions != 'undefined' && GP.widgets.actions.containsKey("myControlButton")) {
GP.widgets.actions.get("myControlButton").destroy();
GP.widgets.actions.removeByKey("myControlButton");
}
// очистка контрола
// удаление
mapSurfer — javascript-интерфейс — widgetsJReports
Виджеты отчетов
класс GP.Widget.ReportButton
Виджет кнопки создания отчета.
Методы
Метод | Описание |
---|---|
display(bool) |
bool: true: показать кнопку. false: скрыть кнопку. |
События
Событие | Описание | Параметры |
---|---|---|
«buttonClick» | Перерисовалась правая панель. | button — объект кнопкиtype — тип выбранного отчета. |
класс GP.Widget.ReportsList
Виджет списка готовых отчетов.
Методы
Метод | Описание |
---|---|
close() | Прекратить ожидание готовых отчетов. |
update(reportsArray) | Обновить список отчетов. reportsArray — массив отчетов |
События
Событие | Описание |
---|---|
«reportList:update» | Обновился список отчетов. |
«reportList:allCreated» | Все отчеты созданы. |
mapSurfer — javascript-интерфейс — контроллеры
Контроллеры
класс GP.Controller
Класс, от которого наследуются все контроллеры.
Пример написания контроллера
GP.Controller.MyController = GP.Controller.extend({
initialize: function() {
GP.Controller.prototype.initialize.call(this,{});
...
}
});
// наследование от GP.Controller
// конструктор
// вызов конструктора родителя, обязательно для контроллеров
// действия контроллера
класс GP.Controller.Application
Класс контроллера приложения. Объект в системе GP.controllers.application.
События
Событие | Описание | Параметры |
---|---|---|
application:startLoad | Начало загрузки приложения. | — |
application:baseDataLoaded | Загрузились основные данные приложения. | — |
loadUser | Получены данные пользователя. | — |
loadUser | Получены данные пользователя. | — |
application:layersLoaded | Загружены слои. | groups — группы слоев:data.groups, mapExtent |
application:endCreate | Загрузка приложения завершена. | — |
application:startReload | Начало перезагрузки приложения. | — |
reloadUser | Перезагрузка данных пользователя. | — |
application:turnDefaultLayer | Включение слоя, указанного в ссылке. layerId | layerId — id слоя |
application:defaultLayerTurned | Включен слой, указанный в ссылке. | — |