Примеры сервисов геообработки: Получение маршрутов

Доступно с лицензией Network Analyst.

ЭлементОписание

Цель

Генерирует маршруты между входными точками в зависимости от режима передвижения. В этом примере описано, как создать, опубликовать и использовать сервис геообработки, который выполняет сетевой анализ.

Сервис

TravelDirections (сервис геообработки)

Веб-инструмент

GetTravelDirections

Входные данные

  • Две или более оцифрованные точки, представляющие собой остановки (обязательно)
  • Режим передвижения для вычисления маршрутов (обязательно)
  • Значение даты-времени, обозначающее время начала маршрута (дополнительно)

Выходные данные

Класс объектов с направлениями движения и геометрией маршрута

Данные

Набор сетевых данных по улицам Сан-Диего, Калифорния, который находится в папке ToolData

Минимальные требования к ПО ArcGIS

  • ArcGIS Pro 3.4 или более новая версия с дополнительным модулем Network Analyst
  • ArcGIS Server 10.8.0 или более новая версия с дополнительным модулем Network Analyst

Примечание

Показывает основные шаги, необходимые для создания, публикации и использования веб-инструмента для создания маршрутов на основе режима передвижения. Вы можете использовать похожие шаги для создания веб-инструмента для других типов анализа транспортной сети, например, для генерации областей времени пути вокруг набора пунктов обслуживания.

Описание примера

Инструмент GetTravelDirections

Основное назначение инструмента GetTravelDirections - генерация маршрутов вокруг указанных пользователем точек на основе выбранного режима передвижения. Инструмент создает выходной класс объектов, который показывает наилучший маршрут между входными точками и текст инструкций для навигации по маршруту.

В таблице ниже показаны некоторые столбцы выходного класса объектов, созданного инструментом GetTravelDirections. Значения в столбце ElapsedTime представлены в единицах измерения атрибута временного импеданса режима передвижения, использованного для анализа (минуты, в данном случае), а значения в столбце DriveDistance - в единицах импеданса расстояния режима передвижения (мили, в этом примере).

Отдельные столбцы выходных данных инструмента GetTravelDirections

ТекстElapsedTimeDriveDistance

Начать в Stop A

0

0

Двигайтесь на север по BRITANNIA BLVD к OTAY MESA RD

1.04

0.64

Поверните направо на OTAY MESA RD

1.83

2.44

Продолжайте движение по прямой по CA-905

0.29

0.39

Продолжайте движение по прямой по OTAY MESA RD

0.04

0.06

На развилке поверните влево на OTAY MESA RD

0.16

0.1

Поверните налево

0.04

0,02

Продолжайте движение по прямой по CA-125

7.17

10.41

Завершение маршрута, Stop B находится справа

0

0

Папка данных

Данные для этого руководства можно загрузить с ArcGIS Online. Извлечь данные в C:\Routing\TravelDirections. В папке находится проект ArcGIS Pro с названием TravelDirections.aprx. В этом проекте набор инструментов TravelDirections.tbx содержит инструмент GetTravelDirections, который генерирует инструкции. Транспортная сеть с именем Streets_ND, используемая инструментом GetTravelDirections, хранится в файловой базе геоданных SanDiego.gdb в папке ToolData. Набор сетевых данных добавляется на карту проекта по умолчанию как слой Street Network. База геоданных schema.gdb содержит класс объектов Stops, на который ссылается файл слоя Stops.lyrx. Этот файл слоя используется для задания схемы и символов входных остановок, которые используются инструментом GetTravelDirections.

Инструмент геообработки для создания

Инструмент геообработки GetTravelDirections является примером инструмента-скрипта, который используется для обеспечения особых функций (в данном примере для генерации маршрутов). Запуск этого инструмента приводит к выполнению кода Python, который записан в файл и связан с инструментом-скриптом. В данном случае, код Python для инструмента GetTravelDirections записан в файл get_directions.py. Входные и выходные данные для инструмента-скрипта, известные как параметры инструмента, задаются с помощью диалогового окна Новый скрипт в ArcGIS Pro.

Задание параметров инструментов

На рисунке ниже показаны различные параметры, заданные для инструмента GetTravelDirections:

