Resumen
Crea una capa de análisis de red de área de servicio y establece sus propiedades de análisis. Una capa de análisis del área de servicio es útil para determinar el área de accesibilidad dentro de un coste de valor límite dado desde la ubicación de una instalación.
Heredado:
Esta es una herramienta obsoleta. Esta función se ha reemplazado por la herramienta Crear capa de análisis del área de servicios.
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.MakeServiceAreaLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {travel_from_to}, {default_break_values}, {polygon_type}, {merge}, {nesting_type}, {line_type}, {overlap}, {split}, {excluded_source_name}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {polygon_trim}, {poly_trim_value}, {lines_source_fields}, {hierarchy}, {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 del área de servicio. | Network Dataset Layer |
out_network_analysis_layer | Nombre de la capa de análisis de red de área del servicio que se creará. | String |
impedance_attribute | El atributo de coste que se usará como impedancia en el análisis. | String |
travel_from_to (Opcional) | Especifica la dirección de viaje hacia o desde las instalaciones.
Utilizando esta opción se pueden encontrar distintas áreas de servicio en una red con restricciones unidireccionales e impedancias diferentes basadas en la dirección del viaje. El área de servicio de una tienda de entrega de pizzas, por ejemplo, se debe crear alejada de la instalación, mientras que el área de servicio de un hospital se debe crear cerca de la instalación. | String |
default_break_values (Opcional) | Los valores predeterminados de impedancia que indican la extensión del área de servicio que se calculará. El valor predeterminado se puede invalidar especificando el valor del corte en las instalaciones. Se pueden establecer varios cortes de polígonos para crear áreas de servicio concéntricas. Por ejemplo, para encontrar áreas de servicio de 2, 3 y 5 minutos para la misma instalación, especifique "2 3 5" como el valor para el parámetro de valores de Corte predeterminado (los números 2, 3 y 5 deben estar separados por un espacio). | String |
polygon_type (Opcional) | Especifica el tipo de polígonos que se generarán.
Si sus datos corresponden a un área urbana con una red semejante a una cuadrícula, la diferencia entre los polígonos generalizados y detallados sería mínima. Sin embargo, para los caminos rurales y de montaña, los polígonos detallados pueden presentar resultados significativamente más precisos que los polígonos generalizados. | String |
merge (Opcional) | Especifica las opciones para fusionar polígonos que comparten valores de corte similares. Esta opción se puede aplicar sólo cuando se generan polígonos para varias instalaciones.
| String |
nesting_type (Opcional) | Especifica la opción para crear polígonos de área de servicio concéntricos como discos o anillos. Esta opción se puede aplicar solo cuando se especifican varios valores de corte para las instalaciones.
| String |
line_type (Opcional) | Especifica el tipo de líneas que se generarán basadas en el análisis del área de servicio. Si selecciona la opción TRUE_LINES o TRUE_LINES_WITH_MEASURES para áreas de servicio grandes, aumentará la cantidad de memoria consumida por el análisis.
| String |
overlap (Opcional) | Determina si las líneas superpuestas se generan cuando se calculan las líneas de área de servicio.
| Boolean |
split (Opcional) |
| Boolean |
excluded_source_name [excluded_source_name,...] (Opcional) | Especifica la lista de fuentes de red que se excluirán cuando se generen los polígonos. La geometría de los elementos atravesados de las fuentes excluidas se omitirá en todos los polígonos. Esta opción es útil cuando no desea incluir algunas fuentes de red en la generación de polígonos porque crean polígonos menos exactos o porque son intrascendentes para el análisis del área de servicio. Por ejemplo, mientras crea un área de servicio de tiempo de viaje en una red de varios modelos de calles y carriles, debe elegir excluir las líneas de carriles de la generación de polígonos para poder modelar correctamente la ruta por la que puede viajar un vehículo. La exclusión de una fuente de red de los polígonos de las áreas de servicio no evita que dichas fuentes se atraviesen. Excluir las fuentes de los polígonos de las áreas de servicio solo influye en la forma poligonal de las áreas de servicio. Si desea evitar atravesar una determinada fuente de red, debe crear una restricción adecuada al definir su dataset de red. | String |
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 solo se utilizan como 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_[Impedancia] a las rutas generadas por el solucionador. | String |
UTurn_policy (Opcional) | Especifica la política de cambio de sentido que se usará 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, distintos vehículos pueden dar la vuelta en algunos cruces, pero no en otros; depende de si el cruce representa 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 de cambios de sentido definida de forma más precisa, plantéese agregar un evaluador de retraso de giro global a un atributo de coste de red, o bien ajuste su configuración si existe, y preste especial atención a la configuración de los giros inversos. También puede definir la propiedad CurbApproach de sus ubicaciones de red. | String |
restriction_attribute_name [restriction_attribute_name,...] (Opcional) | Lista de atributos de restricción que se aplicarán durante el análisis. | String |
polygon_trim (Opcional) |
| Boolean |
poly_trim_value (Opcional) | Especifica la distancia dentro de la que se acortarán los polígonos del área de servicio. El parámetro incluye un valor y unidades para la distancia. El valor predeterminado es 100 metros. | Linear Unit |
lines_source_fields (Opcional) |
| Boolean |
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. | Boolean |
time_of_day (Opcional) | La hora de salida o de llegada a las instalaciones de la capa de área de servicio. La interpretación de este valor como una hora de salida o llegada depende de si el viaje es desde o hacia las instalaciones.
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:
Repetidamente solucionar el mismo análisis, pero utilizando diferentes valores de Hora del día, le permite ver cómo alcanza cambios una instalación con el transcurso del tiempo. Por ejemplo, el área de servicio de cinco minutos alrededor de una estación de bomberos podría comenzar con gran volumen en las primeras horas de la mañana, disminuir en la hora punta, aumentar en las últimas horas de la mañana y así sucesivamente durante el día. | 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
Ejecutar la herramienta utilizando solo los parámetros requeridos.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaLayer(network, "FireStationCoverage", "TravelTime")
Ejecutar la herramienta utilizando todos los parámetros.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaLayer(network, "WarehouseCoverage", "DriveTime",
"TRAVEL_FROM", "5 10 15", "SIMPLE_POLYS",
"NO_OVERLAP", "RINGS", "TRUE_LINES",
"NON_OVERLAP", "NO_SPLIT",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"],
["Meters", "DriveTime"], "ALLOW_DEAD_ENDS_ONLY",
["Oneway"], "NO_TRIM_POLYS", "",
"LINES_SOURCE_FIELDS")
En la siguiente secuencia independiente de comandos de Python se muestra cómo se puede utilizar la herramienta MakeServiceAreaLayer para generar áreas de servicio a 1, 2 y 3 minutos alrededor de estaciones de bomberos.
# Name: MakeServiceAreaLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
# save the results to a layer file on disk. The service area
# polygons can be used to visualize the areas that do not have
# adequate coverage from the fire stations
# 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/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
impedance = "TravelTime"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new service area layer. We wish to generate the service area
#polygons as rings, so that we can easily visualize the coverage for any
#given location. We also want overlapping polygons as we can determine the
#number of fire stations that cover a given location. We use hierarchy to
#speed up the time taken to create the polygons. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "1 2 3",
"DETAILED_POLYS", "NO_MERGE", "RINGS")
#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
#Load the fire stations as facilities using default field mappings and
#default search tolerance
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Save the solved service area 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)))
Este ejemplo muestra cómo se crean áreas de servicio alrededor de instalaciones para múltiples horas del día, así como el modo de transportar campos de las entidades de entrada hasta las de salida y anexar polígonos de salida a una clase de entidad existente.
# Name: MakeServiceAreaLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os, datetime
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/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
out_featureclass = os.path.join(output_dir, "Output.gdb",
"FireStationCoverage")
impedance = "TravelTime"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
datetime.datetime(2014, 9, 25, 12, 30, 0),
datetime.datetime(2014, 9, 25, 17, 30, 0),
datetime.datetime(2014, 9, 25, 21, 0, 0)]
#Create a new service area layer.
result_object = arcpy.na.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "3",
"DETAILED_POLYS", "NO_MERGE",
hierarchy = "NO_HIERARCHY")
#Get the layer object from the result object. The service area layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
polygons_layer_name = sublayer_names["SAPolygons"]
#The input data has a field for FireStationID that we want to transfer to
#our analysis layer. Add the field, and then use field mapping to transfer
#the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
"FireStationID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FireStationID"].mappedFieldName = "FireStationID"
#Load the fire stations as facilities.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
field_mappings, "",
exclude_restricted_elements = "EXCLUDE")
# Add fields to the output Polygons sublayer for later use.
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"TimeOfDay", "TEXT")
#Get sublayers to work with later
facilities_sublayer = layer_object.listLayers(facilities_layer_name)[0]
polygons_sublayer = layer_object.listLayers(polygons_layer_name)[0]
#Get the Service Area Layer's solver properties. This can be used to
#set individual properties later without re-creating the layer.
solver_properties = arcpy.na.GetSolverProperties(layer_object)
#Solve the Service Area for each time of day in the time list
for t in times_of_day:
print("Calculating service area for time of day: ", t)
#Use the solver properties to set the time of day for the solve
solver_properties.timeOfDay = t
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Transfer the FireStationID field from the input Facilities to the
#output Polygons
arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
facilities_sublayer, "ObjectID")
#The joined fields are qualified by the feature class name of the joined
#table, so determine the feature class names
field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
target_field_name = "%s.FireStationID" % field_qualifier_pol
field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
expression = "!%s.FireStationID!" % field_qualifier_fac
arcpy.management.CalculateField(polygons_sublayer, target_field_name,
expression, "PYTHON")
arcpy.management.RemoveJoin(polygons_sublayer)
#Populate the TimeOfDay field in the output feature class
expression = '"' + str(t) + '"'
arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
expression, "PYTHON")
#Append the polygons to the output feature class. If this was the first
#solve, create the feature class.
if not arcpy.Exists(out_featureclass):
arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
else:
arcpy.management.Append(polygons_sublayer, out_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))
Entornos
Información de licenciamiento
- Basic: Sí
- Standard: Sí
- Advanced: Sí