Crear capa de análisis de ruta (Network Analyst)

Resumen

Crea una capa de análisis de red de ruta y establece sus propiedades de análisis. Una capa de análisis de ruta es útil para determinar la mejor ruta entre un conjunto de ubicaciones de red en función de un costo de red específico. La capa se puede crear utilizando un dataset de red local o un servicio de generación de rutas 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

MakeRouteAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {sequence}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes}, {generate_directions_on_solve}, {time_zone_for_time_fields})
ParámetroExplicaciónTipo 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 se 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
sequence
(Opcional)

Especifica si las paradas de entrada se deben visitar en un orden concreto al calcular la ruta óptima. Esta opción cambia el análisis de ruta de un problema de ruta más corta a un problema del vendedor viajero (TSP).

  • USE_CURRENT_ORDERSe visitarán las paradas en el orden de entrada. Esta es la opción predeterminada.
  • FIND_BEST_ORDERSe reordenarán las paradas para encontrar la ruta óptima. Esta opción cambia el análisis de ruta de un problema de ruta más corta a un problema del vendedor viajero (TSP).
  • PRESERVE_BOTHMantener las paradas inicial y final por orden de entrada. El resto se reordenará para encontrar la ruta óptima.
  • PRESERVE_FIRSTMantener la parada inicial por orden de entrada. El resto se reordenará para encontrar la ruta óptima.
  • PRESERVE_LASTMantener la parada final por orden de entrada. El resto se reordenará para encontrar la ruta óptima.
String
time_of_day
(Opcional)

La fecha y hora de inicio para la ruta. La hora de inicio de una ruta se utiliza típicamente para encontrar rutas en función del atributo de impedancia que varía según el momento del día. Por ejemplo, se podría utilizar la hora de inicio de las 7:00 a.m. para encontrar una ruta en la que se tenga en cuenta el tráfico en hora punta. El valor predeterminado de este parámetro es 8:00 a.m. Una fecha y hora se puede especificar como 21/10/05 10:30 a.m. Si la ruta abarca varios días, y solamente se especifica la hora de inicio, se utilizará la fecha actual.

En lugar de usar una fecha determinada, también se puede especificar un día de la semana utilizando las siguientes fechas:

  • Hoy, 30/12/1899
  • Domingo, 31/12/1899
  • Lunes, 1/1/1900
  • Martes, 2/1/1900
  • Miércoles, 3/1/1900
  • Jueves, 4/1/1900
  • Viernes, 5/1/1900
  • Sábado, 6/1/1900

Por ejemplo, para especificar que el viaje debería empezar a las 5:00 p.m. el martes, especifique el valor de parámetro como 2/1/1900 5:00 PM.

Después de la resolución, se completan las horas de inicio y fin de la ruta en las rutas de salida. Estas horas de inicio y fin también se usan cuando se generan indicaciones.

Date
time_zone
(Opcional)

Especifica la zona horaria del parámetro time_of_day.

  • LOCAL_TIME_AT_LOCATIONSEl parámetro time_of_day hace referencia a la zona horaria donde se encuentra la primera parada de una ruta. Esta es la opción predeterminada.Si va a generar muchas rutas que empiezan en varias zonas horarias, los tiempos de inicio se escalonarán en hora universal coordinada (UTC). Por ejemplo, un valor de time_of_day a 10:00 a.m., 2 de enero, significaría una hora de inicio igual a las 10:00 a.m. hora estándar del este (3:00 p.m. UTC) para las rutas que empiecen en la zona horaria oriental y 10:00 a.m. hora estándar central (4:00 p.m. UTC) para las rutas que empiecen en la zona horaria central. Las horas de inicio se desplazan en una hora en UTC.Las fechas y horas de llegada y salida registradas en la clase de entidad Paradas de salida harán referencia a la zona horaria local de la primera parada de cada ruta.
  • UTCEl parámetro time_of_day se refiere al tiempo universal coordinado (UTC). Seleccione esta opción si desea generar una ruta para una hora determinada, como ahora, pero no está seguro de la zona horaria en que se encontrará la primera parada.Si va a generar muchas rutas que abarquen varias zonas horarias, las horas de inicio en UTC serán simultáneas. Por ejemplo, un valor de time_of_day a 10:00 a.m., 2 de enero, significaría una hora de inicio igual a las 5:00 a.m. hora estándar del este (10:00 p.m. UTC) para las rutas que empiecen en la zona horaria oriental y 4:00 a.m. hora estándar central (10:00 a.m. UTC) para las rutas que empiecen en la zona horaria central. Ambas rutas empezarían a las 10:00 a.m. UTC.Las fechas y horas de llegada y salida registradas en la clase de entidad Paradas de salida se referirán a UTC.
String
line_shape
(Opcional)

Especifica el tipo de forma para las entidades de ruta que son la salida del análisis.

  • ALONG_NETWORKLas rutas de salida tendrán la misma forma que las fuentes de red subyacentes. La salida incluye mediciones de ruta para la referenciación lineal. Las mediciones aumentan desde la primera parada y registran la impedancia acumulativa para alcanzar una posición determinada.
  • NO_LINESNo se generará ninguna forma para las rutas de salida.
  • STRAIGHT_LINESLa forma de la ruta de salida será una línea recta simple entre las paradas.

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
generate_directions_on_solve
(Opcional)

Especifica si se generarán indicaciones al ejecutar el análisis.

  • DIRECTIONSSe generarán indicaciones paso a paso al resolver. Esta es la opción predeterminada.
  • NO_DIRECTIONSNo se generarán indicaciones paso a paso al resolver.

En el caso de un análisis en el que no sea necesario generar indicaciones paso a paso, usar la opción NO_DIRECTIONS hará que se reduzca el tiempo que se tarda en resolver el análisis.