Параметры инструмента GetTravelDirections
Показаны параметры инструмента GetTravelDirections.

Инструмент использует тип данных Feature Set для параметра stops. Это дает возможность интерактивно задавать входные остановки. Схема и символы для набора объектов задаются из файла Stops.lyrx, который содержится в папке ToolData. Это позволяет принудительно ограничить задание входных остановок только точечной геометрией, а также позволяет заранее задать атрибутивные поля, поддерживаемые входными данными. Если вы не задаете схему, пользователи сервиса могут выбирать любой тип геометрии для набора объектов.

Примечание:

Задание схемы для набора объектов не предотвращает передачу неподдерживаемых полей пользователями. В вашем случае применения инструмента, можно создать список всех входных полей, указанных для сервиса, и выбрать, как инструмент должен обращаться с полями, которые не заданы в схеме. В большинстве случаев можно игнорировать поля, которые не заданы в схеме.

Инструмент использует тип данных Network Dataset Layer для параметра network_dataset. Это позволяет задавать набор сетевых данных, используя слой набора сетевых данных с карты. Также задать набор сетевых данных можно с типами данных Network Dataset и Network Data Source. Тип данных Network Data Source позволяет задавать набор сетевых данных с диска, слой набора сетевых данных из карты или URL-адрес ArcGIS Online или портала ArcGIS Enterprise с сервисами маршрутизации. В этом примере вы не будете использовать для анализа сервисы маршрутизации с портала, поэтому не следует выбирать тип данных Network Data Source. Тип данных Network Dataset позволяет задавать набор сетевых данных только с помощью пути к его расположению на диске. Хотя инструмент GetTravelDirections может работать с набором сетевых данных, указанным с помощью пути, этот метод не рекомендуется, т.к. Инструмент подключается к набору сетевых данных при каждом запросе, что замедляет запрос и увеличивает время отклика.

Подсказка:

Использование слоя набора сетевых данных повышает общую производительность работы инструмента, поскольку слой набора сетевых данных сохраняет подключение к набору сетевых данных открытым. В противном случае, если имеется ссылка на размещение набора сетевых данных на диске, подключение к набору сетевых данных осуществляется каждый раз при выполнении инструмента, что снижает производительность сервиса геообработки, созданного с помощью инструмента.

Инструмент использует тип данных Network Travel Mode для параметра travel_mode. Параметр network_dataset задается как зависимость для параметра network_travel_mode. Это заставляет инструмент считывать режимы передвижения, заданные в наборе сетевых данных и указывать их названия в списке возможных значений, поддерживающихся параметром travel_mode.

Инструмент использует тип данных Date для параметра start_time. Этот параметр является дополнительным и не имеет значения по умолчанию. В данном случае, если передается значение параметра start_time, оно используется для вычисления времени пути, в котором применяется скорость движения, основанная на историческом трафике, наблюдающемся для данного значения даты-времени. Если значение параметру start_time не передается, инструмент вычисляет время пути, основанное на фиксированной скорости движения.

Инструмент использует тип данных Feature Class для параметра output_directions. Параметр маркируется как выходной с помощью свойства Direction. Значение по умолчанию этого параметра указывает, что выходные данные записываются в класс объектов в рабочей области в памяти .

Подсказка:

Запись выходных данных в рабочую область в памяти, по сравнению с записью в файловую базу геоданных, повышает производительность сервиса геообработки, созданного инструментом-скриптом. В большинстве случаев, следует записывать выходные данные из инструментов геообработки, выполняющих сетевой анализ, в рабочую область в памяти. Выходные данные должны записываться в файловую базу геоданных, если вы знаете, что инструмент создает большой объем данных, которые не могут храниться в памяти сервера, на котором работает сервис геообработки.

Документирование инструмента

Документируя инструмент геообработки, вы также документируете результирующий сервис и его параметры, так как в процессе публикации сервиса текст копируется в описание элемента сервиса. Описание, или документирование, сервиса является обязательной процедурой, призванная помочь пользователям понять, как работать с сервисом и создавать маршруты. Инструмент GetTravelDirections, используемый в этом примере, имеет документацию; ее можно просмотреть, щелкнув инструмент геообработки правой кнопкой на панели Каталог и выбрав пункт Просмотр метаданных.

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

