FindRoutes (Маршрут)
Краткая информация
FindRoutes определяет кратчайшие пути для посещения остановок и возвращает путевые листы, сведения о посещенных остановках и маршруты, включая время в пути и расстояние.
Инструмент может находить маршруты по нескольким входным точкам в заданной последовательности, или в последовательности, позволяющий сократить длину маршрута. Вы можете группировать входные остановки в различные маршруты с помощью поля RouteName, для каждой группы остановок инструмент создаст свой маршрут, что позволяет одновременно создавать маршруты для нескольких транспортных средств.
Рисунок
Использование
-
Инструмент находит кратчайшие маршруты на основе времени в пути, если для параметра Единицы измерения (Measurement Units) используются единицы времени, и на основе расстояния, если используются единицы измерения расстояний.
Для успешной работы инструмента необходимо указать как минимум две остановки. Вы можете загрузить до 10,000 остановок и присвоить до 150 остановок каждому маршруту.
Вы можете добавить до 250 точечных барьеров. Вы можете добавить любое количество линейных или полигональных барьеров, но линейные барьеры не могут пересекать более 500 объектов-улиц, а полигональные – более 2,000 объектов.
Вы можете использовать иерархию дорог, что позволит быстрее получить результаты, чем при вычислении точных маршрутов, но полученное решение может быть менее оптимальным.
Независимо от того, включен ли параметр Использовать иерархию (Use Hierarchy) (True), иерархия всегда используется, если прямолинейное расстояние между любой парой остановок составляет более 50 миль (80.46 км).
Если расстояние между входной точкой и ближайшей проезжей улицей больше 12.42 миль (20 км), точка исключается из анализа.
Синтаксис
Параметр | Объяснение | Тип данных |
Stops |
Задайте две или более остановок для определения маршрута между ними. Вы можете добавить до 10,000 остановок и присвоить до 150 остановок каждому маршруту. (Распределяйте остановки по маршрутам с помощью атрибута RouteName.) При указании остановок вы можете задать с помощью атрибутов свойства каждой из них, такие как имя или время обслуживания. Для задания свойств остановок можно использовать следующие атрибуты: Имя (Name) – название остановки. Имя используется в путевом листе. Если имя не указано, в выходных остановках, маршрутах и путевом листе автоматически создается уникальное имя с префиксом Location. RouteName – имя маршрута, к которому относится остановка. Присвоение различным остановкам одного и того же имени маршрута приводит к группировке остановок, т.е. все они будут включены в один маршрут. Вы можете создавать несколько маршрутов за один раз, присваивая уникальные имена маршрутов различным группам остановок. С помощью этого инструмента вы можете группировать до 150 остановок на один маршрут. Последовательность (Sequence) – выходные маршруты пройдут по остановкам в том порядке, который задан этим атрибутом. В пределах группы остановок с одинаковым значением RouteName порядковый номер должен быть больше 0, но не должен превышать максимальное число остановок. Кроме того, порядковый номер не должен дублироваться. Если параметр Изменить порядок остановок для нахождения оптимального маршрута (Reorder Stops To Find Optimal Routes) включен (True), все значения последовательности, кроме первого и последнего, игнорируются, поэтому инструмент может определить последовательность, минимизирующую общую протяженность маршрута. (Параметры Сохранить порядок остановок (Preserve Ordering of Stops) и Возврат в начало (Return to Start) определяют, будут ли игнорироваться первое и последнее значения последовательности.) AdditionalTime – время, затраченное на остановке, которое добавляется к общему времени маршрута. Единицы измерения для этого атрибута задаются параметром Единицы измерения (Measurement Units). Значение атрибута включается в анализ, только когда единицами измерения являются единицы времени. По умолчанию значение равно 0. Вы можете учитывать дополнительное время, необходимое для завершения задачи на остановке например, починка прибора, вручение посылки или проверка разрешений. AdditionalDistance – дополнительное расстояние, пройденное на остановке, которое добавляется к общей протяженности маршрута. Единицы измерения для этого атрибута задаются параметром Единицы измерения (Measurement Units). Значение атрибута включается в анализ, только когда единицами измерения являются единицы расстояния. По умолчанию значение равно 0. Обычно расположение остановки, например, Дом, находится не на самой улице, а на некотором удалении от проезжей части. Значение этого атрибута может использоваться для учета расстояния между действительным местоположением остановки и ее положением на улице, если имеет смысл включать это расстояние в общую протяженность пути. TimeWindowStart – самое раннее время посещения остановки. Убедитесь, что значение имеет формат даты-времени, например, 8/12/2015 12:15 PM. Задавая начало и окончание временного окна посещения остановки, можно указать, когда именно маршрут достигнет этой остановки. Если параметр Использовать временные окна (Use Time Windows) включен и для Единиц измерения (Measurement Units) выбрано время, инструмент попытается найти решение, минимизирующее расстояние маршрута и позволяющее посетить остановку в указанное временное окно. При решении задачи, которая охватывает несколько часовых поясов, значения временного окна каждой остановки соответствуют ее часовому поясу. Поле может содержать нулевое значение (null), это означает, что маршрут должен достичь остановки в любое время, до заданного параметром TimeWindowEnd. Если параметр TimeWindowEnd также содержит значение null, маршрут может посетить эту остановку в любое время. TimeWindowEnd – самое позднее время посещения остановки. Убедитесь, что значение имеет формат даты-времени, например, 8/12/2015 12:15 PM. Задавая начало и окончание временного окна посещения остановки, можно указать, когда именно маршрут достигнет этой остановки. Если параметр Использовать временные окна (Use Time Windows) включен и для Единиц измерения (Measurement Units) выбрано время, инструмент попытается найти решение, минимизирующее расстояние маршрута и позволяющее посетить остановку в указанное временное окно. При решении задачи, которая охватывает несколько часовых поясов, значения временного окна каждой остановки соответствуют ее часовому поясу. Поле может содержать нулевое значение (null), это означает, что маршрут должен достичь остановки в любое время, после заданного параметром TimeWindowStart. Если параметр TimeWindowStart также содержит значение null, маршрут может посетить эту остановку в любое время. CurbApproach – указывает направление, в котором транспортное средство может подъехать или отъехать от остановки. Значение поля указывается одним из следующих целых чисел (используйте числовой код, а не имя в скобках):
Свойство CurbApproach было разработано для работы с обоими типами национальных стандартов дорожного движения: правостороннего (США) и левостороннего (Великобритания). Для начала рассмотрим случай, когда остановка располагается с левой стороны транспортного средства. Это условие должно обязательно выполняться в независимости от того движется транспорт по левой или по правой полосе дороги. Вы можете выбрать, с какой из двух сторон подъехать к остановке, независимо от национального стандарта дорожного движения, т.е. где будет находится точка заказа – справа или слева от транспортного средства. Например, если необходимо подходить к остановке так, чтобы отсутствовала полоса движения между транспортным средством и остановкой, то в США необходимо выбрать правую сторону транспорта (1), а в Великобритании левую сторону (2). | Feature Set |
Measurement_Units | Укажите единицы, которые должны использоваться для измерения и указания общей продолжительности или протяженности пути для выходных маршрутов. Единицы, выбранные для этого параметра, определяют, будет ли инструмент измерять протяженность или продолжительность пути для нахождения наилучшего маршрута. Выберите единицы времени для минимизации времени в пути. Для минимизации протяженности пути выберите единицы расстояния. Выбранные вами единицы инструмент будет использовать также для указания общей продолжительности или протяженности пути в результатах. Можно выбрать следующие варианты:
| String |
Analysis_Region (дополнительно) |
Укажите регион, в котором выполняется анализ. Если значение этого параметра не указано, инструмент автоматически вычислит имя региона на основе местоположения входных точек. Задание имени региона рекомендуется для увеличения скорости работы инструмента. Чтобы задать регион используйте одно из следующих значений:
| String |
Reorder_Stops_to_Find_Optimal_Routes (дополнительно) |
Позволяет выбрать посещение остановок в указанном вами порядке или в порядке, определяемом инструментом для минимизации общей протяженности маршрута.
Определение оптимального порядка остановок и поиск наилучшего маршрута часто называется задачей по поиску маршрута коммивояжера (TSP). | Boolean |
Preserve_Terminal_Stops (дополнительно) |
Когда параметр Изменить порядок остановок для нахождения оптимальных маршрутов (Reorder Stops to Find Optimal Routes) включен (или True), вы можете сохранить последовательность первой и последней остановок и позволить инструменту изменить порядок остальных. Первая и последняя остановки определяются по атрибутивным значениям Sequence или, если значения Sequence равны null, по значениям Object ID.
Параметр Сохранить конечные остановки (Preserve Terminal Stops) игнорируется при отключении (или False) параметра Изменить порядок остановок для нахождения оптимальных маршрутов (Reorder Stops to Find Optimal Routes). | String |
Return_to_Start (дополнительно) |
Выберите, должен ли маршрут начинаться и заканчиваться в одном и том же месте. С помощью этой опции можно избежать дублирования первой остановки для ее использования также в качестве конечной. Начало маршрута является остановкой с наименьшим значением атрибута Sequence. Если значения атрибута Sequence являются нулевыми, это будет объект с наименьшим значением Object ID.
| Boolean |
Use_Time_Windows (дополнительно) |
Включите эту опцию (или установите значение True), если какая-либо из остановок имеет временное окно, задающее время прибытия. Вы можете добавить временные окна к входным остановкам, введя значения времени в атрибуты TimeWindowStart и TimeWindowEnd.
При включении опции Использовать временные окна (Use Time Windows) (или True), инструмент будет работать немного дольше, даже если ни одна из остановок не имеет временного окна, поэтому эту опцию по возможности рекомендуется отключать (задавать False). | Boolean |
Time_of_Day (дополнительно) |
Указывает время и дату начала маршрутов. Если вы указываете в качестве значения этого параметра текущие дату и время, при нахождении наилучших маршрутов инструмент будет использовать текущие условия дорожного движения, и общее время пути будет учитывать условия дорожного движения. Указание времени суток позволяет создавать более точные маршруты и точнее оценивать время в пути, поскольку будут учтены условия дорожного движения в конкретный день и час. Параметр Часовой пояс для времени суток (Time Zone for Time of Day) определяет, как будут указываться время и дата, в UTC или в часовом поясе, в котором находится остановка. Инструмент игнорирует этот параметр, если в Единицах измерения (Measurement Units) не выбрано время. | Date |
Time_Zone_for_Time_of_Day |
Указывает часовой пояс параметра Время суток (Time of Day).
| String |
UTurn_at_Junctions (дополнительно) |
Правила разворота на соединениях. При разрешении U-образных разворотов неявно предполагается, что механизм расчета позволяет разворот на соединении и продолжение движения по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Для соответствия, параметр правил разворотов в неявном виде указывает количество ребер, или улиц, участвующих в соединении, что представляет валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.
| String |
Point_Barriers (дополнительно) |
Укажите одну или несколько точек, действующих в качестве временных ограничений или представляющих дополнительное время или расстояние, которые могут потребоваться для передвижения по улицам. Например, точечный барьер может быть использован для обозначения упавшего дерева или для ввода времени ожидания на железнодорожном переезде. Инструмент может накладывать до 250 ограничений, точек, добавленных в качестве барьеров. При указании точечных барьеров вы можете задать с помощью атрибутов свойства каждого из них, такие как тип барьера. Для задания свойств точечных барьеров можно использовать следующие атрибуты: Name: имя барьера. BarrierType: указывает, ограничивает ли точечный барьер перемещение полностью или добавляет время или расстояние при его пересечении. Значение этого атрибута указывается одним из следующих целых чисел (используйте числовой код, а не имя в скобках):
Additional_Time: указывает, какое время пути добавляется при прохождении барьера. Это поле действительно только для барьеров с дополнительной стоимостью, и только если используются единицы измерения времени. Значение этого поля должно быть больше или равно нулю, а его единицы измерения соответствуют заданным в параметре Measurement Units. Additional_Distance: указывает, какое расстояние добавляется при прохождении барьера. Это поле действительно только для барьеров с дополнительной стоимостью, и только если используются единицы измерения расстояния. Значение этого поля должно быть больше или равно нулю, а его единицы измерения соответствуют заданным в параметре Measurement Units. | Feature Set |
Line_Barriers (дополнительно) |
Укажите одну или несколько линий, которые запрещают передвижение там, где они пересекают улицы. Например, при помощи линейного барьера можно смоделировать маршрут парада или марша протеста, которые препятсвуют движению по нескольким участкам улиц. Линейный барьер может также быстро запретить пересечение нескольких дорог, отделяя, таким образом, возможный маршрут от нежелательных участков уличной сети. Инструмент имеет ограничение числа улиц, которые можно запретить с помощью параметра Line Barriers. Хотя лимита на число линий, которые можно использовать как барьеры, нет, общее число улиц, пересекаемых всеми линиями, не должно превышать 500. При указании линейных барьеров вы можете задать с помощью атрибута свойство имени для каждого из них. Name: имя барьера. | Feature Set |
Polygon_Barriers (дополнительно) |
Укажите полигоны, которые либо полностью запрещают передвижение, либо пропорционально масштабируют время или расстояние, необходимое для передвижения по улицам, пересекаемым полигоном. Сервис имеет ограничение числа улиц, которые можно запретить с помощью параметра Polygon Barriers. Хотя лимита на число полигонов, которые можно использовать как барьеры, нет, общее число улиц, пересекаемых всеми полигонами, не должно превышать 2,000. При указании полигональных барьеров вы можете задать с помощью атрибутов свойства каждого из них, такие как тип барьера. Для задания свойств полигональных барьеров можно использовать следующие атрибуты: Name: имя барьера. BarrierType: указывает, ограничивает ли барьер перемещение полностью или масштабирует время или расстояние при прохождении по нему. Значение поля указывается одним из следующих целых чисел (используйте числовой код, а не имя в скобках):
ScaledTimeFactor: это коэффициент, на который умножается время езды по улицам, пересекающимся с барьером. Это поле действительно только для барьеров с масштабированной стоимостью, и только если используются единицы измерения времени. Значение поля должно быть больше нуля. ScaledDistanceFactor: это коэффициент, на который умножается длина пути по улицам, пересеченным барьером. Этот атрибут действителен только для барьеров с масштабированной стоимостью, и только если используются единицы измерения расстояния. Значение атрибута должно быть больше нуля. | Feature Set |
Use_Hierarchy (дополнительно) | Укажите, должна ли использоваться иерархия при нахождении кратчайшего пути между остановками.
Инструмент автоматически начинает использовать иерархию, если расстояние по прямой между пунктами обслуживания и точками спроса превышает 50 миль (80.46 км), даже если в этом параметре указано иное. | Boolean |
Restrictions (дополнительно) |
Укажите, какие ограничения должны учитываться инструментом при нахождении наилучшего маршрута. Ограничение представляет собой предпочтение или требование во время поездки. В большинстве случаев, ограничения приводят к запрету проезда по дорогам, но они также могут указывать, избегать дорогу или наоборот, предпочесть ее. Например, использование ограничения Избегать платных дорог приведет к тому, что платные дороги будут использоваться, только если это абсолютно необходимо для посещения остановки. Ограничение по высоте (Height Restriction) позволяет прокладывать маршрут в обход всех объектов с пролетами, меньшими, чем высота транспортного средства. Если транспортное средство перевозит коррозионные вещества, применение ограничения Any Hazmat Prohibited (Вредные вещества запрещены) предотвратит перевозку таких материалов по тем дорогам, по которым это запрещено. Ниже приводится список доступных ограничений и их краткое описание. Примечание: Использование некоторых ограничений требует ввода дополнительных значений. Это значение должно быть связано с именем ограничения и определенным параметром, предназначенным для его работы. Вы можете идентифицировать такие ограничения по их названиям, отображающимся под столбцом AttributeName в параметре Attribute Parameter Values. Поле ParameterValue следует использовать в параметре Attribute Parameter Values для правильного использования ограничения при поиске доступных дорог. Примечание: Некоторые ограничения поддерживаются только в определенных странах; их доступность по регионам указана в списке ниже. Кроме доступности ограничений по регионам, можно проверить его доступность в определенной стране по таблице в разделе Список стран на веб-странице Покрытие данными для сервисов сетевого анализа. Если для страны указано значение Yes в столбце Logistics Attribute, ограничение в этой стране поддерживается и доступно для региона. Если вы задаете имена ограничений, которые недоступны в стране, где находятся инциденты, сервис игнорирует их. Сервис также игнорирует ограничения чье значение параметра Использование ограничений находится в пределах от 0 до 1 (см. свойство Значения параметра атрибутов). Он запрещает все ограничения, чье значение параметра Использование ограничения больше 0. Инструмент поддерживает следующие ограничения:
| String |
Attribute_Parameter_Values (дополнительно) | Укажите дополнительные значения, требуемые для некоторых ограничений, такие как вес транспортного средства для ограничения по весу (Weight Restriction). Вы можете использовать этот параметр, чтобы указать, является ли движение по дорогам, для которых установлено это ограничение, запрещенным, нежелательным или предпочтительным. Если ограничение означает нежелательность или предпочтительность использования дороги, вы можете дополнительно указать с помощью этого параметра степень нежелательности или предпочтительности. Например, вы можете установить для платных дорог правило никогда их не использовать, по возможности избегать или наоборот, отдавать им предпочтение. Если вы задаете параметр Значения атрибутивного параметра (Attribute Parameter Values) из класса пространственных объектов, имена полей класса пространственных объектов должны соответствовать следующим: AttributeName: указывает имя ограничения. ParameterName: указывает имя параметра, связанного с ограничением. В зависимости от целей ограничения, оно может иметь одно или несколько значений поля ParameterName. ParameterValue: значение для ParameterName, используемое инструментом при оценке ограничения. Параметр Значения атрибутивного параметра (Attribute Parameter Values) зависит от параметра Ограничения (Restrictions). Поле ParameterValue применяется, только если значением параметра Ограничения (Restrictions) является имя ограничения. В параметре Значения атрибутивного параметра (Attribute Parameter Values) каждое ограничение (AttributeName) содержит значение поля ParameterName, Использование ограничения (Restriction Usage), определяющее запрет, нежелательность или предпочтительность использования дорог, для которых установлено ограничение, а также степень нежелательности или предпочтительности использования дорог. Поле Использование ограничения (Restriction Usage) ParameterName может иметь одно из следующих строковых значений или эквивалентных числовых значений, указанных в скобках:
Как правило для поля Использование ограничения (Restriction Usage) используется значение по умолчанию, PROHIBITED, если ограничение связано с характеристиками транспортного средства, например его высотой. Однако в некоторых случаях значение поля Использование ограничения (Restriction Usage) будет зависеть от ваших предпочтений при выборе маршрута. Например, для ограничения Избегать платных дорог (Avoid Toll Roads) параметр Использование ограничения (Restriction Usage) имеет по умолчанию значение AVOID_MEDIUM. Это означает, что, при наличии данного ограничения инструмент будет по возможности избегать использования платных дорог при построении маршрута. Значение AVOID_MEDIUM также указывает, насколько важно избегать использования платных дорог при поиске лучшего маршрута: это ограничение имеет средний приоритет. При выборе AVOID_LOW исключение платных дорог из маршрута будет иметь меньшее значение, а при выборе AVOID_HIGH – большее, поэтому сервис будет создавать более длинные маршруты, чтобы по возможности избежать использования платных дорог. При выборе PROHIBITED использование платных дорог будет полностью запрещено, и сервис не сможет включать их в маршрут. Следует помнить, что в некоторых случаях целью анализа является прокладка маршрута в обход платных дорог, а в других случаях проезд по платным дорогам может быть предпочтителен, поскольку время, потраченное на движение, более ценно, чем деньги, уплаченные за проезд. В последнем случае для параметра Использование ограничения (Restriction Usage) следует выбрать значения PREFER_LOW, PREFER_MEDIUM или PREFER_HIGH. Чем выше предпочтительность, тем в большей степени маршрут будет проходить по дорогам с этим ограничением. | Record Set |
Route_Shape (дополнительно) |
Укажите тип объектов маршрута, получаемых на выходе инструмента. Параметр может быть задан с помощью одного из следующих значений:
Когда параметр Форма маршрута (Route Shape) имеет значение Истинная форма (True Shape), генерализацией формы маршрута можно дополнительно управлять, выбирая значение параметра Допуск упрощения линии маршрута (Route Line Simplification Tolerance). Независимо от выбранного значения параметра Геометрия маршрута (Route Shape), лучший маршрут определяется всегда на основе минимальной продолжительности или протяженности пути, а не на основе расстояния по прямой между остановками. Это значит, что изменяются только формы маршрута, а не исходные улицы, которые перебирает инструмент при нахождении маршрута. | |
Route_Line_Simplification_Tolerance (дополнительно) |
Определяет степень упрощения геометрии выходных линий маршрутов, направлений и маршрутных листов. Инструмент игнорирует этот параметр, если значение параметра Форма маршрута (Route Shape) отличается от Истинная форма (True Shape). При упрощении сохраняются важнейшие точки на маршруте, например, повороты и перекрестки, составляющую основную форму маршрута, а остальные точки удаляются. Указываемое вами расстояние упрощения является максимальным допустимым смещением упрощенной линии от исходной. Упрощение линии сокращает количество вершин в геометрии маршрута. Это ускоряет работу инструмента. | Linear unit |
Populate_Route_Edges (дополнительно) |
Укажите, должен ли инструмент создавать путевой лист для каждого маршрута. Путевой лист представляет собой отдельные объекты-улицы или другие объекты, по которым проходит маршрут. Выходной слой Route Edges обычно используется для просмотра улиц, наиболее и наименее посещаемых данным маршрутом.
| |
Populate_Directions (дополнительно) |
Укажите, должен ли инструмент создавать путевой лист для каждого маршрута.
| Boolean |
Directions_Language (дополнительно) |
Укажите язык, на котором должен создаваться путевой лист. Этот параметр используется, только если параметр Заполнить путевой лист (Populate Directions) отмечен или имеет значение Истина (True). Значениями параметра могут быть следующие двух- или пятисимвольные коды языка:
Если указан неподдерживаемый код языка, инструмент возвращает путевой лист на английском языке, являющемся языком по умолчанию. | String |
Directions_Distance_Units (дополнительно) |
Укажите единицы измерения для отображения расстояний в путевом листе. Этот параметр используется, только если параметр Заполнить путевой лист (Populate Directions) отмечен или имеет значение Истина (True).
| String |
Directions_Style_Name (дополнительно) |
Укажите имя стиля форматирования для путевого листа. Этот параметр используется, только если параметр Заполнить путевой лист (Populate Directions) отмечен или имеет значение Истина (True). Параметр может принимать следующие значения:
| String |
Пример кода
В следующем скрипте Python показано, как использовать инструмент FindRoutes в скрипте.
import arcpy
import time
import datetime
import sys
username = "<your user name>"
password = "<your password>"
FindRoute_service = "http://logistics.arcgis.com/arcgis/services;World/Route;{0};{1}".format(username, password)
#Add the geoprocessing service as a toolbox. Use an alias when importing
arcpy.ImportToolbox(FindRoute_service, "agol")
#Set the variables to call the tool
stops = r'C:/data/Inputs.gdb/Stops'
output_routes = r'C:/data/Results.gdb/Routes'
output_route_edges = r'C:/data/Results.gdb/Route_Edges'
output_directions = r'C:/data/Results.gdb/Directions'
output_stops = r'C:/data/Results.gdb/Stops'
#Call the tool
result = arcpy.agol.FindRoutes(stops, "Minutes",
Reorder_Stops_to_Find_Optimal_Routes=True,
Preserve_Terminal_Stops="Preserve First",
Time_of_Day=datetime.datetime(2014, 2, 10, 8, 0, 0))
#Check the status of the result object every 0.5 seconds
#until it has a value of 4(succeeded) or greater
while result.status < 4:
time.sleep(0.5)
#print any warning or error messages returned from the tool
result_severity = result.maxSeverity
if result_severity == 2:
print "An error occured when running the tool"
print result.getMessages(2)
sys.exit(2)
elif result_severity == 1:
print "Warnings were returned when running the tool"
print result.getMessages(1)
#Get the output routes and save to a local geodatabase
result.getOutput(1).save(output_routes)
result.getOutput(2).save(output_route_edges)
result.getOutput(3).save(output_directions)
result.getOutput(4).save(output_stops)