Благодаря блогу коллег из Esri Australia я расскажу о возможности публикации пространственных представлений с доступом через Сервис Объектов используя ArcGIS 10.x
Что такое представления в БД?
Представление (VIEW) — объект базы данных, хранящий в себе SQL запрос, результатом выполнения которого является виртуальная (логическая) таблица.
Представления могут соединять таблицы друг с другом, как соединения (join) в ArcMap.
Но представление имеет огромный ряд преимуществ т.к. хранится в СУБД, что обеспечивает многопользовательский доступ и динамическое обновление данных. Это позволяет использовать различным пользователям представление в различных документах карты. Например, данные по обслуженным клиентам хранятся в одной таблице, а точки обслуживания в другой. Используя представление можно агрегировать данные на уровне точки обслуживания и получить статистику об общей выручке и количестве клиентов. При этом статистика будет динамически обновляться с добавлением данных о новых обслуженных клиентов. Таким образом пользователи могут использовать это представление для дальнейшей аналитики без необходимости каждый раз делать соединение в ArcMap.
Представления могут быть так же использованы для фильтрации данных в случае необходимости ограничения прав доступа либо упрощения вида таблицы.
Например, если в БД храниться информация о местах проживания клиентов (полученные с помощью программы лояльности) которая также может содержать их персональные данные. С помощью представления можно убрать поля с информацией о персональных данных к которым часть сотрудников не должна иметь доступа. В этом случае этим пользователям должен быть дан доступ к представлению, а не самой таблице.
Пространственные представления — это представления БД содержащие пространственный столбец. Важно отметить, что пространственные представления имеют доступ ТОЛЬКО НА ЧТЕНИЕ и ArcGIS не позволяет их редактировать.
1. Создание пространственного представления
Прежде чем начинать этот шаг убедитесь, что есть рабочее подключение к серверу базы данных и есть доступ хотя бы к одному классу пространственных объектов и при необходимости таблице, которые связываются, используя первичный и внешний ключи.
Выбираем нужное подключение к серверу базы данных (Database connection), и из контекстного меню выбираем Новый (New), затем выбираем Представление (View). После чего откроется диалоговое окно Создать новое представление (Create New View).
Введем SQL-запрос в Определение вида (View Definition), которое будет определять состав будущего пространственного представления.
SELECT Stores.OBJECTID ,Stores.Name ,Stores.Address ,Stores.Shape ,Store_Revenue.Revenue FROM Stores LEFT JOIN Store_Revenue ON Stores.Store_ID = Store_Revenue.Store_ID
В этом примере связываются две таблицы, в качестве первичного ключа используя поле Store_ID класса пространственных объектов Stores, и одноимённое поле таблицы Store_Revenue в качестве внешнего ключа.
Другой пример SQL-запроса применяет фильтр по атрибуту к классу пространственных объектов.
SELECT [OBJECTID] ,[Flash_ID] ,[Flash_DateGMT] ,[Detector] ,[SHAPE] FROM [work_GDB].[flash].[LIGHTNING] WHERE DATEDIFF(minute,Flash_DateGMT,SYSUTCDATETIME()) <= 30
Есть класс пространственных объектов LIGHTNING, содержащий местоположения грозовых разрядов, обновляемый в реальном времени. И нам необходимо отображать грозовые разряды, произошедшие за последние 30 минут.
Писать и тестировать SQL-запросы имеет смысл в утилитах, предназначенных для управления БД, например, для MS SQL Server можно использовать Microsoft SQL Server Management Studio.
2. Публикуем пространственное представление в виде сервиса ArcGIS Server
Посмотрим, как выглядит наше пространственное представление в ArcMap.
Используя окно Catalog в ArcMap откроем подключение к серверу базы данных (Database connection), содержащее созданное ранее пространственное представление. Отметим что представления отображаются иконками похожими на те, которые используются при отображении таблиц. Это происходит потому, что ArcMap пока не знает какой тип геометрии у этого пространственного представления. Перетащим Представление в вид карты.
ArcMap создаст Слой запроса (Query Layer) на базе представления для отображения его на карте. Выберем корректное поле с уникальным идентификатором и жмем Готово.
Если посмотреть атрибуты созданного слоя, то там будут присутствовать все поля из заданного ранее пространственного представления.
Для того чтобы использовать созданное нами Пространственное Представление в мобильном приложении Collector, размещенном на Portal for ArcGIS или ArcGIS Online, нам нужно получить доступ к данным через Сервис Объектов ArcGIS Server (Feature service)
Приступим:
1. Файл (File) > Совместно использовать как (Share As) > Сервис (Service)
2. Выбираем Опубликовать сервис (Publish a service)
3. Выбрать подключение (Choose a connection) к ArcGIS for Server либо Portal for ArcGIS или ArcGIS Online
4. Меняем если нужно имя сервиса
5. Выбираем папку, в которой будет создан сервис
6. В Редакторе сервисов (Service Editor) выберем закладку Возможности (Capabilities) и убедимся, что отмечена только опция Картография (Mapping), и опция Доступ к объектам (Feature Access) не выбрана.
7. Выполним проверку документа на возможность публикации его на сервере используя Анализировать (Analyze)
8. Публикуем выбрав Опубликовать (Publish)
9. В ArcMap в дереве каталога разверните узел ГИС-серверы (GIS Servers)
10. Находим только что созданный сервис и выбираем из контекстного меню Свойства сервиса (Service Properties)
11. В Редакторе сервисов (Service Editor) выберем закладку Возможности (Capabilities) и отмечаем чек бокс Доступ к объектам (Feature Access).
12. Выберем настройки Доступ к объектам (Feature Access) и убедимся, что отмечена только опция Запрос (Query).
13. Важно убедится в том, что в ArcGIS Server зарегистрировано соединение с БД
В итоге мы можем получить доступ к нашему пространственному представлению через Сервис Объектов используя различные клиентские приложения такие как ArcMap, веб карты ArcGIS Online и такие приложения как Collector или, например, Operations Dashboard for ArcGIS.