Дмитрий Мозжухин, DATA+
Введение
С выходом версии 9.2 в ArcGIS Server (классы Standard и Advanced) появилась возможность публикации карт в Интернет при помощи, буквально, нескольких щелчков мыши. При этом опубликованное приложение может предоставлять широкие возможности навигации по карте, управления видимостью слоёв карты, идентификации объектов, атрибутивного поиска, а также редактирования и геообработки. Однако, зачастую данных возможностей недостаточно для корпоративного веб-приложения. Например, если требуются интеграция с какой-либо из учётных систем, отображение результатов анализа или геообработки на карте особым образом, или просто необходимо изменить интерфейс веб-приложения в соответствии с принятым в компании стилем.
О возможностях, предоставляемых ArcGIS Server для модификации стандартного веб-приложения, созданного при помощи менеджера ArcGIS Server, а также для создания собственных картографических веб-приложений и пойдёт речь в данной статье.
Обзор Web ADF
Для разработки ГИС приложений в ArcGIS Server входит набор библиотек и инструментов разработчика Web ADF (Web Application Developer Framework) для двух платформ в соответствии с версией ArcGIS Server – .NET и Java. Помимо непосредственно платформы, Web ADF для Java и для .NET имеют ряд функциональных различий, о которых будет рассказано ниже.
Web ADF устанавливается на веб-сервер, на котором будут публиковаться веб-приложения, в частности ArcGIS Server Manager, и веб-сервисы. Приложения и веб-сервисы могут обращаться к ресурсам, опубликованным на сервере ГИС через Интернет или по локальной сети (рис. 1).
Рис. 1. Архитектура ArcGIS Server.
В состав Web ADF входит ряд компонентов: библиотеки, элементы управления, задачи, средства интеграции, документация и примеры приложений.
Доступны следующие библиотеки:
- API Web ADF (.NET / Java) – Библиотеки, содержащие основные объекты программного интерфейса, позволяющие получать данные от различных источников, выполнять запросы и т.д. без непосредственного обращения к объектам ArcObjects на сервере.
- SOAP API Proxy – Библиотеки, содержащие «объекты-обёртки» для объектов ГИС-сервера, доступных удалённо по протоколу SOAP.
- ArcObjects .NET COM Interop – Библиотеки для .NET, содержащие «объекты-обёртки» для доступа к функциональности COM-объектов ArcObjects из .NET.
- Geospatial Enterprise Java Beans (EJB) – Набор java-компонентов, обеспечивающих построение ГИС приложений и сервисов корпоративного уровня, использующих технологию Enterprise JavaBeans.
- Javascript – библиотеки, содержащие функции, позволяющие пользователю взаимодействовать посредством веб-браузера с серверными элементами управления Web ADF (например, получать координаты курсора мыши или нарисовать полигон, полилинию и т.п.).
В Web ADF содержатся два типа элементов управления, позволяющие разработчику конструировать каркас веб-приложения в среде разработки. Во-первых, это визуальные элементы управления, такие как «карта», «таблица содержания», «панель инструментов», «обзорная карта», «линейка масштаба» и т.п. Во-вторых, это элементы управления – менеджеры ресурсов, которые управляют взаимодействием визуальных элементов управления с различными источниками данных.
Задачи (Tasks) – это компоненты, которые инкапсулируют в себе какой-либо законченный элемент логики. Задачи могут быть добавлены в веб-приложение и сконфигурированы при помощи ArcGIS Server Manager или из среды разработки. В поставку ArcGIS Server включён определённый набор задач: редактирование, поиск адреса, поиск местоположения, поиск и запрос по атрибутам, геообработка. Также существует набор компонентов для создания собственных задач.
Интеграция со средой разработки (Microsoft Visual Studio 2005, Eclipse, Sun Java Studio Creator) включает в себя шаблоны приложений, интегрированную справку, специализированные панели инструментов и контекстные меню.
Web ADF предлагает механизм, при помощи которого элементы управления могут использовать один или несколько источников данных. Каким образом элементы управления будут использовать эти источники данных, зависит от того, какими возможностями обладает конкретный источник. Один источник данных может предоставлять различные возможности. Например, сервис ArcIMS генерирует изображения карты, но также может быть использован для поиска объектов по значениям атрибутов. С другой стороны, сервис геокодирования ArcGIS Server обладает только одной возможностью – сопоставление и поиск адреса.
Управляют взаимодействием элементов управления и источников данных специальные компоненты – менеджеры ресурсов. Они определяют, какие источники данных доступны как ресурсы, каким образом ресурсы могут быть использованы элементами управления и как ресурсы могут взаимодействовать друг с другом. Элементы управления используют ресурсы для доступа к разным возможностям источников данных, в Web ADF называемых функциональностями (например, MapFunctionality, QueryFunctionality, MapTocFunctionality, TileFunctionality, GeoCodeFunctionality). Разные элементы управления могут разными способами использовать конкретный ресурс, используя различные функциональности, предлагаемые этим ресурсом. Например, ресурс может предоставлять возможность отображения геоданных на карте и, одновременно, может быть использован для отображения таблицы содержания со списком слоёв и их классификацией.
Рис. 2. Категории компонентов Web ADF.
Таким образом, компоненты программного интерфейса Web ADF можно разделить на три крупные категории (рис. 2):
- Элементы управления (которые включают и менеджеры ресурсов)
- Общие компоненты источников данных, ресурсов и функциональностей, называемые Common API.
- Компоненты для доступа к специфичным для каждого источника данных функциям (Data source specific APIs).
Исходя из этой схемы, типичные шаги программиста при работе с Web ADF таковы:
- Начинаем с элемента управления
- Получаем доступ к менеджеру ресурсов
- Находим нужный ресурс
- Определяем, поддерживает ли он нужную функциональность
- Используем функциональность.
Создание команд и инструментов
Для реализации различных пользовательских функций приложения в Web ADF имеется возможность создания команд и инструментов.
Команда или инструмент могут быть добавлены на элемент управления «панель инструментов» приложения или на панель пользовательской задачи. Команда подразумевает немедленное выполнение какого-либо действия, а инструмент подразумевает предварительное взаимодействие пользователя с картой или другими элементами управления в браузере, например выбор экстента или указание объекта точкой. Инструмент включает в себя два действия. Одно на стороне клиента обеспечивает взаимодействие пользователя с элементом управления (реализуется функциями Javascript) и посылает запрос на сервер. Второе действие выполняется на сервере в соответствии с переданными клиентским действием параметрами.
Для отображения результатов действия команды или инструмента Web ADF поддерживает как классическую синхронную модель веб-приложения с перезагрузкой всей страницы, так и асинхронную, с использованием технологии AJAX (Asynchronous JavaScript and XML), которая подразумевает обновление только обновляемых частей страницы – без перезагрузки всей страницы.
Web ADF для Java поддерживает технологию AJAX автоматически, .NET ADF требует от разработчика реализации жизненного цикла запросов-ответов «вручную» с использованием ASP.NET 2.0 Callback Framework, что требует написания значительного количества кода Javascript. В версии 9.3 в ArcGIS Server предполагается облегчить решение этой задачи, обеспечив поддержку пакета Microsoft ASP.NET AJAX.
Пользовательская графика в веб-приложении
В числе прочих новшеств, в ArcGIS Server 9.2 появилась возможность создания пользовательской графики на уровне веб-приложения. Эта функция может использоваться для таких задач как подсветка пространственных объектов (select), отображение различных надписей, буферных зон, результатов геокодирования, отображение динамических данных (например, с GPS).
Главное отличие создания пользовательской графики на уровне веб-приложения от создания графики на сервере (доступного также и в версии ArcGIS Server 9.1) состоит в том, что рендеринг пользовательской графики осуществляется в веб-приложении независимо от самой карты и не требует её перерисовки, тогда как графика уровня сервера является частью изображения карты и формируется на сервере ГИС. Это позволяет добиться существенного уменьшения времени отклика системы на действия пользователя при отображении пользовательской графики.
Следует, однако, упомянуть, что реализация этой функции существенно отличается в версиях Web ADF для Java и для .NET.
В .NET отображение пользовательской графики реализовано как графический источник данных (Graphics data source). Этот источник данных поддерживает программное создание нескольких графических слоёв. Каждый из этих слоёв может быть двух типов:
- ElementGraphicsLayer – может содержать разные типы геометрии, хранит геометрию и символ вместе, поддерживает только простой рендеринг, используется для отображения выборки, буферных зон, нескольких пространственных объектов
- FeatureGraphicsLayer – который является, фактически, обычным слоем в памяти приложения, хранит единый тип геометрии и набор атрибутов для всех объектов, поддерживает запросы и сложный рендеринг, используется для классификации и отображения большого количества пространственных объектов.
В Java отображение пользовательской графики реализовано как один графический слой (graphics layer), который также может быть двух типов – для отображения нескольких пространственных объектов с разной геометрией и для классификации и отображения большого количества пространственных объектов с единым типом геометрии (WebQuery и WebGraphics, соответственно). Выполнение запросов к графическому слою в Java Web ADF не поддерживается.
Задачи. Создание пользовательских задач
Задачи в ArcGIS Server 9.2 – достаточно мощное средство, которое позволяет без написания кода расширять и настраивать функциональность приложения. Задача – это обособленный компонент, который реализует какую-либо законченную функцию. В поставку ArcGIS Server включены задачи редактирования, поиска адреса, поиска местоположения, поиска и запроса по атрибутам, запуска инструмента геообработки. Все эти задачи могут быть добавлены в веб-приложение и настроены при помощи ArcGIS Server Manager или из среды разработки.
Разработчик имеет возможность создавать собственные задачи. Если в ваши приложения часто приходится встраивать одни и те же функции, отличающиеся лишь настройками, имеет смысл оформить их в виде задач. Созданные пользовательские задачи могут так же, как и задачи из поставки, быть интегрированы в ArcGIS Server Manager. Это позволит использовать их многократно в разных приложениях и гибко настраивать без написания кода. Разработанные задачи могут быть оформлены и в виде компонентов для среды разработки, что позволит разработчикам с лёгкостью встраивать их в свои веб-приложения.
При создании задачи разработчик может задавать различные параметры настройки задачи (например, имя слоя или масштаб), определять интерфейс, добавляя команды и инструменты, и определять как будет выводиться результат – в виде текста, таблицы или выделенных на карте объектов.
Рис. 3. Пример пользовательской задачи – задача печати.
Одним из хороших примеров пользовательской задачи является задача печати карты (рис. 3), описание и исходный код которой можно найти в блоге ArcGIS Server для разработчиков по ссылке: http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2007/05/16/Print-Task-Sample.aspx
В создании задач для .NET и Java также имеются различия. Так, Web ADF для Java предлагает больше свободы разработчику в создании интерфейса пользовательской задачи, чем Web ADF для .NET. Однако, в .NET возможны настройка и дополнение стандартной задачи редактирования, в то время как Java такую возможность не предоставляет.
Дополнительные возможности и взгляд в будущее
ArcGIS Server Web ADF предоставляет разработчику и многие другие возможности, такие как применение тем и оболочек (skins) для сайта, создание пользовательских источников данных, SOAP API, применение геообработки, использование геокодирования и другие. В этой статье мы их не рассматриваем. Обо всех этих возможностях можно прочесть в документации на сайте EDN (http://edn.esri.com), который постоянно обновляется, а также в блогах разработчиков ArcGIS Server, расположенных по адресам http://blogs.esri.com/Dev/blogs/arcgisserver и http://abstractfinal.blogspot.com.
Завершая статью, стоит упомянуть о некоторых новых возможностях, которые предполагается добавить в недалеком будущем. Многие из них с большой долей вероятности появятся в Web ADF версии 9.3. Это:
- Для .NET – полная интеграция с Microsoft AJAX
- Для Java – интеграция с библиотекой DOJO AJAX
- Рендеринг графики на стороне клиента (в браузере)
- Data Source Discovery – расширяемая архитектура для добавления пользовательских источников данных из Visual Studio, ArcGIS Server Manager и программно.
- JavaScript API – публичный, поддерживаемый и документированный программный интерфейс Javascript для взаимодействия с функционалом сервера
- Поддержка локализации
- Полная поддержка для слияния нескольких кэшированных источников данных
- Поддержка всплывающих подсказок на карте для Java (Map Tips, на данный момент реализовано только в .NET)
- Поддержка печати
- Расширяемое приложение ArcGIS Server Manager с поддержкой AJAX
- Большое количество изменений в редактировании для веб.
Как видно из содержания данной статьи и приведенного выше и, скорее всего не полного, перечня, функциональные возможности ArcGIS Server и средства разработки картографических веб-приложений с его помощью постоянно развиваются как количественно, так и с позиций качества и удобства их применения.