arcpy.na.MakeODCostMatrixAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {cutoff}, {number_of_destinations_to_find}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
Имя
|
Объяснение
|
Тип данных
|
|
network_data_source
|
Набор сетевых данных или сервис, для которого выполняется сетевой анализ.
Параметр может быть задан с помощью одного из следующих:
Путь к каталогу набора сетевых данных
Объект слоя набора сетевых данных
Строковое имя слоя набора сетевых данных
URL-адрес для ArcGIS Online или портала ArcGIS Enterprise, настроенного со стандартными сервисами маршрутизации
Для использования URL-адреса портала необходимо выполнить вход на портал под учетной записью с правами на маршрутизацию.
Более подробно о том, как можно войти на портал в Python
Более подробно о сетевом анализе с помощью сервисов маршрутизации
При использовании портала ArcGIS Online или ArcGIS Enterprise, сервисы маршрутизации которого настроены с использованием ArcGIS Online в качестве входной сети, при выполнении анализа будут потребляться кредиты и присутствовать определенные ограничения, такие как количество допустимых входных данных.
Подробнее о потреблении кредитов и ограничениях при выполнении сетевого анализа
|
Network Dataset Layer; String
|
|
layer_name
(Дополнительный)
|
Имя слоя сетевого анализа, который будет создан.
|
String
|
|
travel_mode
(Дополнительный)
|
Имя режима передвижения для выполнения анализа. Режим передвижения представляет собой набор сетевых настроек, например, ограничений передвижения и правил разворотов, определяющих, как пешеход, легковой или грузовой автомобиль или другое транспортное средство передвигается по сети. Режимы передвижения определяются вашим источником сетевых данных.
Объект arcpy.na.TravelMode и строка, содержащая действительное представление JSON режима передвижения, также могут использоваться как ввод для этого параметра.
|
String
|
|
cutoff
(Дополнительный)
|
Значение импеданса, при котором следует прекратить поиск назначений для данного источника. Это значение будет в единицах атрибута импеданса, используемого для выбора режима передвижения. В пределах данного ограничения назначений не найдено. Предельное значение может быть изменено на основе точки по источнику путем задания отдельных предельных значений в подслое источников. По умолчанию для анализа предельное значение не используется.
|
Double
|
|
number_of_destinations_to_find
(Дополнительный)
|
Количество ближайших пунктов назначения для каждого исходного пункта. Это значение по умолчанию можно изменить, задав значение для свойства TargetDestinationCount в подслое источников. По умолчанию ограничения нет, и все назначения будут найдены.
|
Long
|
|
time_of_day
(Дополнительный)
|
Время отправления из исходных пунктов.
Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время суток. Дату и время можно указать в виде 5/14/2012 10:30 AM.
Настройте анализ, чтобы использовать одну из следующих специальных дат для моделирования дня недели или текущей даты вместо определенной статической даты:
Today—30.12.1899
Sunday—31.12.1899
Monday—01.01.1900
Tuesday—02.01.1900
Wednesday—03.01.1900
Thursday—04.01.1900
Friday—05.01.1900
Saturday—06.01.1900
Узнать подробнее о том, как дата и время используется и интерпретируется в сетевом анализеs
|
Date
|
|
time_zone
(Дополнительный)
|
Часовой пояс параметра Время суток.
LOCAL_TIME_AT_LOCATIONS–Значение параметра Время суток относится к часовому поясу, в котором находятся начальные точки. Используется по умолчанию.
UTC–Значения параметра Время суток указываются во Всемирном координированном времени (UTC). Используйте эту опцию, если хотите посчитать матрицу стоимости OD для конкретного времени, например текущего, но не знаете, в каком часовом поясе будут находиться начальные точки.
|
String
|
|
line_shape
(Дополнительный)
|
Задает форму выходной линии.
Независимо от выбранного выходного типа формы, наилучший маршрут всегда определяется по сетевому импедансу, а не по евклидовому расстоянию. Это значит, что различаются только формы маршрута, а не соответствующее им прохождение сети.
NO_LINES–В ходе анализа доля в качестве выходной пары источник-назначение не создается никакой геометрии. Это удобно при большом количестве источников и назначений, когда необходимо получить только значения импеданса в таблице матрицы Источник-назначение (без визуализации матрицы на карте).
STRAIGHT_LINES–Форма маршрута на выходе представляет собой одну прямую линию, соединяющую исходный пункт с пунктом назначения. Используется по умолчанию.
|
String
|
|
accumulate_attributes
[accumulate_attributes,...]
(Дополнительный)
|
Список атрибутов стоимости, которые будут суммироваться во время анализа. Эти накопленные атрибуты могут использоваться только для сведения; алгоритм решения при выполнении анализа использует только атрибут стоимости в соответствии с используемым режимом передвижения.
Для каждого накопленного атрибута стоимости в выходных объектах сетевого анализа заполняется свойство Total_ [Impedance].
Этот параметр недоступен, если источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление.
|
String
|
|
ignore_invalid_locations
(Дополнительный)
|
Указывает, будут ли игнорироваться неверные входные местоположения. Обычно местоположения недействительны, если они не могут быть обнаружены в сети. Когда недопустимые местоположения игнорируются, решатель пропустит их и попытается выполнить анализ, используя оставшиеся местоположения.
SKIP–Неверные входные местоположения будут игнорироваться, а использоваться будут только допустимые местоположения. Используется по умолчанию.
HALT–Будут использоваться все входные местоположения. Неверные местоположения приведут к сбою анализа.
|
Boolean
|
|
analysis_geodatabase
(Дополнительный)
|
Рабочая область базы геоданных, где будут храниться данные подслоя нового слоя сетевого анализа. Если этот параметр не указан, данные подслоя будут созданы в среде геообработки Текущей рабочей области, которая обычно является базой геоданных проекта.
Узнайте больше об источнике данных анализа для слоя сетевого анализа
|
Workspace
|
|
analysis_feature_dataset_name
(Дополнительный)
|
Имя для нового набора классов объектов, который этот инструмент создаст в базе геоданных анализа для хранения данных подслоёв сетевого анализа. Если не указано, набор классов объектов будет создан с уникальным случайным именем.
Узнайте больше об источнике данных анализа для слоя сетевого анализа
|
String
|
Производные выходные данные
|
Имя
|
Объяснение
|
Тип данных
|
|
out_network_analysis_layer
|
Только что созданный слой сетевого анализа.
|
Network Analyst Layer
|
Пример кода
MakeODCostMatrixAnalysisLayer, пример 1 (окно Python)
Выполнить инструмент с использованием только обязательных параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts")
MakeODCostMatrixAnalysisLayer, пример 2 (окно Python)
Выполните инструмент с использованием всех параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts",
"Driving Time", 10, 20, "1/1/1900 9:00 AM",
"UTC", "NO_LINES", ["Meters", "TravelTime"])
MakeODCostMatrixAnalysisLayer, пример 3 (рабочий процесс)
В следующем автономном скрипте Python показано, как с помощью функции MakeODCostMatrixAnalysisLayer можно создавать матрицу Источник-Назначение для доставки товаров со склада во все магазины в пределах 10 минут в пути.
# Name: MakeODCostMatrixAnalysisLayer_Workflow.py
# Description: Create an origin-destination cost matrix for delivery of goods
# from the warehouses to all stores within a 10-minute drive time
# and save the results to a layer file on disk. Such a matrix can
# be used as an input for logistics, delivery and routing analyses.
# Requirements: Network Analyst extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/Paris.gdb"
network = os.path.join(input_gdb, "Transportation", "ParisMultimodal_ND")
layer_name = "WarehouseToStoreDrivetimeMatrix"
travel_mode = "Driving Time"
search_tolerance = "1000 Meters"
origins = os.path.join(input_gdb, "Analysis", "Warehouses")
destinations = os.path.join(input_gdb, "Analysis", "Stores")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new OD Cost matrix layer. We wish to find all stores within a 10
#minute cutoff.
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
travel_mode, 10)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
origins_layer_name = sublayer_names["Origins"]
destinations_layer_name = sublayer_names["Destinations"]
#Load the warehouse locations as origins using a default field mappings and
#a search tolerance of 1000 Meters.
arcpy.na.AddLocations(layer_object, origins_layer_name, origins, "",
search_tolerance)
#Load the store locations as destinations and map the NOM field from stores
#features as Name property using field mappings
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
destinations_layer_name)
field_mappings["Name"].mappedFieldName = "NOM"
arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
field_mappings, search_tolerance)
#Solve the OD cost matrix layer
arcpy.na.Solve(layer_object)
#Save the solved OD cost matrix layer as a layer file on disk
layer_object.saveACopy(output_layer_file)
print("Script completed successfully")
except Exception as e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print("An error occurred on line %i" % tb.tb_lineno)
print(str(e))
MakeODCostMatrixAnalysisLayer, пример 4 (рабочий процесс)
В следующем автономном скрипте Python показано, как получить доступ к подслоям, соединить входные и выходные слои, и переместить значения полей из входных источников и назначений в выходной слой линий.
Прежние версии:
Функция GetNASublayer может использоваться для извлечения подслоев слоя сетевого анализа. Она была представлена в версии ArcGIS Pro 2.7. В более ранних версиях программного обеспечения лучшим способом извлечения объекта подслоя слоя сетевого анализа было использование метода listLayers объекта сетевого анализа Layer, использующего имя подслоя в качестве подстановочного знака.
# Name: MakeODCostMatrixAnalysisLayer_Workflow2.py
# Description: Find the travel time to the closest hospital from each census
# tract and join the travel time and hospital name to the input
# tracts.
# Requirements: Network Analyst extension
# Import system modules
import datetime
import os
import arcpy
try:
# Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
arcpy.env.workspace = os.path.join(output_dir, "Output.gdb")
arcpy.env.overwriteOutput = True
# Set inputs and outputs
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
origins = os.path.join(input_gdb, "Analysis", "TractCentroids")
destinations = os.path.join(input_gdb, "Analysis", "Hospitals")
output_features = "TractCentroids_withOD"
# Define some OD cost matrix analysis settings
layer_name = "HospitalsOD"
# User settings for driving
travel_mode = "Driving Time"
# Calculate the total distance, even though the analysis is optimizing time
accumulate_attributes = ["Meters"]
# Find only the closest hospital
num_hospitals_to_find = 1
# Set the time of day for the analysis to 6PM on a generic Monday.
start_time = datetime.datetime(1900, 1, 1, 18, 0, 0)
# Don't output line shapes (output Lines will still list travel times)
out_lines = "NO_LINES"
# Create a new OD cost matrix layer.
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
travel_mode,
number_of_destinations_to_find=num_hospitals_to_find,
time_of_day=start_time, line_shape=out_lines,
accumulate_attributes=accumulate_attributes)
# Get the layer object from the result object. The OD layer can
# now be referenced using the layer object.
layer_object = result_object.getOutput(0)
# Get the names of all the sublayers within the OD layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
# Store the layer names for later use
origins_layer_name = sublayer_names["Origins"]
destinations_layer_name = sublayer_names["Destinations"]
# The input census tract data has a unique ID field that can be transferred
# to the analysis layer. Add the field, and then use field mapping to
# transfer the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, origins_layer_name,
"Tract_ID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
origins_layer_name)
field_mappings["Tract_ID"].mappedFieldName = "ID"
# Load the census tracts as origins.
arcpy.na.AddLocations(layer_object, origins_layer_name, origins,
field_mappings, "")
# Map the input hospital NAME field to a new Hospital_Name field in
# Destinations
arcpy.na.AddFieldToAnalysisLayer(layer_object, destinations_layer_name,
"Hospital_Name", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
destinations_layer_name)
field_mappings["Hospital_Name"].mappedFieldName = "NAME"
# Load the hospitals as desinations.
arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
field_mappings, "")
# Solve the OD layer
arcpy.na.Solve(layer_object)
# Get sublayers
origins_sublayer = arcpy.na.GetNASublayer(layer_object, "Origins")
destinations_sublayer = arcpy.na.GetNASublayer(layer_object, "Destinations")
lines_sublayer = arcpy.na.GetNASublayer(layer_object, "ODLines")
# Use the JoinField tool to transfer OD Cost Matrix information to the
# output feature class
# Transfer the tract ID from the input Origins to the output Lines
arcpy.management.JoinField(lines_sublayer, "OriginID",
origins_sublayer, "ObjectID", "Tract_ID")
# Transfer the hospital name from the input Destinations to the output Lines
arcpy.management.JoinField(lines_sublayer, "DestinationID",
destinations_sublayer, "ObjectID", "Hospital_Name")
# Transfer fields of interest (hospital name, impedance attribute, and other
# accumulated costs) from the output Lines to a copy of the input census
# tracts feature class using the Tract_ID field
# Determine the impedance attribute
solver_props = arcpy.na.GetSolverProperties(layer_object)
impedance = solver_props.impedance
output_impedance_fieldname = "Total_" + impedance
fields_to_transfer = ["Hospital_Name", output_impedance_fieldname]
for field in accumulate_attributes:
fields_to_transfer.append("Total_" + field)
arcpy.management.CopyFeatures(origins, output_features)
arcpy.management.JoinField(output_features, "ID",
lines_sublayer, "Tract_ID", fields_to_transfer)
print("Script completed successfully")
except Exception as e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print("An error occurred on line %i" % tb.tb_lineno)
print(str(e))
MakeODCostMatrixAnalysisLayer, пример 5 (автономный скрипт)
В следующем автономном скрипте Python показано, как создать измененную версию режима передвижения из набора сетевых данных и использовать этот режим передвижения при создании новой матрицы Источник-Назначение.
import json
network = r"C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
# Get all travel modes from the network dataset
travel_modes = arcpy.na.GetTravelModes(network)
# Get the Driving Distance travel mode
dd_travel_mode = travel_modes["Driving Distance"]
# Make a json representation of the travel mode
travel_mode_json = json.loads(str(dd_travel_mode))
# Modify the userHierarchy property to turn hierarchy off, and update the name
travel_mode_json["useHierarchy"] = False
travel_mode_json["name"] = "Driving Distance without Hierarchy"
# Create a new travel mode object from the modified json
new_travel_mode_object = arcpy.na.TravelMode(json.dumps(travel_mode_json))
# Use the new travel mode object to MakeODCostMatrixAnalysisLayer
# We could also pass in the json directly without first converting it to an object
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "OD Without Hierarchy", new_travel_mode_object)