Иногда широта возможностей ArcObjects и трудности написания кода для веб-сервиса могут делать расширения серверных объектов (SOE) трудными для новичков. В данном разделе обсуждаются некоторые распространенные задачи веб-ГИС, для которых разработчики традиционно писали код ArcObjects, и рассматриваются альтернативные подходы, которые не требуют написания SOE или знания ArcObjects.
Создание компоновок для печати
Многие разработчики используют ArcObjects для обращения к объекту Layout картографического сервиса, в частности, для внедрения функций высококачественной печати в свои веб-приложения. Они используют ArcObjects для работы с картами качества, аналогичного ArcMap, и окружающими элементами для создания печатных документов больших форматов и т. д.
В ArcGIS 10.0 был представлен модуль Python arcpy.mapping, который позволяет определять компоновку и печать карт в скриптах. После этого к скрипту можно предоставлять доступ через сервис геообработки. Модуль arcpy.mapping позволяет очень детально управлять документами карты: можно динамически добавлять слои на карту, обновлять символы и пр. Также можно работать с компоновкой карты, управлять такими элементами, как текст и изображения.
В ArcGIS 10.1 были расширены возможности arcpy.mapping. В частности, с помощью arcpy.mapping стало проще выполнять динамическую загрузку содержимого картографического веб-приложения (включая картографические сервисы и графику) в документ карты.
Изменение символов и механизмов отображения
Другой причиной, по которой разработчики в прошлом использовали ArcObjects, была возможность менять символы в конкретном слое в картографическом сервисе. Такой рабочий процесс часто требовал использования сервисов, не объединенных в пул, что ограничивало масштабируемость приложений. Некоторые разработчики находили способы использовать сервисы, объединенные в пул, однако переключение состояния сервиса для ответа на запросы от разных пользователей часто приводило к снижению производительности и возлагало на разработчика дополнительную ответственность по поддержанию работоспособности самого экземпляра карты.
API-интерфейсы веб-программирования ArcGIS предоставляют простой способ присвоения символов пространственным объектам с помощью клиентского слоя объектов или графического слоя, свойства отображения которых можно изменять в любое время. Суть этого метода состоит в том, что вся геометрия и атрибуты видимых объектов загружаются на клиентскую машину, что позволяет ей легко отрисовывать объекты с использованием любых цветов, ширин или границ классов, определенных разработчиком приложения.
Использование слоя объектов особенно эффективно при создании тематических карт, для взаимодействия с объектами и их выделения и т. д., однако этот метод не подходит при работе с тысячами объектов или очень сложными полигональными объектами. В таких случаях оптимальным методом является запрос изменения символов на уровне сервиса и отображение карты самим картографическим сервисом. Ранее для этого нужно было использовать ArcObjects.
В ArcGIS 10.1 картографический сервис получил расширенную функциональность, в частности, теперь можно менять содержимое и символы на карте во время выполнения (как при работе с ArcIMS). Больше не нужно использовать сервисы, не объединенные в пул, и детальный код ArcObjects для изменения символов на слоях картографического сервиса. Вместо этого для каждого запроса можно выбирать соответствующее содержимое и символы, которые будут использоваться на создаваемой карте.
Это усовершенствование позволяет сделать приложения намного более масштабируемыми, при этом упростив разработку и обслуживание. Определение символов для слоев в картографическом сервисе во время выполнения осуществляется путем включения сведений об отображении в запрос к веб-сервису на отрисовку карты вместе с обычными данными о видимости слоев, экстенте и пр. API-интерфейсы веб-программирования ArcGIS версии 3.0 включают служебные классы, которые позволяют легко определять содержимое, методы отображения, границы классов, символы и т. д.
Дополнительные сведения об изменении содержимого и символов в картографическом сервисе "на лету" см. в разделе O динамических слоях.
Веб-редактирование
В ранних выпусках ArcGIS Server редактирование данных через Интернет приходилось проводить исключительно в пользовательском коде ArcObjects с использованием локальных подключений (DCOM). В версии 9.2 в Web ADF была представлена задача Редактор, которая позволяет выполнять базовое редактирование, включая создание, перемещение и удаление объектов. Любые модификации этой задачи или создание инструментов редактирования с нуля требовали значительного объема программирования в ArcObjects.
API-интерфейсы на базе REST изначально не имели возможностей веб-редактирования, однако после представления сервиса объектов в ArcGIS 10 они начали поддерживать редактирование. Через REST доступно не только редактирование, этот интерфейс удобен для пользовательских модификаций, поскольку многие распространенные методы редактирования, такие как вырезание, обрезка, расширение, автозаполнение полигонов и изменение формы, предоставляются через REST-реализацию сервиса геометрии. Наконец, при редактировании с помощью REST можно использовать сервисы, объединенные в пул. А это дает огромный прирост производительности.
В ArcGIS 10.1 была прекращена поддержка одного рабочего процесса: длинные транзакции. В Web ADF можно было использовать сервисы, не объединенные в пул, для редактирования в рамках модели длинных транзакций. По сути, можно было запустить обновление объектов и в любое время провести откат. В сервисе объектов все операции являются операциями без сохранения состояния, это значит, что откат транзакций на уровне базы данных невозможен (однако это можно реализовать в логике приложения). Модель длинных транзакций для веб-редактирования – это один из немногих рабочих процессов, для которого в новой серверной архитектуре ArcGIS 10.1 не нашлось альтернатив.
Важно отметить, что отсутствие поддержки длинных транзакций не мешает реализовывать операции отмены и возврата действий. На самом деле, в API-интерфейсах картографического веб-приложения ArcGIS операции отмены и возврата действий доступны непосредственно в API-интерфейсе на уровне приложения.
Другой уникальной возможностью для сервисов, не объединенных в пул, является возможность менять версии во время редактирования. Это позволяет, в частности, веб-пользователям сохранять свои изменения в разных версиях, которые впоследствии можно согласовывать в ArcGIS Desktop. ArcGIS 10.1 расширяет возможности сервисов объектов, позволяя выбирать версию для редактирования во время выполнения в любом веб-приложении.
Реализация бизнес-логики в геообработке
В некоторых ГИС-приложениях имеются специальные наборы инструментов для реализации расширенной геоинформационной бизнес-логики. Эти инструменты могут предсказать объем добытой древесины в лесу, определить подходящие участки для ресторана или оценить зоны распространения токсичного облака. В этих целях многие разработчики используют ArcObjects.
Во многих случаях такие процессы можно описать в ArcGIS ModelBuilder, где их графически можно связать в единую "цепочку". Такие модели геообработки можно предоставлять в качестве веб-сервисов и использовать в веб-приложениях. Преимущества этого очевидны: использование сервиса геообработки позволяет значительно сократить необходимый объем программирования. Кроме того, можно использовать преимущества асинхронного выполнения сервисов геообработки, чего непросто добиться в своем коде ArcObjects.
Помимо гибкости, которая обеспечивается наличием сотен готовых инструментов, которые можно сочетать в ModelBuilder, геообработка дает возможность разрабатывать собственные инструменты. Самый простой способ – это создание скриптов Python, которые могут выполняться самостоятельно либо в сочетании с другими инструментами в модели. Выше в данном разделе описывается такой пример с использованием модуля arcpy.mapping для создания высококачественных карт через Интернет.
Для еще более детального контроля вместо Python для создания пользовательских инструментов геообработки можно использовать языки C#, Visual Basic .NET, C++ или Java. Это позволяет внедрять собственную детализированную логику ArcObjects в модели.
При использовании Python или другого языка программирования преимущество создания пользовательских инструментов состоит в том, что их можно использовать повторно в других рабочих процессах, поскольку они ведут себя точно так же, как и любой другой готовый инструмент. Кроме того, код ArcObjects или Python может исполняться в модели асинхронного выполнения сервисов геообработки, которая весьма удобна для долговременных процессов.
Выполнение геометрических вычислений
Сервисы геообработки удобны, однако так же, как не следует уходить с головой в разработку собственных решений ArcObjects, когда задачу можно легко решить с помощью геообработки, также разумно избегать использования геообработки при наличии уже готовых средств для этого. Узнайте, имеются ли сервисы геометрии на базе SOAP или REST, которые предлагают необходимые методы. Сервис геометрии может выполнять базовые ГИС-операции, такие как буферизация, определение пространственных отношений и измерений длин и площадей. Вызов серии методов в сервисе геометрии и сочетание их с возможностями запросов картографических сервисов и клиентской логикой может оказаться проще и быстрее, чем использование сервиса геообработки.