Resumen
Crea una capa de análisis de red de matriz de coste origen-destino (OD) y establece sus propiedades de análisis. Una capa de análisis de matriz de coste OD es útil para representar una matriz de costes que oscilan desde un conjunto de ubicaciones de origen hasta un conjunto de ubicaciones de destino.
Uso
Después de crear la capa de análisis con esta herramienta, puede agregarle objetos de análisis de red usando la herramienta Agregar ubicaciones, resolver el análisis usando la herramienta Resolver y guardar los resultados en el disco usando la herramienta Guardar en archivo de capa.
Al utilizar esta herramienta en modelos de geoprocesamiento, si el modelo se ejecuta como herramienta, la capa de análisis de red de salida debe convertirse en parámetro de modelo; de lo contrario, la capa de salida no se agrega al contenido del mapa.
Sintaxis
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})
Parámetro | Explicación | Tipo de datos |
in_network_dataset | El dataset de red en el que se realizará el análisis de matriz de coste OD. | Network Dataset Layer |
out_network_analysis_layer | Nombre de la capa de análisis de red de matriz de coste OD que se creará. | String |
impedance_attribute | El atributo de coste que se usará como impedancia en el análisis. | String |
default_cutoff (Opcional) | Valor de impedancia predeterminado en el cual detener la búsqueda de destinos para un origen determinado. Si la impedancia acumulada supera el valor límite, el trazado poligonal se detiene. El valor predeterminado se puede invalidar especificando el valor límite en los orígenes. | Double |
default_number_destinations_to_find (Opcional) | Cantidad predeterminada de destinos a encontrar para cada origen. Se puede invalidar el valor predeterminado especificando un valor para la propiedad TargetDestinationCount en los orígenes. | Long |
accumulate_attribute_name [accumulate_attribute_name,...] (Opcional) | Lista de los atributos de coste que se acumularán durante el análisis. Estos atributos de acumulación se usan específicamente a modo de referencia; el solucionador solo utiliza los atributos de coste especificados por el parámetro Atributo de impedancia para calcular la ruta. Para cada atributo de coste acumulado, se agrega una propiedad Total_[Impedance] a las rutas generadas por el solucionador. | String |
UTurn_policy (Opcional) | Política de cambios de sentido en los cruces. Permitir cambios de sentido implica que el solucionador puede dar la vuelta en un cruce y regresar por la misma calle. Debido a que los cruces representan intersecciones de calles y callejones sin salida, los diferentes vehículos pueden ser capaces de dar la vuelta en algunos cruces, pero no en otros, depende de que el cruce sea una intersección o un callejón sin salida. Para dar cabida a esta situación, el parámetro de la política de cambios de sentido se especifica implícitamente por la cantidad de ejes que se conectan en el cruce, lo que se conoce como valencia de cruce. Los valores aceptables para este parámetro se enumeran a continuación; cada uno seguido de una descripción de su significado en términos de valencia de cruce.
Si necesita una política más definida respecto a la política de cambios de sentido, considere agregar un evaluador de retraso de giro global con un atributo de coste de red, o ajustar su configuración si existe, y prestar especial atención a la configuración de los giros de 180 grados. Asimismo, examine la configuración de la propiedad CurbApproach de las ubicaciones de la red. | String |
restriction_attribute_name [restriction_attribute_name,...] (Opcional) | Lista de atributos de restricción que se aplicarán durante el análisis. | String |
hierarchy (Opcional) |
El parámetro no se utiliza si no se definen atributos de jerarquía en el dataset de red utilizado para realizar el análisis. En tales casos, utilice "#" como el valor de parámetro. | Boolean |
hierarchy_settings (Opcional) | Network Analyst Hierarchy Settings | |
output_path_shape (Opcional) |
Sin importar el tipo de forma de salida elegido, la mejor ruta siempre se determina mediante la impedancia de red, nunca según la distancia euclidiana. Esto significa que solo las formas de las rutas son diferentes, y no el trazado poligonal subyacente de la red. | String |
time_of_day (Opcional) | Indica la hora de salida de los orígenes. Si eligió un atributo de impedancia con base en el tráfico, la solución se generará dadas las condiciones de tráfico dinámicas a la hora del día que se especifica a continuación. Una fecha y hora se puede especificar como 14/5/2012 10:30 a.m. En lugar de usar una fecha determinada, también se puede especificar un día de la semana utilizando las siguientes fechas:
| Date |
Salida derivada
Nombre | Explicación | Tipo de datos |
output_layer | La capa de análisis de red recién creada. | Capa de Network Analyst |
Muestra de código
Ejemplo 1 de MakeODCostMatrixLayer (ventana de Python)
Ejecutar la herramienta utilizando solo los parámetros requeridos.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime")
Ejemplo 2 de MakeODCostMatrixLayer (ventana de Python)
Ejecutar la herramienta utilizando todos los parámetros.
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")
Ejemplo 3 de MakeODCostMatrixLayer (flujo de trabajo)
En la siguiente secuencia independiente de comandos de Python se muestra cómo se puede utilizar la herramienta MakeODCostMatrixLayer para crear una matriz de coste origen-destino para la entrega de productos desde el almacén hasta todas las tiendas dentro de un tiempo de viaje de 10 minutos.
# 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
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/data/Paris.gdb"
env.overwriteOutput = True
#Set local variables
inNetworkDataset = "Transportation/ParisMultimodal_ND"
outNALayerName = "WarehouseToStoreDrivetimeMatrix"
impedanceAttribute = "Drivetime"
searchTolerance = "1000 Meters"
accumulateAttributeName = ["Meters"]
inOrgins = "Analysis/Warehouses"
inDestinations = "Analysis/Stores"
outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
#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.
outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
impedanceAttribute, 10, "",
accumulateAttributeName)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
outNALayer = outNALayer.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
originsLayerName = subLayerNames["Origins"]
destinationsLayerName = subLayerNames["Destinations"]
#Load the warehouse locations as origins using a default field mappings and
#a search tolerance of 1000 Meters.
arcpy.na.AddLocations(outNALayer, originsLayerName, inOrgins, "",
searchTolerance)
#Load the store locations as destinations and map the NOM field from stores
#features as Name property using field mappings
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, destinationsLayerName)
fieldMappings["Name"].mappedFieldName = "NOM"
arcpy.na.AddLocations(outNALayer, destinationsLayerName, inDestinations,
fieldMappings, searchTolerance)
#Solve the OD cost matrix layer
arcpy.na.Solve(outNALayer)
#Save the solved OD cost matrix layer as a layer file on disk with relative
#paths
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
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)
Ejemplo 4 de MakeODCostMatrixLayer (flujo de trabajo)
El siguiente script de Phython independiente muestra cómo se accede a subcapas, se unen capas de entrada y salida y se transfieren valores de campo desde los orígenes y destinos de entrada a la capa de líneas de salida.
# 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 datetime
#Import system modules
import arcpy
from arcpy import env
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/Data/SanFrancisco.gdb"
env.overwriteOutput = True
#Set inputs and outputs
inNetworkDataset = "Transportation/Streets_ND"
inOrigins = "Analysis/TractCentroids"
inDestinations = "Analysis/Hospitals"
outNALayerName = "HospitalsOD"
outTracts_withOD = "Analysis/TractCentroids_withOD"
#Define some OD cost matrix analysis settings
#Optimize based on travel time
impedanceAttribute = "TravelTime"
#Calculate the total distance, even though the analysis is optimizing time
accumulate_attrs = ["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.
outODResultObject = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset,
outNALayerName, impedanceAttribute,
default_number_destinations_to_find=num_hospitals_to_find,
accumulate_attribute_name=accumulate_attrs,
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.
outNALayer = outODResultObject.getOutput(0)
#Get the names of all the sublayers within the OD layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Store the layer names for later use
originsLayerName = subLayerNames["Origins"]
destinationsLayerName = subLayerNames["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(outNALayer, originsLayerName,
"Tract_ID", "TEXT")
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, originsLayerName)
fieldMappings["Tract_ID"].mappedFieldName = "ID"
#Load the census tracts as origins.
arcpy.na.AddLocations(outNALayer, originsLayerName, inOrigins,
fieldMappings, "",
exclude_restricted_elements = "EXCLUDE")
#Map the input hospital NAME field to a new Hospital_Name field in
#Destinations
arcpy.na.AddFieldToAnalysisLayer(outNALayer, destinationsLayerName,
"Hospital_Name", "TEXT")
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
destinationsLayerName)
fieldMappings["Hospital_Name"].mappedFieldName = "NAME"
#Load the hospitals as desinations.
arcpy.na.AddLocations(outNALayer, destinationsLayerName, inDestinations,
fieldMappings, "",
exclude_restricted_elements = "EXCLUDE")
#Solve the OD layer
arcpy.na.Solve(outNALayer)
#Get sublayers
#arcpy.mapping.ListLayers returns a list of layer objects containing the NA
#layer itself (item 0) and each of the sublayers. Put these in a dictionary
#with the sublayer names as the keys
subLayers = dict((lyr.datasetName, lyr) for lyr in arcpy.mapping.ListLayers(outNALayer)[1:])
OriginsSubLayer = subLayers["Origins"]
DestinationsSubLayer = subLayers["Destinations"]
LinesSubLayer = subLayers["ODLines"]
#Transfer the tract ID from the input Origins to the output Lines
arcpy.management.JoinField(LinesSubLayer, "OriginID",
OriginsSubLayer, "ObjectID", "Tract_ID")
#Transfer the hospital name from the input Destinations to the output Lines
arcpy.management.JoinField(LinesSubLayer, "DestinationID",
DestinationsSubLayer, "ObjectID", "Hospital_Name")
#Transfer fields of interest (hospital name, TravelTime cost, and other
#accumulated costs) from the output Lines to the input census tracts
#feature class using the Tract_ID field
output_impedance_fieldname = "Total_" + impedanceAttribute
fields_to_transfer = ["Hospital_Name", output_impedance_fieldname]
for field in accumulate_attrs:
fields_to_transfer.append("Total_" + field)
arcpy.management.CopyFeatures(inOrigins, outTracts_withOD)
arcpy.management.JoinField(outTracts_withOD, "ID",
LinesSubLayer, "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)
Entornos
Información de licenciamiento
- Basic: Sí
- Standard: Sí
- Advanced: Sí