Сводка
Класс ArcPy, предназначенный для выполнения анализа задачи выбора маршрута транспорта.
Описание
Анализ задачи выбора маршрута транспорта находит лучшие маршруты для парка транспортных средств.
Синтаксис
VehicleRoutingProblem (in_network)
Parameter | Объяснение | Тип данных |
in_network | Набор сетевых данных или сервис, который будет использоваться для сетевого анализа. Аргумент можно задать с помощью пути к каталогу с набором сетевых данных, объекту слоя набора сетевых данных, строки с именем слоя набора сетевых данных или URL-адреса портала для сервиса сетевого анализа. Сеть должна содержать хотя бы один режим перемещения. Для использования URL-адреса портала необходимо выполнить вход на портал под учетной записью с правами на маршрутизацию. Анализ расходует кредиты, если объект использует ArcGIS Online в качестве in_network. Дополнительные сведения см. в разделе Обзор сервисных кредитов. | String |
Свойства
Владение | Объяснение | Тип данных |
allowSaveLayerFile (чтение и запись) | Указывает, разрешается ли сохранение результата анализа в виде файла слоя, используя метод saveAsLayerFile получившегося объекта. True означает, что вы можете сохранить файл слоя. False означает, что сохранить нельзя. Значение по умолчанию True, если в анализе используется набор сетевых данных, и False при использовании сервиса портала. Разрешение сохранения файла слоя может замедлить анализ, если в анализе используется сервис портала. | Boolean |
allowSaveRouteData (чтение и запись) | Указывает, разрешается ли сохранение результата анализа в файл ZIP, используя метод saveRouteData получившегося объекта. True означает, что вы можете сохранить данные маршрута. False означает, что сохранить нельзя. Значение по умолчанию True, если в анализе используется набор сетевых данных, и False при использовании сервиса портала. Разрешение сохранения данных маршрута может замедлить анализ, если в анализе используется сервис портала. | Boolean |
defaultDate (чтение и запись) | Дата по умолчанию для значений полей времени, в которых указывается время в течение дня без указания даты. Значение по умолчанию - None, означающее, что все поля типа дата и время содержат значения даты и времени. | DateTime |
directionsDistanceUnits (чтение и запись) | Единицы, используемые для расстояния перемещения в выходных пошаговых направлениях. Свойство возвращается и задается в качестве участвующего в перечислении DistanceUnits и применяется, только если свойство returnDirections – True. По умолчанию используются единицы измерения атрибута расстояния в режиме перемещения, используемом для анализа. | Object |
directionsLanguage (чтение и запись) | Язык, на котором будет отображаться выходной текст с указаниями пошаговых направлений. Свойство возвращается и устанавливается в виде строки с использованием одного из двух- или пятизначных кодов языков, представляющих поддерживаемые языки направлений. Список доступных языков направлений можно получить с помощью функции arcpy.nax.ListDirectionsLanguages. Значение по умолчанию соответствует en (English) или языку активного в данный момент языкового пакета. Свойство применимо, только если свойство returnDirections имеет значение True. | String |
directionsStyle (чтение и запись) | Стиль, который будет использоваться для вывода пошаговых инструкций. Свойство возвращается и задается в качестве участвующего в перечислении DirectionsStyle и применяется, только если свойство returnDirections – True. Значение по умолчанию равно Desktop. | Object |
distanceUnits (чтение и запись) | Единицы, используемые для расстояния перемещения в выходных данных анализа. Независимо от единиц измерения в стоимостных атрибутах набора сетевых данных выходные данные будут трансформированы в единицы, заданные в этом свойстве. Возвращается свойство и задается в качестве значения в перечислении DistanceUnits. По умолчанию – DistanceUnits.Kilometers. | Object |
excessTransitFactor (чтение и запись) | Уровни важности сокращения избыточного времени в пути для пар заказов. Избыточное время в пути – это затрачиваемое сверх необходимого время для перемещения от одного заказа к другому. Избыточное время в пути может быть вызвано перерывами в работе водителя или движением к промежуточным заказам и станциям. Возвращается свойство и задается в качестве участвующего в перечислении Importance. По умолчанию – Importance.Medium. Если задано Importance.Low, механизм расчета пытается найти решение, минимизирующее общие затраты, независимо от избыточного времени в пути. Этот параметр обычно используется курьерской службой. Поскольку курьерская служба перевозит грузы, а не людей, ей не нужно особенно заботиться о времени в пути. Использование данного параметра позволяет курьерской службе обслуживать парные заказы в должной очередности и минимизировать общие затраты. Если задано Importance.Medium, механизм расчета будет стремиться найти компромиссное решение с одновременным сокращением избыточного времени и обеспечением минимальных общих затрат. Если задано Importance.High, механизм расчета пытается найти решение, минимизирующее избыточное время в пути между парными заказами за счет увеличения общей стоимости перемещения. Имеет смысл использовать этот параметр при необходимости перевозки людей между парами заказов, и вы хотите сократить их время в пути. Эта опция подходит для такси. | Object |
ignoreInvalidLocations (чтение и запись) | Указывает, будут ли игнорироваться неверные входные местоположения. Значение True указывает, что неверные входные местоположения будут игнорироваться, поэтому анализ будет успешным только при использовании допустимых местоположений. Значение False указывает, что недопустимые местоположения не будут проигнорированы и приведут к сбою анализа. | Boolean |
networkDataSource (только чтение) | Полный путь каталога к набору сетевых данных, используемому для анализа. | String |
overrides (чтение и запись) | Задайте дополнительные опции, которые смогут повлиять на выполнение расчета при поиске решений задач сетевого анализа. Значение этого параметра должно быть задано в JavaScript Object Notation (JSON). К примеру, корректным значением является следующее: {"overrideSetting1" : "value1", "overrideSetting2" : "value2"}. Замещающее имя всегда заключено в двойные кавычки. Эти значения могут быть числовыми, булевыми или текстовыми. Значение по умолчанию является пустым, что означает отсутствие замещения каких-либо настроек механизма расчета. Замещения – дополнительные настройки, которые должны применяться только по итогам выполнения тщательного анализа результатов, которые будут получены до и после применения таких настроек. Список поддерживаемых настроек замещений для каждого расчета и их доступных значений можно получить, обратившись в службу технической поддержки Esri. | String |
returnDirections (чтение и запись) | Задает, будет ли создаваться пошаговый путевой лист. Значение True означает, что пошаговый путевой лист будет генерироваться при расчете анализа. Значение False означает, что путевой лист генерироваться не будет. Построение путевого листа может замедлить выполнение анализа. Значение по умолчанию равно False. | Boolean |
returnStopShapes (чтение и запись) | Если задано значение True, механизм расчета создает точки выходных остановок. Если задано значение False, выходные остановки будут возвращены в табличном формате. По умолчанию – False. | Boolean |
routeShapeType (чтение и запись) | Тип формы, создаваемой для отображения выходных маршрутов. Маршруты всегда вычисляются вдоль сети, но вы можете отобразить их геометриями, не отражающими кривые сети. Возвращается свойство и задается в качестве значения в перечислении RouteShapeType. По умолчанию – RouteShapeType.TrueShapeWithMeasures. | Object |
searchQuery (чтение и запись) | При размещении входных данных в сети, задает запрос на ограничение поиска поднабора объектов в классе исходных объектов. Эта опция полезна, если вы не хотите находить объекты, которые могут не подходить для сетевого положения. Например, если вы загружаете центроиды полигонов, и не хотите размещать их на дорогах местного значения, вы можете задать запрос, по которому будет выполняться поиск только для основных магистралей. Дополнительные сведения о способе размещения входных данных в сети Значение параметра указывается в виде списка с вложенными списками. Вложенный список состоит из двух значений, указывающих имя и выражение SQL для всех источников сети. Синтаксис выражения SQL несколько различается в зависимости от типа класса объектов источника сети. Например, если вы выполняете запрос к исходному классу объектов, хранящемуся в файловой или многопользовательской базе геоданных, шейп-файлам, SDC, то имена полей необходимо заключить в двойные кавычки: "CFCC". Если вы выполняете запрос к исходному классу объектов, хранящемуся в персональной базе геоданных, заключите поля в квадратные скобки: [CFCC]. Если запрос для конкретного источника указывать не нужно, используйте "#" в качестве значения для выражения SQL, или исключите имя источника и выражение SQL из значения параметра. Если запрос для всех источников сети указывать не нужно, используйте "#" в качестве значения параметра. Например, значение параметра [["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] определяет выражение SQL для исходного класса объектов Streets и отсутствие выражения для исходного класса объектов Streets_ND_Junctions. Обратите внимание, что двойные кавычки, окружающие имя поля CFCC, можно проигнорировать, добавив символы обратной косой черты, что позволит избежать ошибки анализа в интерпретаторе Python. По умолчанию запрос не используется. | List |
searchTolerance (чтение и запись) | Максимальный допуск поиска для расположения входных объектов в сети. Свойство возвращается и устанавливается как двойное, и единицы этого значения доступны через свойство searchToleranceUnits. Значение по умолчанию равно 5000. Дополнительные сведения о способе размещения входных данных в сети | Double |
searchToleranceUnits (чтение и запись) | Единицы измерения для свойства searchTolerance. Возвращается свойство и задается в качестве значения в перечислении DistanceUnits. По умолчанию – DistanceUnits.Meters. | Object |
spatiallyClusterRoutes (чтение и запись) | Если задано True, то назначенные для маршрута заказы будут пространственно кластеризованы. Деление заказов на кластеры приводит к сохранению маршрутов в небольших областях и сокращает частоту пересечения линий маршрутов; при этом деление на кластеры может привести к увеличению общего времени в пути. Если задано False, то механизм расчета не будет устанавливать приоритет пространственной кластеризации заказов, и линии маршрутов могут пересекаться. Используйте данный параметр, если указаны зоны маршрута. По умолчанию – True. | Boolean |
timeUnits (чтение и запись) | Единицы, используемые для времени перемещения в выходных данных анализа. Независимо от единиц измерения в стоимостных атрибутах набора сетевых данных выходные данные будут трансформированы в единицы, заданные в этом свойстве. Возвращается свойство и задается в качестве значения в перечислении TimeUnits. По умолчанию – TimeUnits.Minutes. | Object |
timeWindowFactor (чтение и запись) | Определяет ранги значения для временных окон. Возвращается свойство и задается в качестве участвующего в перечислении Importance. По умолчанию – Importance.Medium. Если задано значение Importance.Low, механизм устанавливает более высокую значимость для сокращения времени в пути и меньшую – для прибытия на остановки в указанное время. Этот параметр также можно использовать при накоплении отставания в обработке заказов. Для обработки как можно большего количества заказов в день и сокращения отставания можно выбрать данный параметр несмотря на то, что клиенты могут испытывать неудобства из-за позднего прибытия транспортных средств. Если задано значение Importance.Medium, соблюдается баланс между сокращением времени в пути и соблюдением временных окон при прибытии. Если задано значение Importance.High, механизм устанавливает более высокую значимость для прибытия на остановки в указанное время и менее высокую – для сокращения времени в пути. Организации, выполняющие доставки, критичные ко времени или связанные с обслуживанием клиентов должны выбрать данный параметр. | Object |
timeZoneForTimeFields (чтение и запись) | Показывает, выражаются ли значения во временных полях в локальном местном времени входных местоположений или во всемирном координированном времени (UTC). Свойство возвращается и задается в качестве участвующего в перечислении TimeZoneUsageи применяется, только если значения свойства timeOfDay равно None. По умолчанию – TimeZoneUsage.LocalTimeAtLocations. | Object |
travelMode (чтение и запись) | Режим передвижения, используемый для анализа. Задача выбора маршрута транспорта (VRP) выполняется только с импедансом на основе времени, поэтому доступны только режимы передвижения с импедансом на основе времени. Значение возвращается и устанавливается как объект arcpy.nax.TravelMode, но оно также может быть установлено с использованием текстового имени режима передвижения или строки, содержащей действительное представление JSON режима передвижения. По умолчанию используется режим передвижения, определенный в наборе сетевых данных, используемом для анализа. | Object |
Обзор метода
Метод | Объяснение |
count (input_type) | Возвращает количество строк, добавленных к входному типу. |
fieldMappings (input_type, {use_location_fields}, {list_candidate_fields}) | Создает словарь, который сопоставляет входной тип с объектами arcpy.nax.NAClassFieldMap, позволяющими вам сопоставлять поля ваших входных данных свойствам механизма расчета. Словарь может использоваться в качестве входных данных аргумента load метода field_mappings. |
fieldNames (input_type, {use_location_fields}) | Получает список имен полей, поддерживаемых заданным входным типом. |
insertCursor (input_type, field_names) | Задает курсор записи для заданного типа выходных данных. Этот курсор предназначен для добавления строк непосредственно во входных данных. |
load (input_type, features, {field_mappings}, {append}, {max_features}) | Задает входные объекты, которые будут участвовать в анализе. |
solve () | Выполняет анализ решения задачи выбора маршрута транспорта с помощью свойств, заданных для объекта VehicleRoutingProblem и загруженных входных данных. |
Методы
count (input_type)
Parameter | Объяснение | Тип данных |
input_type | Тип подсчитываемых входных объектов. Параметр должен быть задан с помощью перечисления VehicleRoutingProblemInputDataType. | Object |
Тип данных | Объяснение |
Integer | Число строк. |
fieldMappings (input_type, {use_location_fields}, {list_candidate_fields})
Parameter | Объяснение | Тип данных |
input_type | Тип входных данных, для которых возвращаются соответствия полей. Параметр должен быть задан с помощью перечисления VehicleRoutingProblemInputDataType. | Object |
use_location_fields | Определяет, будут ли поля сетевого местоположения включены в возвращаемый словарь соответствия полей. Поля местоположения сети описывают точку сети, в которой расположен объект. Вы можете использовать поля местоположения сети для более точного контроля, как входные данные вашего анализа располагаются в сети в целях сохранения времени при вызове метода solve, поскольку механизм решения не будет вычислять поля местоположения из геометрии входных данных. Поле местоположения для класса объектов можно вычислить при помощи инструмента Вычислить местоположения. Дополнительные сведения о полях местоположения сети и способе размещения входных данных в сети Если значение аргумента - True, возвращаемый словарь сопоставления полей будет содержать только поля местоположения в сети. Значение по умолчанию - False; словарь сопоставления полей не будет содержать поля местоположения в сети. (Значение по умолчанию — False) | Boolean |
list_candidate_fields [list_candidate_fields,...] | Список объектов arcpy.Field для создания сопоставленных имен полей, которые можно получить для класса объектов или таблицы с помощью функции arcpy.ListFields. Имена полей, не сопоставленные полю по входному типу, также будут возвращены на карте. Вызов метода load с этими дополнительными полями добавит их во входные объекты механизма расчета, и поля могут быть переданы и включены в выходные данные. Если аргумент не задан, соответствия полей будут созданы только со значениями соответствующих свойств по умолчанию. (Значение по умолчанию — None) | Field |
Тип данных | Объяснение |
Dictionary | Словарь, в котором ключами являются имена полей, а значениями - объекты arcpy.nax.NAClassFieldMap. |
fieldNames (input_type, {use_location_fields})
Parameter | Объяснение | Тип данных |
input_type | Тип входных данных, для которых возвращаются поддерживаемые имена полей. Параметр должен быть задан с помощью перечисления VehicleRoutingProblemInputDataType. | Object |
use_location_fields | Определяет, будут ли поля сетевого местоположения включены в возвращаемый список имён полей. Поля местоположения сети описывают точку сети, в которой расположен объект. Вы можете использовать поля местоположения сети для более точного контроля, как входные данные вашего анализа располагаются в сети в целях сохранения времени при вызове метода solve, поскольку механизм решения не будет вычислять поля местоположения из геометрии входных данных. Поле местоположения для класса объектов можно вычислить при помощи инструмента Вычислить местоположения. Дополнительные сведения о полях местоположения сети и способе размещения входных данных в сети Если значение аргумента - True, возвращаемый словарь сопоставления полей будет содержать только поля местоположения в сети. Значение по умолчанию - False; список имён полей не будет содержать поля местоположения в сети. (Значение по умолчанию — False) | Boolean |
Тип данных | Объяснение |
String | Список имен полей, поддерживаемых заданным входным типом. |
insertCursor (input_type, field_names)
Parameter | Объяснение | Тип данных |
input_type | Тип входных данных, для которых может использоваться курсор для вставки строк. Параметр должен быть задан с помощью перечисления VehicleRoutingProblemInputDataType. | Object |
field_names [field_names,...] | Список имен полей входного типа, значения в которых вы хотите задать при вставке строк с помощью курсора. Вы можете получить имена полей, которые поддерживаются входным типом с помощью метода fieldNames. Помимо обычных полей вы можете задать геометрию входных данных с использованием одного из токенов геометрии:
Токены SHAPE@XY и SHAPE@XYZ поддерживаются только точечными входными типами. | String |
Тип данных | Объяснение |
Object | Объект SolverInsertCursor, который можно использовать для записи объектов. |
load (input_type, features, {field_mappings}, {append}, {max_features})
Parameter | Объяснение | Тип данных |
input_type | Тип загружаемого входного объекта. Параметр должен быть задан с помощью перечисления VehicleRoutingProblemInputDataType. | Object |
features | Загружаемые входные объекты. Этот параметр поддерживает следующие входные типы:
В слой будут загружаться только выбранные пространственные объекты. Если слой содержит определяющий запрос, загрузятся только те объекты, которые будут видны с помощью этого определяющего запроса. Этот метод работает также и в среде геообработки Экстент; Будут загружаться только объекты в заданном экстенте. | String |
field_mappings | Словарь соответствий входных типов и объектов arcpy.nax.NAClassFieldMap отображает соответствие полей входных объектов. Корректные входные данные для этого параметра могут быть созданы с помощью метода fieldMappings. Если отображение полей не задано, то будут отображаться все поля из входных объектов с такими же именами, как у поддерживаемых полей входного типа. (Значение по умолчанию — None) | Dictionary |
append | Определяет, будут ли загружаемые объекты присоединены к имеющемуся набору объектов входного типа. Значение True означает, что новые объекты буду присоединяться при сохранении существующих. Это бывает полезно, когда вы хотите загрузить входные объекты из нескольких классов объектов или таблиц, чтобы использовать их в одном отдельном анализе. Используется по умолчанию. Значение False означает, что имеющиеся объекты для входного типа будут удалены и заменены загружаемыми в настоящий момент. (Значение по умолчанию — True) | Boolean |
max_features | Максимальное число объектов, которые можно загрузить во входной тип. Это полезно, если при создании инструмента или сервиса вы захотите, чтобы выводилась ошибка в случаях, когда размер входных данных превышает доступные ресурсы. Метод load возвратит arcpy.nax.LimitError, если число входных объектов превысит ограничение, равное max_features. Если значение не задано, ограничение по числу входных объектов не устанавливается. (Значение по умолчанию — None) | Integer |
solve ()
Тип данных | Объяснение |
Object | Объект arcpy.nax.VehicleRoutingProblemResult, который можно использовать для доступа к выходным данным и сообщениям механизма расчета. |
Пример кода
Выполняет анализ задачи выбора маршрута транспорта.
# An example showing how to perform vehicle routing problem analysis using inputs from feature classes and tables.
import arcpy
arcpy.CheckOutExtension("network")
nds = "C:/data/NorthAmerica.gdb/Routing/Routing_ND"
nd_layer_name = "Routing_ND"
input_orders = "C:/data/io.gdb/Orders"
input_depots = "C:/data/io.gdb/Depots"
input_routes = "C:/data/io.gdb/Vehicles"
output_stops = "C:/data/io.gdb/AssignedStops"
output_routes = "C:/data/io.gdb/Routes"
output_directions = "C:/data/io.gdb/Directions"
unassigned_stops = "C:/data/io.gdb/UnassignedStops"
# Create a network dataset layer and get the desired travel mode for analysis
arcpy.nax.MakeNetworkDatasetLayer(nds, nd_layer_name)
nd_travel_modes = arcpy.nax.GetTravelModes(nd_layer_name)
travel_mode = nd_travel_modes["Driving Time"]
# Instantiate a VehicleRoutingProblem solver object
vrp = arcpy.nax.VehicleRoutingProblem(nds)
# Set properties
vrp.travelMode = travel_mode
vrp.distanceUnits = arcpy.nax.DistanceUnits.Miles
vrp.routeShapeType = arcpy.nax.RouteShapeType.TrueShape
vrp.returnDirections = True
vrp.returnStopShapes = True
# Load inputs
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Orders, input_orders)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Depots, input_depots)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Routes, input_routes)
# Solve the analysis
result = vrp.solve()
# Export the results to feature classes
if result.solveSucceeded:
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Stops, output_stops)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Routes, output_routes)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Directions, output_directions)
if result.isPartialSolution:
print("Some of the orders were not assigned.")
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.UnassignedStops, unassigned_stops)
else:
print("Solved failed")
print(result.solverMessages(arcpy.nax.MessageSeverity.All))