Archives by date

You are browsing the site archives by date.

Конфигурационный файл

mapSurfer GS

(далее…)

mapSurfer — javascript-интерфейс — CometSocket

Класс управления сокетом.

var socket = new GP.CometSocket(url)
//пример создания

Методы

Метод Возвращает Параметры Описание
isOpened() true или false открыт или нет
onOpen(callback, ctx) callback — функция
ctx — контекст
при открытии сокета будет выполнена функция callback в контексте ctx
send(command, data) command — string
data — object
отправить комманду по сокету
destroy() разорвать соединение

Команды для отправки по сокету

Команда Отправляемый объект Параметры Описание
GET_REPORT
sendObject = {
    reportId: ,
    fileType: ,
    params: [{
        name: 
        type: 
        value:
    }]
}

// id отчета
// тип файла отчета
// массив параметров
// название параметра
// тип параметра
// значение параметра
открыт или нет

Пример использования события

myCommet.on(
	"open",
	function(data){		
		console.log(data);
	},
	cotext
)

    // событие
    // функция, которая будет выполнена при срабатывании события
	// пример использования параметров
    // контекст выполнения фнкции

События

Событие Описание
«open» открыто соединение
название отправленной комманды При отправке команды происходит событие с этой коммандой.

Примеры использования библиотеки WfsLib

Примеры использования библиотеки WfsLib

Примером использования библиотеки WfsLib является проект WFSRESTExampleProject. Также для отображения и работы с картой используется mvActiveX. Для его работы необходимо запустить установщик MVActiveX_setup.exe.
После установки mvActiveX необходимо обратить внимание на две библиотеки, на которые ссылается сам проект, — AxmvMapLib, mvMapLib (рисунок 1).

wfs_1

Рисунок 1

Указанные библиотеки автоматически создаются при подключении ActiveX к проекту. Подключить его можно, предварительно добавив новый элемент управления (рисунки 2-3).

wfs_2

Рисунок 2

wfs_3

Рисунок 3

Проект состоит из пяти форм: FormAuth, FormLog, FormShowObject, FormShowObjects и WfsRESTExample и класса MapClass, в котором собраны методы для работы с mvActiveX).

Форма  WFSRESTExample

Эта форма является основной при работе с проектом из данного примера.

Для работы проекта примера необходима карта, статично определенная в методе MapFilePath.

/// <summary>
/// путь к файлу карты
/// </summary>
private string MapFilePath { get { return "vmp/map_file.vmp"; } }

Для начала нужно добавить новый REST сервер и пройти авторизацию. Для этого нужно нажать кнопку со значком «Плюс» (рисунок 4).

wfs_4

Рисунок 4

Откроется окно FormAuth. В соответствующих полях необходимо ввести адрес сервера в виде http://some.site.net/, имя пользователя и пароль (рисунок 5).

wfs_5

Рисунок 5

После успешной авторизации на сервере адрес сервера с экземпляром класса WfsLib.Model.REST.User в TreeNode.Tag добавится в TreeView.Nodes (рисунок 6).

wfs_6

Рисунок 6

Затем при двойном клике по имени сервера (по верхнему уровню TreeView) подгрузятся доступные слои, распределенные по группам (рисунок 7).

wfs_7

Рисунок 7


        /// <summary>
        /// Двойной клик по серверу
        /// </summary>
        /// <param name="e"></param>
        private void DoubleClickToConnect(TreeNodeMouseClickEventArgs e)
        {
            //подгрузить данные, если еще не подгружены
            if (e.Node.Nodes.Count == 0)
            {
                var client = e.Node.Tag as Layers;
                if (client == null)
                    throw new Exception("Настройки сервера не определены, обратитесь к разработчику");
                //получение слоев
                var leyars = client.GetLayers();
                var groups =
                    leyars
                    //.Where(o1=> o1.Service == "WFS")
                    .Select(o1 => o1.Group_name).Distinct();
                //добавление групп, распределение слоев по группам
                foreach (var group in groups)
                {
                    var grNode = e.Node.Nodes.Add(group);
                    var ls = leyars.Where(o1 => o1.Group_name == group).ToArray();
                    foreach (var item in ls)
                    {
                        grNode.Nodes.Add(item.Name).Tag = item;
                    }
                }
            }
        }

