Методы
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 | Включен слой, указанный в ссылке. | — | 

