Resumen
Crea una capa de análisis de red de ubicación y asignación y establece sus propiedades de análisis. Una capa de análisis de ubicación y asignación es útil para elegir una cantidad dada de instalaciones de un conjunto de posibles ubicaciones tal que una demanda se asigne a las instalaciones de manera óptima y eficiente. La capa se puede crear utilizando un dataset de red local o un servicio alojado en línea o en un portal.
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.
En ArcGIS Pro, los datos de las capas de análisis de red se almacenan en el disco en las clases de entidad de geodatabase de archivos. Al crear una capa de análisis de red en un proyecto, los datos de la capa se crearán en un nuevo dataset de entidades en el entorno de Espacio de trabajo actual. Al crear una capa de análisis de red en un script de Python, primero debe definir explícitamente el entorno del espacio de trabajo en la geodatabase de archivos donde desea que se almacenen los datos de la capa utilizando arcpy.env.workspace = "<path to file gdb>". Cuando se crea la capa, un dataset de entidades nuevo que contiene las clases de entidades de la subcapa correspondiente se agregará a esta geodatabase de archivos.
Sintaxis
arcpy.na.MakeLocationAllocationAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {problem_type}, {cutoff}, {number_of_facilities_to_find}, {decay_function_type}, {decay_function_parameter_value}, {target_market_share}, {capacity}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes})
Parámetro | Explicación | Tipo de datos |
network_data_source | El servicio o dataset de red en el que se realizará el análisis de red. Utilice la dirección URL del portal para un servicio. | Network Dataset Layer;String |
layer_name (Opcional) | El nombre de la capa de análisis de red que se creará. | String |
travel_mode (Opcional) | El nombre del modo de viaje que se utilizará en el análisis. El modo de viaje representa un conjunto de parámetros de red como, por ejemplo, restricciones del viaje y las normas sobre cambios de sentido, que determina cómo un peatón, un coche, un camión u otro medio de transporte se desplaza por la red. Los modos de viaje se definen en su fuente de datos de red. También puede utilizar como entrada del parámetro un objeto arcpy.na.TravelMode y una cadena que contenga la representación JSON válida de un modo de viaje. | String |
travel_direction (Opcional) | Especifica la dirección de viaje entre las instalaciones y los puntos de demanda cuando se calculan los costes de red.
El uso de esta opción puede afectar la asignación de los puntos de demanda a las instalaciones de una red con restricciones unidireccionales y diferentes impedancias basadas en la dirección del viaje. Por ejemplo, se puede tardar 15 minutos en viajar desde el punto de demanda hasta la instalación y solo 10 minutos desde la instalación hasta el punto de demanda. | String |
problem_type (Opcional) | El tipo de problema que se resolverá. La elección del tipo de problema depende del tipo de instalación que se está ubicando. Los distintos tipos de instalaciones tienen distintas prioridades y restricciones.
| String |
cutoff (Opcional) | La impedancia máxima con la que se puede asignar un punto de demanda a una instalación, expresada en las unidades del atributo de impedancia que se utiliza en el Modo de viaje elegido. La impedancia máxima se mide mediante la trayectoria de menor coste a lo largo de la red. Si un punto de demanda está fuera de la tolerancia, se deja sin asignar. Esta propiedad se podría utilizar para modelar la distancia máxima que las personas están dispuestas a recorrer para visitar las tiendas, o el tiempo máximo que se permite que tarde un departamento de bomberos en alcanzar cualquier punto de la comunidad. Se puede invalidar este valor límite por punto de demanda, especificando valores límite individuales en la subcapa de puntos de demanda de la propiedad Cutoff_[Impedancia]. Por ejemplo, quizá descubra que en áreas rurales las personas estén dispuestas a recorrer hasta 10 millas para llegar a una instalación, mientras que los urbanitas solo están dispuestos a recorrer 2 millas. Puede modelar este comportamiento estableciendo el Valor límite de la capa de análisis a 10 y estableciendo el valor Cutoff_Miles de cada punto de demanda en las áreas urbanas a 2. De forma predeterminada, no se utiliza ningún valor límite en el análisis. | Double |
number_of_facilities_to_find (Opcional) | Especifica la cantidad de instalaciones que el solucionador debe ubicar. De forma predeterminada, este parámetro está establecido a 1. Las instalaciones con un valor FacilityType de Requerido siempre forman parte de la solución cuando hay más instalaciones para buscar que instalaciones requeridas; las instalaciones sobrantes para elegir se seleccionan entre las instalaciones candidatas. Las instalaciones que tengan un FacilityType con el valor de Elegida antes de resolver se tratan como instalaciones candidatas en el momento de la resolución. El valor de parámetro no se tiene en cuenta para el tipo de problema MINIMIZE_FACILITIES debido a que el solucionador determina la cantidad mínima de instalaciones a ubicar para maximizar la cobertura. El valor de parámetro se invalida para el tipo de problema TARGET_MARKET_SHARE debido a que el solucionador busca la cantidad mínima de instalaciones necesarias para capturar la cuota de mercado especificada. | Long |
decay_function_type (Opcional) | Establece la ecuación para transformar el coste de la red entre instalaciones y puntos de demanda. Esta propiedad, junto al Valor de parámetro de función de decaimiento, especifica hasta qué punto influye la impedancia de red entre las instalaciones y los puntos de demanda en la elección de instalaciones por parte del solucionador.
Los puntos de demanda tienen una propiedad ImpedanceTransformation que, si se establece, invalida la propiedad Valor de parámetro de función de decaimiento de la capa del análisis por punto de demanda. Puede determinar que la función de decaimiento sea distinta para residentes urbanos y rurales. Puede modelar esto configurando la transformación de impedancia para la capa de análisis para que coincida con la de los residentes rurales y configurando la transformación de impedancia de los puntos de demanda individuales ubicados en áreas urbanas para que coincidan con la de las urbanizaciones. | String |
decay_function_parameter_value (Opcional) | Proporciona un valor de parámetro a las ecuaciones especificadas en el parámetro decay_function_type. El valor del parámetro se ignora cuando la función de decaimiento es de tipo LINEAR. Para las funciones de decaimiento POWER y EXPONENTIAL, el valor debe ser distinto de cero. Los puntos de demanda tienen una propiedad ImpedanceTransformation que, si se establece, invalida la propiedad decay_function_parameter_value de la capa del análisis por punto de demanda. Puede determinar que la función de decaimiento sea distinta para residentes urbanos y rurales. Puede modelar esto configurando la transformación de impedancia para la capa de análisis para que coincida con la de los residentes rurales y configurando la transformación de impedancia de los puntos de demanda individuales ubicados en áreas urbanas para que coincidan con la de las urbanizaciones. | Double |
target_market_share (Opcional) | Especifica la cuota de mercado objetivo en porcentaje que desea solucionar cuando el parámetro problem_type está configurado como TARGET_MARKET_SHARE. Es el porcentaje del peso de demanda total que desea que capturen las instalaciones de solución. El solucionador elige la cantidad mínima de instalaciones necesarias para capturar la cuota de mercado objetivo especificada por este valor numérico. | Double |
capacity (Opcional) | Especifica la capacidad predeterminada de las instalaciones cuando el parámetro problem_type se establece en MAXIMIZE_CAPACITATED_COVERAGE. Este parámetro se ignora para todos los demás tipos de problema. Las instalaciones tienen una propiedad Capacidad que, si se establece un valor no nulo, invalida el parámetro capacity para esa instalación. | Double |
time_of_day (Opcional) | Indica la hora y fecha de la salida. La hora de la salida puede ser desde las instalaciones o desde los puntos de demanda, dependiendo de si la Dirección del viaje es desde la demanda hasta la instalación o desde instalación hasta la demanda. 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 |
time_zone (Opcional) | La zona horaria del parámetro Hora del día.
| String |
line_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 la ruta son diferentes, no los elementos transitables subyacentes de la red. | String |
accumulate_attributes [accumulate_attributes,...] (Opcional) | Lista de los atributos de coste que se acumularán durante el análisis. Estos atributos acumulados solo se utilizan como referencia; el solucionador solo utiliza el atributo de coste empleado en el modo de viaje indicado al solucionar el análisis. Para cada atributo de coste acumulado, se rellena una propiedad Total_[Impedance] en las entidades de salida del análisis de red. Este parámetro no está disponible si la fuente de datos de red es un servicio ArcGIS Online o si la fuente de datos de red es un servicio en una versión de Portal for ArcGIS que no admite la acumulación. | String |
Salida derivada
Nombre | Explicación | Tipo de datos |
out_network_analysis_layer | La capa de análisis de red recién creada. | Capa de Network Analyst |
Muestra de código
Ejecutar la herramienta utilizando solo los parámetros requeridos.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "StoreLocations")
Ejecutar la herramienta utilizando todos los parámetros.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "NewStores",
"Driving Time", "TO_FACILITIES",
"MAXIMIZE_ATTENDANCE", 3, 5, "POWER", 2, "",
"", "1/1/1900 9:00 AM", "UTC",
"STRAIGHT_LINES", ["TravelTime", "Meters"])
En la siguiente secuencia independiente de comandos de Python se muestra cómo utilizar la herramienta MakeLocationAllocationAnalysisLayer para elegir las ubicaciones de tienda que generarían la mayor cantidad de negocio para una cadena de tiendas.
# Name: MakeLocationAllocationAnalysisLayer_Workflow.py
# Description: Choose the store locations that would generate the most business
# for a retail chain. For this scenario, we will perform the
# location-Allocation analysis using the maximize attendance
# problem type.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#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/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "NewStoreLocations"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "CandidateStores")
required_facility = os.path.join(input_gdb, "Analysis", "ExistingStore")
demand_points = os.path.join(input_gdb, "Analysis", "TractCentroids")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new location-allocation layer. In this case, the demand travels to
#the facility. We wish to find 3 potential store locations out of all the
#candidate store locations using the maximize attendance model.
result_object = arcpy.na.MakeLocationAllocationAnalysisLayer(network,
layer_name, travel_mode, "TO_FACILITIES",
"MAXIMIZE_ATTENDANCE", cutoff=20,
number_of_facilities_to_find=3)
#Get the layer object from the result object. The location-allocation layer
#can now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the location-allocation layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
demand_points_layer_name = sublayer_names["DemandPoints"]
#Load the candidate store locations as facilities using default search
#tolerance and field mappings.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Load the existing store location as the required facility. Use the field
#mappings to set the facility type to requried. We need to append this
#required facility to existing facilities.
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FacilityType"].defaultValue = 1
arcpy.na.AddLocations(layer_object, facilities_layer_name,
required_facility, field_mappings, "",
append="APPEND")
#Load the tract centroids as demand points using default search tolerance
#Use the field mappings to map the Weight property from POP2000 field.
demand_field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
demand_points_layer_name)
demand_field_mappings["Weight"].mappedFieldName = "POP2000"
arcpy.na.AddLocations(layer_object, demand_points_layer_name, demand_points,
demand_field_mappings, "")
#Solve the location-allocation layer
arcpy.na.Solve(layer_object)
#Save the solved location-allocation 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))
Entornos
Información de licenciamiento
- Basic: Sí
- Standard: Sí
- Advanced: Sí