Если выбрать в списке один из слоев, отметив его галочкой, объекты слоя будут получены с сервера и отображены на карте (Рисунок 8).

wfs_8

Рисунок 8

При двойном клике по имени слоя будет вызван метод DoubleClickToLayer, и отобразится форма со списком объектов FormShowObjects (рисунок 9).

wfs_9

Рисунок 9

private void DoubleClickToLayer(TreeNodeMouseClickEventArgs e)
        {
            //определяю выбранный слой
            var layer =
                e.Node.Tag as Layer;
     if (layer == null) throw new Exception("Тег не является слоем, обратитесь к разработчику");
            //ищу родителя, у которого есть данные о соединении
            var client = GetClient(e.Node);
            //передаю данные о соединении родителя
            try
            {
                var features = client.GetFeature(layer);
                var attributes = layer.Attributes;
                FormShowObjects objs = new FormShowObjects(features, attributes, layer);
                objs.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

Форма  FormShowObjects

Эта форма отображает список полученных объектов через WFS. При двойном клике по имени объекта откроется форма FormShowObject (рисунок 10), в которой можно будет отредактировать данные. Поле геометрии не должно быть пустым.

wfs_10

Рисунок 10

Удаление объекта из списка:


        /// <summary>
        /// Удаление выделенного в списке объекта слоя
        /// </summary>
        private void DeleteObject()
        {
            try
            {
                if (dataGridView_objects.CurrentRow == null) return;
                //получение экземпляра WfsClient через слой
                Layers client = Layer.GetRestClientLayers();
                //получение выделенного объекта слоя
                var cur = GetCurrentFeature();
                //удаление
                client.DeleteObject(cur);
                //убираю из списка отображения
                this.Features.Remove(cur);
                //отображение отредактированного списка
                dataGridView_objects.DataSource = GetTable(this.Features);

                MessageBox.Show("Объект удален "+cur.Id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Форма FormShowObject

Эта форма редактирует объекты, полученные через Wfs, и позволяет сохранять изменения через интерфейс геосервера.

При нажатии кнопки «Сохранить» вызывается функция button_save_Click.

 private void button_save_Click(object sender, EventArgs e)
        {
            try
            {
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                Layers client = Layer.GetRestClientLayers();

                if (this.IsNewObject)
                {
                    CreateFeature();
                    client.InsertObject(this.Feature);
                    MessageBox.Show("Объект добавлен");
                }
                else
                {
                    SaveFeature();
                    client.UpdateObject(this.Feature);
                    MessageBox.Show("Объект изменен");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
        }
Сохранение данных с интерфейса пользователя в объекте Feature:
   private void SaveFeature()
        {
            foreach (DataRow item in this.ViewTable.Rows)
            {
                if (this.Layer.GetGeomName() == item[0].ToString()) continue;
                this.Feature.Properties[item[0].ToString()] = item[1]; 
            }
            this.Feature.Geometry.WellKnownText = textBox1.Text;
        }

Создание нового объекта Feature:

private void CreateFeature()
        {
            this.Feature = new WfsLib.Model.Feature() { Geometry = null, Layer = Layer };
            Feature.Properties = new Dictionary();
            foreach (DataRow item in ViewTable.Rows)
            {
                Feature.Properties.Add(item[0].ToString(), item[1]);
            }
            Feature.Geometry = new WfsLib.Model.Geometry(textBox1.Text,this.Layer.GetGeomName());

Фильтры

Фильтры OGC реализованы в классе Filter, участвуют в таких операциях, как Update (обновление объектов слоя).
Пример использования фильтров OGC:

 Filter f = new Filter(Logic.And);
 f.Functions.Add(new FunctionBetween("Номер",new FunctionExpression(Function.Literal,"10"),
new FunctionExpression(Function.Literal,"40"));
 f.Functions.Add(
 new FunctionLogic(
 Logic.PropertyIsLike,
 new FunctionExpression(Function.PropertyName,"Название улицы"),
 new FunctionExpression(Function.Literal,"новая")
 )
 );

Методы

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:

1-4_копия

Что такое 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 упрощает работу с некоторыми функциями геосервера и объединяет несколько геосерверов под одним общим интерфейсом.

API

mapAdmin .NET