Boolean
time_zone_for_time_fields
(Opcional)

Especifica la zona horaria que se utilizará para interpretar los campos de hora incluidos en las tablas de entrada, como los campos empleados en las ventanas temporales.

  • LOCAL_TIME_AT_LOCATIONSLos valores de fecha y hora de los campos de hora correspondientes a la parada se interpretarán con arreglo a la zona horaria en la que se produce la parada. Esta es la opción predeterminada.
  • UTCLos valores de fecha y hora de los campos de hora correspondientes a la parada se refieren al tiempo universal coordinado (UTC).
String

Salida derivada

NombreExplicaciónTipo de datos
out_network_analysis_layer

La capa de análisis de red de salida.

Capa de Network Analyst

Muestra de código

Ejemplo 1 de MakeRouteAnalysisLayer (ventana de Python)

Ejecutar la herramienta utilizando solo los parámetros requeridos.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "WorkRoute")
Ejemplo 2 de MakeRouteAnalysisLayer (ventana de Python)

Ejecutar la herramienta utilizando todos los parámetros.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "InspectionRoute", "Driving Time",
                        "FIND_BEST_ORDER", "1/1/1900 9:00 AM", "UTC",
                        "ALONG_NETWORK", ["Meters", "TravelTime"])
Ejemplo 3 de MakeRouteAnalysisLayer (flujo de trabajo)

En la siguiente secuencia independiente de comandos de Python se muestra cómo se puede utilizar la herramienta MakeRouteAnalysisLayer para encontrar la mejor ruta para visitar las ubicaciones de parada geocodificadas.

# Name: MakeRouteAnalysisLayer_Workflow.py
# Description: Find a best route to visit the stop locations and save the
#              route to a layer file. The stop locations are geocoded from a
#              text file containing the addresses.
# 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 = "BestRoute"
    travel_mode = "Driving Time"
    address_locator = "C:/Data/SanFranciscoLocator"
    address_table = "C:/Data/StopAddresses.csv"
    address_fields = "Street Address;City City;State State;ZIP <None>"
    out_stops = "GeocodedStops"
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new Route layer. For this scenario, the default values for all the
    #remaining parameters statisfy the analysis requirements
    result_object = arcpy.na.MakeRouteAnalysisLayer(network, layer_name,
                                                                    travel_mode)

    #Get the layer object from the result object. The route layer can now be
    #referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the route layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    stops_layer_name = sublayer_names["Stops"]

    #Geocode the stop locations from a csv file containing the addresses.
    #The Geocode Addresses tool can use a text or csv file as input table
    #as long as the first line in the file contains the field names.
    arcpy.geocoding.GeocodeAddresses(address_table, address_locator,
                                     address_fields, out_stops)

    #Load the geocoded address locations as stops mapping the address field from
    #geocoded stop features as Name property using field mappings.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                            stops_layer_name)
    field_mappings["Name"].mappedFieldName = "Address"
    arcpy.na.AddLocations(layer_object, stops_layer_name, out_stops,
                            field_mappings, "")

    #Solve the route layer, ignoring any invalid locations such as those that
    #cannot be geocoded
    arcpy.na.Solve(layer_object, "SKIP")

    #Save the solved route 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))
Ejemplo 4 de MakeRouteAnalysisLayer (flujo de trabajo)

En este ejemplo se muestra cómo calcular varias rutas en una única solución, un método útil para calcular distancias o tiempos de conducción entre pares de origen-destino.

# Name: MakeRouteAnalysisLayer_MultiRouteWorkflow.py
# Description: Calculate the home-work commutes for a set of people and save
#              the output to a feature class
# Requirements: Network Analyst Extension

#Import system modules
import arcpy
from arcpy import env
import datetime
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")
    stops_home = os.path.join(input_gdb, "Analysis", "Commuters_Home")
    stops_work = os.path.join(input_gdb, "Analysis", "Commuters_Work")
    layer_name = "Commuters"
    out_routes_featureclass = "Commuter_Routes"
    travel_mode = "Driving Time"

    #Set the time of day for the analysis to 8AM on a generic Monday.
    start_time = datetime.datetime(1900, 1, 1, 8, 0, 0)

    #Create a new Route layer.  Optimize on driving time, but compute the
    #distance traveled by accumulating the Meters attribute.
    result_object = arcpy.na.MakeRouteAnalysisLayer(network, layer_name,
                                        travel_mode, time_of_day=start_time,
                                        accumulate_attributes=["Meters"])

    #Get the layer object from the result object. The route layer can now be
    #referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the route layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    stops_layer_name = sublayer_names["Stops"]
    routes_layer_name = sublayer_names["Routes"]

    #Before loading the commuters' home and work locations as route stops, set
    #up field mapping.  Map the "Commuter_Name" field from the input data to
    #the RouteName property in the Stops sublayer, which ensures that each
    #unique Commuter_Name will be placed in a separate route.  Matching
    #Commuter_Names from stops_home and stops_work will end up in the same
    #route.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object, stops_layer_name)
    field_mappings["RouteName"].mappedFieldName = "Commuter_Name"

    #Add the commuters' home and work locations as Stops. The same field mapping
    #works for both input feature classes because they both have a field called
    #"Commuter_Name"
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_home,
                        field_mappings, "")
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
                        field_mappings, "", append="APPEND")

    #Solve the route layer.
    arcpy.na.Solve(layer_object)

    # Get the output Routes sublayer and save it to a feature class
    routes_sublayer = layer_object.listLayers(routes_layer_name)[0]
    arcpy.management.CopyFeatures(routes_sublayer, out_routes_featureclass)

    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))

Información de licenciamiento

  • Basic: Sí
  • Standard: Sí
  • Advanced: Sí

Temas relacionados