Сводка
Создает слой сетевого анализа матрицы Источник-Назначение и задает его свойства. Слой сетевого анализа матрицы Источник-Назначение необходим для представления матрицы стоимости движения из набора исходных местоположений в набор конечных местоположений.
Прежние версии:
Это устаревший инструмент. Это функция была передана инструменту Создать слой анализа матрицы Источник-Назначение.
Использование
После создания слоя анализа при помощи данного инструмента, вы можете добавлять в него объекты сетевого анализа при помощи инструмента Добавить положения, выполнять анализ при помощи инструмента Расчет и сохранять результаты на диске при помощи инструмента Сохранить в файл слоя.
При использовании данного инструмента в моделях геообработки, если модель запускается как инструмент, то выходной слой сетевого анализа должен быть задан в качестве параметра модели, в противном случае слой не добавится в содержание карты.
Синтаксис
arcpy.na.MakeODCostMatrixLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {default_cutoff}, {default_number_destinations_to_find}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape}, {time_of_day})
Parameter | Объяснение | Тип данных |
in_network_dataset | Набор сетевых данных, для которого выполняется анализ матрицы Источник-Назначение. | Network Dataset Layer |
out_network_analysis_layer | Имя создаваемого слоя анализа матрицы Источник-Назначение. | String |
impedance_attribute | Стоимостный атрибут, который будет использован в качестве импеданса в анализе. | String |
default_cutoff (Дополнительный) | Значение импеданса по умолчанию, при котором следует прекратить поиск пунктов назначения для данного исходного пункта. Если кумулятивный импеданс превышает пороговое значение, вычисление маршрута прекращается. Значение по умолчанию можно переопределить путем задания порогового значения исходному пункту. | Double |
default_number_destinations_to_find (Дополнительный) | Количество ближайших пунктов назначения для каждого исходного пункта. Значение по умолчанию можно переопределить путем задания значения свойству TargetDestinationCount для исходных пунктов. | Long |
accumulate_attribute_name [accumulate_attribute_name,...] (Дополнительный) | Список атрибутов стоимости, который будет суммироваться во время анализа. Эти атрибуты суммирования служат исключительно для справки; механизм расчета использует только атрибут стоимости, указанный параметром Атрибут импеданса для вычисления маршрута. Для каждого из накопленных атрибутов стоимости к маршрутам, рассчитанным алгоритмом решения, добавляется параметр Total_[Impedance]. | String |
UTurn_policy (Дополнительный) | Определяет правила разворотов, которые будут использоваться на перекрестках. Разрешение разворотов подразумевает возможность развернуться на перекрестке и продолжить движение назад по той же улице. Учитывая, что перекрестки бывают с улицами и тупиками, разные транспортные средства могут разворачиваться на одних перекрестках, но не могут – на других; это зависит от того, является ли данный перекресток пересечением с улицей или с тупиком. Чтобы учесть это, поведение при развороте неявно определяется числом ребер, которые соединяются с соединением, т.е. валентностью соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.
Для более точного определения правил разворота можно добавить глобальный параметр задержки на повороте в сетевой атрибут стоимости или настроить его, если он уже существует, а также уделить особое внимание конфигурации обратных поворотов. Кроме того, для сетевых положений можно задать свойство CurbApproach. | String |
restriction_attribute_name [restriction_attribute_name,...] (Дополнительный) | Список атрибутов ограничения, которые будут применяться во время анализа. | String |
hierarchy (Дополнительный) |
Параметр не используется, если в наборе сетевых данных, используемом для выполнения анализа, не задан атрибут иерархии. | Boolean |
hierarchy_settings (Дополнительный) | Прежние версии:До версии 10 данный параметр позволял изменять ранги иерархии для анализа, относительно рангов по умолчанию, установленных в наборе сетевых данных. В версии 10 данный параметр больше не поддерживается и должен быть указан в виде пустой строки. Чтобы изменить ранги иерархии для анализа, обновите ранги иерархии по умолчанию в наборе сетевых данных. | Network Analyst Hierarchy Settings |
output_path_shape (Дополнительный) |
Независимо от выбранного типа выходной формы, наилучший маршрут всегда определяется по сетевому импедансу и никогда – по евклидову расстоянию. Это значит, что различаются только формы маршрута, а не соответствующее им прохождение сети. | String |
time_of_day (Дополнительный) | Задает время отправления из исходных пунктов. Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время дня. Дату и время можно указать в виде 5/14/2012 10:30 AM. Вместо конкретной даты может быть задан день недели, при помощи следующих условных дат:
| Date |
Производные выходные данные
Name | Объяснение | Тип данных |
output_layer | Только что созданный слой сетевого анализа. | Слой Network Analyst |
Пример кода
Запуск инструмента с использованием только необходимых параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime")
Выполните инструмент с использованием всех параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime", 10, 20,
["Meters", "DriveTime"], "NO_UTURNS",
["Oneway"], "USE_HIERARCHY", "", "NO_LINES")
В следующем автономном скрипте Python показано, как с помощью инструмента MakeODCostMatrixLayer можно создавать матрицу Источник-Назначение для доставки товаров со склада во все магазины в пределах 10 минут в пути.
# Name: MakeODCostMatrixLayer_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"
impedance = "DriveTime"
search_tolerance = "1000 Meters"
accumulate_attributes = ["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. Apart from finding the drive time to the stores, we also
#want to find the total distance, so we will accumulate the "Meters"
#impedance attribute.
result_object = arcpy.na.MakeODCostMatrixLayer(network, layer_name,
impedance, 10, "",
accumulate_attributes)
#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))
В следующем автономном скрипте Python показано, как получить доступ к подслоям, соединить входные и выходные слои и перенести значения полей из входных данных источников и пунктов назначений в выходной линейный слой.
# Name: MakeODCostMatrixLayer_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 arcpy
from arcpy import env
import datetime
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 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"
#Optimize based on travel time
impedance = "TravelTime"
#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.MakeODCostMatrixLayer(network, layer_name,
impedance,
default_number_destinations_to_find=num_hospitals_to_find,
accumulate_attribute_name=accumulate_attributes,
output_path_shape=out_lines, time_of_day=start_time)
#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, "",
exclude_restricted_elements = "EXCLUDE")
#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, "",
exclude_restricted_elements = "EXCLUDE")
#Solve the OD layer
arcpy.na.Solve(layer_object)
#Get sublayers
#listLayers returns a list of sublayer layer objects contained in the NA
#group layer, filtered by layer name used as a wildcard. Use the sublayer
#name from GetNAClassNames as the wildcard string in case the sublayers
#have non-default names.
origins_sublayer = layer_object.listLayers(origins_layer_name)[0]
destinations_sublayer = layer_object.listLayers(destinations_layer_name)[0]
lines_sublayer = layer_object.listLayers(sublayer_names["ODLines"])[0]
#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, TravelTime cost, and other
#accumulated costs) from the output Lines to a copy of the input census
#tracts feature class using the Tract_ID field
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))
Environments
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да