Когда в сервис геообработки отправляется запрос, инструмент выполняет файл скрипта Python, связанный с ним. Работа инструмента определяется этим файлом-скриптом. Во фрагменте кода ниже показан код Python, который определяет работу инструмента GetTravelDirections. Скрипт использует класс Route в модуле arcpy.nax для маршрутизации из точки в точку и генерации направлений.

Код Python для работы инструмента GetTravelDirections

Во фрагмент кода ниже включено содержание файла get_directions.py, находящегося в папке инструмента. Он показывает, как выполнять маршрутизацию из точки в точку и экспортировать направления в класс объектов. Основа выполнения любого типа сетевого анализа (включая маршрутизацию из точки в точку, показанную здесь) - это инициализация класса механизма решения, специфичного для данного анализа, задание настроек анализа, загрузка входных данных, проведение анализа и экспорт результатов. Комментарии в коде (строки, начинающиеся с #) дают дополнительную информацию о применении, включая подсказки по оптимизации производительности инструмента.

"""Generate travel directions based on a travel mode."""

import arcpy


def get_directions():
    """Generate travel directions based on a travel mode."""
    # Read inputs
    stops = arcpy.GetParameter(0)
    # Performance tip: The network data source should be read using the arcpy.GetParameterAsText()
    # method instead of the arcpy.GetParameter() method since GetParameterAsText provides
    # access to the network data source much faster
    network_data_source = arcpy.GetParameterAsText(1)
    travel_mode = arcpy.GetParameter(2)
    start_time = arcpy.GetParameter(3)
    output_directions = arcpy.GetParameterAsText(4)

    # Initialize Route solver and set analysis settings
    route_solver = arcpy.nax.Route(network_data_source)
    route_solver.travelMode = travel_mode
    route_solver.timeOfDay = start_time
    route_solver.returnDirections = True

    # Load inputs
    route_solver.load(arcpy.nax.RouteInputDataType.Stops, stops)

    # Solve. A network analyst license is required when solving
    arcpy.CheckOutExtension("network")
    result = route_solver.solve()

    # Print all the warning and error messages in case the solve is not successful
    if not result.solveSucceeded:
        arcpy.AddMessage("Solve failed")
        warning_msgs = result.solverMessages(arcpy.nax.MessageSeverity.Warning)
        error_msgs = result.solverMessages(arcpy.nax.MessageSeverity.Error)
        for msg in warning_msgs:
            arcpy.AddWarning(msg[-1])
        for msg in error_msgs:
            arcpy.AddError(msg[-1])
        raise SystemExit(1)

    # Export the directions
    result.export(arcpy.nax.RouteOutputDataType.Directions, output_directions)


if __name__ == "__main__":
    get_directions()
Примечание:

Во фрагменте кода выше показано, как выполнить маршрутизацию из точки в точку, используя модуль arcpy.nax. Однако, образец, показанный в коде выше, может быть применен к любым другим типам анализа, использующим модуль arcpy.nax.

Публикация инструмента как веб-инструмента

Чтобы создать сервис из инструмента GetTravelDirections, необходимо опубликовать его как веб-инструмент. Для этого сначала необходимо запустить инструмент и опубликовать результаты его работы как веб-инструмент, используя панель Опубликовать как веб-инструмент в ArcGIS Pro.

Запуск инструмента

Для запуска инструмента GetTravelDirections выполните следующие шаги:

  1. Откройте проект TravelDirections в ArcGIS Pro.
  2. В наборе инструментов TravelDirections откройте инструмент геообработки GetTravelDirections.
  3. Запустите инструмент GetTravelDirections.
    1. Для параметра Остановки создайте как минимум две остановки на карте в области Сан-Диего.
    2. Для параметра Набор сетевых данных выберите слой Street Network, добавленный на карту.

      Выбор слоя Street Network, без задания набора сетевых данных с диска, обеспечивает наилучшую производительность сервиса геообработки, созданного из инструмента.

    3. Для параметра Режим передвижения выберите режим из списка, например, Время пути.

      В списке параметра Режим передвижения перечисляются режимы из набора сетевых данных, поскольку параметр Набор сетевых данных был задан как зависимость при задании параметра Режим передвижения.

    4. Не указывайте значения для параметра Время начала.

      Задание значения для параметра Время начала приводит к тому, что сервис, созданный из инструмента, будет использовать значение даты-времени как время начала маршрута по умолчанию, что может быть нежелательным для пользователей сервиса, т.к. скорее всего они будут пропускать значение даты-времени.

    5. Оставьте заданное по умолчанию значение для параметра Выходные направления.

      Значение по умолчанию для параметра Выходные направления - это запись выходных данных инструмента в рабочую область памяти, что повышает производительность сервиса.

    6. Щелкните кнопку Запустить, чтобы запустить инструмент.

Регистрация папки, содержащей набор сетевых данных, как хранилище данных

Набор сетевых данных, используемый инструментом GetTravelDirections должен быть доступен для всех компьютеров, участвующих в сайте ArcGIS Server. Это можно сделать одним из следующих способов:

  • Разрешить копировать набор сетевых данных при публикации в местоположение сайта ArcGIS Server, доступное для всех компьютеров.
  • Скопировать набор сетевых данных на все компьютеры сайта в заданное местоположение и позволить сервису ссылаться на данные из этого местоположения.

Рекомендуется вручную скопировать набор сетевых данных на все компьютеры сайта в заданное местоположение (например, D:\RoutingData). Хотя этот вариант более трудоемкий, он более эффективный, т.к. обеспечивает лучшую производительность сервиса.

Выберите местоположение для данных, которые являются локальными для каждого компьютера, вместо сетевого хранилища, доступного для всех компьютеров. Хранение набора сетевых данных в локальной папке, по сравнению с общедоступным хранилищем, повышает производительность сервиса маршрутизации. Чтобы обновить набор сетевых данных - например, если вы получаете новую версию данных - можно остановить сервис маршрутизации, заменить файловую базу геоданных, содержащую набор сетевых данных на всех компьютерах, и перезапустить сервис.

При выборе опции копирования данных, в процессе публикации данные копируются в общедоступное для всех компьютеров хранилище (если ваш сайт ArcGIS Server состоит из нескольких компьютеров). Сервис маршрутизации считывает набор сетевых данных из общедоступного хранилища, что снижает его производительность. Местоположение, используемое ArcGIS Server для хранения этих данных рассматривается как внутреннее сайта ArcGIS Server и управляется ArcGIS Server. Для обновления данных необходимо удалить и снова создать сервис маршрутизации, что может привести к ошибкам, поскольку необходимо заново опубликовать сервис, используя те же самые параметры, что и раньше. Вместо этого, если сервис маршрутизации ссылается на данные, можно остановить и запустить сервис, не создавая его заново.

Чтобы зарегистрировать папку, содержащую набор сетевых данных как хранилище данных на сервере, интегрированном с порталом, выполните следующие шаги:

  1. На ленте щёлкните вкладку Общий доступ. В группе Управление нажмите Хранилища данных Хранилища данных.

    Откроется панель Управление зарегистрированными хранилищами данных.

  2. В верхней части панели убедитесь, что ниспадающий список установлен на Элементы портала. Щелкните кнопку Добавить Добавить элемент хранилища данных на портал и щелкните Папка Папка.
  3. В диалоговом окне Добавить хранилище данных введите заголовок, например, RoutingData и теги.

    Это необходимые метаданных для элемента портала хранилища данных.

  4. При необходимости укажите папку для хранения элемента хранилища данных на портале.

    По умолчанию элемент будет сохранен на корневом уровне ресурсов. Вы можете выбрать существующую папку или создать папку с помощью раскрывающегося меню. Вы можете, кроме того, перейти к папке.

  5. Чтобы задать папку публикации, щелкните кнопку Обзор Обзор, выберите папку, содержащую набор сетевых данных C:\Routing\TravelDirections\ToolData, и щелкните OK.

    Папка издателя - это папка, содержащая те данные, которые вы хотите зарегистрировать на сервере.

  6. Если издатель и сервер работают с разными папками, снимите отметку у опции Аналогично пути к папке издателя и введите путь или перейдите к папке, к которой у сервера есть доступ.
  7. Отметьте тот сервер, к которому вы хотите добавить хранилище данных. Вы можете выбрать более одного сервера.
  8. При необходимости нажмите Проверить Проверить, чтобы убедиться, что сервер имеет доступ к папке сервера.

    Если папка доступна, то подтверждение Корректно появится в столбце Статус рядом с именем сервера. В противном случае появится ошибка Элемент данных недоступен. Подключение проверяется автоматически при создании хранилища данных

  9. В разделе Уровень доступа укажите, для кого будет доступно хранилище данных.
    • Для всех (общий) – эта опция делает ваше хранилище данных общедоступным. Любой сможет получить доступ и видеть сцену.
    • Моя организация – эта опция позволяет предоставить доступ к вашему хранилищу данных всем авторизованным пользователям организации.
    • Группы – можно открыть общий доступ к хранилищу данных для участников групп, к которым вы принадлежите.

    Не включайте ни одну из опций, чтобы ограничить доступ только владельцем проекта. Доступ к элементу также могут получить участники организации с правами на просмотр ресурсов, принадлежащих другим участникам.

  10. Нажмите Создать.

    Хранилище данных создано и появляется на панели Управление зарегистрированными хранилищами данных.

Публикация инструмента как веб-инструмента

Для создания сервиса геообработки из инструмента GetTravelDirections, выполните следующие шаги:

  1. Войдите на портал ArcGIS Enterprise как пользователь, имеющий права на публикацию веб-инструментов.

    Для публикации веб-инструментов требуются административные права или права издателя веб-инструмента.

  2. Щелкните кнопку История в группе Геообработка на вкладке Анализ на ленте, чтобы открыть панель История.
  3. Щелкните GetTravelDirections правой кнопкой мыши и выберите Опубликовать как > Веб-инструмент.
  4. Настройте параметры сервиса, такие как имя и режим выполнения, на панели Опубликовать как веб-инструмент.
    1. В Описании элемента введите TravelDirections в поле Имя.
    2. В разделе Данные, выберите Ссылаться на зарегистрированные данные.
    3. В разделе Местоположение дополнительно укажите или создайте папку для хранения элемента веб-инструмента на портале ArcGIS Enterprise.

      Если вы не укажете Папку портала, веб-инструмент будет сохранен в корневой директории ресурсов.

    4. В разделе Местоположение, выберите интегрированный сервер, на котором вы хотите опубликовать веб-инструмент и папку на интегрированном сервере, в которой будет размещен сервис маршрутизации.

      Если вы используете базовое развертывание ArcGIS Enterprise, в списке Сервер и папка находится только один сервер (хост-сервер). Если вы не указываете имя папки в разделе Сервер и папка, сервис маршрутизации будет создан в корневом каталоге интегрированного сервера.

    5. В разделе Уровень доступа укажите, для кого будет доступен веб-инструмент.

      По умолчанию, веб-инструмент доступен только для пользователя, который опубликовал его. Веб-инструмент может быть опубликован публично, т.ч. любой пользователь сможет запускать его, для всех аутентифицированных пользователей организации, или для определенных групп, к которым вы принадлежите, и их участников.

    6. Щелкните вкладку Конфигурация на панели Опубликовать как веб-инструмент.
    7. В разделе Функции выключите опцию Выгрузки.

      Эта функция управляет возможностью клиента выгружать файл на ваш сервер, чтобы использовать его как входные данные для веб-инструмента. Сервис маршрутизации в данном примере не нуждается в поддержке выгрузки файлов.

    8. В разделе Режим выполнения выберите Синхронный.

      Сервис маршрутизации TravelDirections выполняется быстро (обычно менее чем за секунду). Выберите режим Синхронный для наилучшей производительности. Однако если ваш сервис маршрутизации выполняется долго (например, при вычислении нескольких длинных маршрутов между двумя точками), выберите Асинхронный режим, т.к. он лучше подходит для длительных запросов. Использование асинхронного режима для сервисов, которые выполняются быстро, не рекомендуется, т.к. при этом добавляются фиксированные накладные расходы. Для длительных запросов, фиксированные накладные расходы незначительны по сравнению с общим временем выполнения сервиса.

    9. В разделе Свойства выберите Предупреждение для параметра Уровень сообщений

      Выбор уровня сообщений сервиса Предупреждение гарантирует, что все сообщения об ошибках и предупреждения, издаваемые сервисом, возвращаются к клиенту. Это может быть удобно для клиентов при определении ошибок сервиса, например, почему сервис не может сгенерировать направления.

    10. В Свойствах используйте значение по умолчанию для параметра Максимальное число записей, возвращаемых сервером.

      Сервис в этом примере, в большинстве случаев, не должен производить более 1000 выходных направлений. Если сервис может производить более 1000 объектов, сервер возвращает клиенту только первую 1000 объектов, а поднабор объектов может быть бесполезен для клиента. Чтобы избежать этого, установите более высокое значение для опции Максимальное число записей, возвращаемых сервером. Для других сервисов маршрутизации можно выбрать более высокое значение данной опции. Например, если у вас имеется сервис, который часто вычисляет матрицу стоимости Источник-Назначение между 500 источниками и 500 назначениями, сервис может создавать более 250000 объектов. В таком случае необходимо установить значение 250000 или выше.

    11. Щелкните вкладку Ресурсы на панели Опубликовать как веб-инструмент.
    12. Щелкните кнопку Настроить свойства инструмента справа от инструмента GetTravelDirections в разделе Мои ресурсы > TravelDirections, чтобы настроить свойства веб-инструмента GetTravelDirections.
    13. Разверните категорию параметров Набор сетевых данных и выберите Постоянное значение для опции Режим ввода.

      Клиентам, использующим сервис TravelDirections, не нужно указывать набор сетевых данных, использующийся для генерации маршрутов, поскольку сервис всегда использует один и тот же набор сетевых данных. Выбор постоянного режима ввода гарантирует, что параметр не будет доступен в готовом сервисе, созданном инструментом.

    14. Щелкните кнопку возврата в верхнем левом углу страницы GetTravelDirections, чтобы вернуться на страницу Опубликовать как веб-инструмент.
  5. Щелкните кнопку Анализ на панели Опубликовать как веб-инструмент и убедитесь, что сообщения об ошибках и предупреждения отсутствуют.

    Анализатор проверяет наличие ошибок, которые могут помешать успешной публикации инструмента как сервиса. Если ошибки имеются, их необходимо исправить перед публикацией инструмента. Если имеются только предупреждения, можно продолжить публикацию, если в вашем сценарии предупреждения возможны. Например, если вы копируете данные, вместо использования ссылок на зарегистрированные данные, появится сообщение, что данные будут скопированы на сервер. В данном случае это ожидаемое сообщение, его можно игнорировать. Можно щелкнуть сообщение об ошибке или предупреждение правой кнопкой мыши, чтобы открыть раздел справки с описанием способа исправления данной проблемы.

  6. Щелкните кнопку Опубликовать на панели Опубликовать как веб-инструмент, чтобы опубликовать инструмент как сервис.

Использование веб-инструмента

Вы можете открывать веб-инструменты в разделе Портал панели Каталог в ArcGIS Pro. Помимо запуска инструмента в ArcGIS Pro, сервис геообработки можно использовать в скрипте Python или в веб-приложении.

Ниже описаны шаги для запуска инструмента GetTravelDirections с помощью ArcGIS Pro как клиентского приложения:

  1. На панели Каталог щелкните Портал > Весь портал.
  2. Введите TravelDirections в поле Поиск.
  3. Дважды щелкните набор инструментов TravelDirections и откройте инструмент GetTravelDirections.
  4. Запустите веб-инструмент GetTravelDirections.

    Параметр веб-инструмента Имя выходного класса объектов автоматически добавляется средой геообработки, т.к. инструмент GetTravelDirections создает выходной класс объектов. Этот параметр позволяет записать результаты как сервис объектов, хранящийся на корпоративном портале. Однако использование этого параметра имеет некорые ограничения.

    Внимание:

    Если вы задаете значение Имя выходного класса объектов, веб-инструмент GetTravelDirections возвращает ошибку, т.к. создание результатов в виде сервиса объектов не поддерживается сервисом, опубликованным с использованием синхронного режима выполнения, такого как сервис TravelDirections в этом примере.