Crear la capa de área de servicio (Network Analyst)

Nivel de licencia:BasicStandardAdvanced

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.

NotaNota:

Las herramientas Generar áreas de servicio y Crear la capa de área de servicio son similares, pero están diseñadas para diferentes propósitos. Utilice Generar áreas de servicio si está configurando un servicio de geoprocesamiento; va a simplificar el proceso de instalación. De lo contrario, utilice Crear la capa de área de servicio. Además, utilice Crear la capa de área de servicio si necesita generar líneas de área de servicio; Generar áreas de servicio no proporcionará la opción para generar líneas.

Para crear un área de servicio del servicio de geoprocesamiento utilizando Generar áreas de servicio, solo necesita crear una herramienta, y puede publicar la herramienta directamente como un servicio. En cambio, debe crear un modelo con Crear la capa de área de servicio, conectarla debidamente a diversas herramientas, y publicar el modelo para crear un área de servicio para el servicio de geoprocesamiento. Consulte Ejemplo de servicio de geoprocesamiento: polígonos de tiempo de recorrido para obtener información sobre cómo configurar un servicio de polígonos de tiempo de recorrido utilizando los datos del tutorial. Otra opción para considerar son los servicios de Problema de generación de áreas de servicio de ArcGIS Online. Es un servicio que se ejecuta como herramienta de geoprocesamiento dentro de ArcMap, está accesible desde otras aplicaciones e incluye datos de carreteras de alta calidad de una parte importante del mundo.

Uso

Sintaxis

MakeServiceAreaLayer_na (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ámetroExplicaciónTipo 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.

  • TRAVEL_FROMEl área de servicio se crea en una dirección alejada de las instalaciones.
  • TRAVEL_TOEl área de servicio se crea en una dirección cercana a 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.

  • SIMPLE_POLYSCrea polígonos generalizados que se generan rápidamente y son bastante exactos, excepto en los márgenes. Esta es la opción predeterminada.
  • DETAILED_POLYSCrea polígonos detallados, que modelan con exactitud las líneas del área de servicio y pueden contener islas de áreas no alcanzadas. Es una opción es más lenta que la generación de polígonos generalizados.
  • NO_POLYSDesactiva la generación de polígonos cuando se desea obtener sólo líneas de área de servicio.

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.

  • NO_MERGECrea polígonos individuales para cada instalación. Los polígonos se pueden superponer entre sí.
  • NO_OVERLAPCrea polígonos individuales que son más cercanos a cada instalación. Los polígonos no se superponen entre sí.
  • MERGE Une los polígonos de varias instalaciones que poseen los mismos valores de corte.
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.

  • RINGSNo incluyen el área de los cortes más pequeños. Esto crea polígonos entre cortes consecutivos. Use esta opción si desea buscar el área desde un corte a otro.
  • DISKS Crea los polígonos que se encuentran desde la instalación hasta el corte. Por ejemplo, si crea áreas de servicio de 5 y 10 minutos, el polígono de área de servicio de 10 minutos incluirá el área bajo el polígono de área de servicio de 5 minutos. Use esta opción si desea buscar el área completa desde una instalación hasta el corte para cada corte.
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.

  • NO_LINESNo generar líneas. Esta es la opción predeterminada.
  • TRUE_LINESLas líneas se generan sin mediciones.
  • TRUE_LINES_WITH_MEASURESLas líneas se generan con mediciones. Los valores de medición generados en base al valor de impedancia en cada extremo del borde con los vértices intermedios interpolados. No use esta opción si desea lograr un rendimiento más veloz.
String
overlap
(Opcional)

Determina si se generan líneas superpuestas cuando se calculan las líneas del área de servicio.

  • OVERLAP Incluye una entidad de línea separada para cada instalación cuando las instalaciones tienen líneas de área de servicio que coinciden.
  • NON_OVERLAP Incluye cada línea de área de servicio como máximo una vez y la asocia con su instalación más cercana (menor impedancia).
Boolean
split
(Opcional)
  • SPLITDivide cada línea entre dos cortes en dos líneas, cada una dentro de su corte. Esto es útil si desea simbolizar las líneas de área de servicio por corte. De lo contrario, use la opción NO_SPLIT para lograr un rendimiento óptimo.
  • NO_SPLITLas líneas no se dividen en los límites de los cortes. Esta es la opción predeterminada.
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 se usan específicamente de referencia; el solucionador utiliza los atributos de coste especificados por el parámetro de atributos 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)

Política de giro en U en los cruces. Permitir giros en U 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. Ello depende de que el cruce sea una intersección o un callejón sin salida. Para acomodar, el parámetro de la política del giro en U se especifica implícitamente por la cantidad de bordes que se conectan en el cruce, 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.

  • ALLOW_UTURNSSe permiten los giros en U en los cruces con cualquier cantidad de bordes adyacentes. Este es el valor predeterminado.
  • NO_UTURNSLos giros en U están prohibidos en todos los cruces, independientemente de la valencia de cruce. Tenga en cuenta, sin embargo, que los giros en U seguirán estando permitidos en las ubicaciones de red aunque haya elegido esta configuración; sin embargo, también puede establecer la propiedad CurbApproach de cada ubicación de red individual para prohibir los giros en U en ella.
  • ALLOW_DEAD_ENDS_ONLYLos giros en U están prohibidos en todos los cruces, excepto los que tienen solo un borde adyacente (una calle sin salida).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYLos giros en U están prohibidos en los cruces donde se encuentran dos bordes adyacentes pero están permitidos en las intersecciones (cruces con tres o más bordes adyacentes) o calles sin salida (cruces con exactamente un borde adyacente). A menudo, las redes tienen cruces extraños en medio de segmentos de carretera. Esta opción evita que los vehículos hagan giros en U en estas ubicaciones.
SugerenciaSugerencia:

Si necesita una política más definida respecto a la política de giros en U, 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
polygon_trim
(Opcional)
  • TRIM_POLYSAcorta los polígonos que contienen los bordes en la periferia del área de servicio para que estén dentro de la distancia especificada de estos bordes exteriores. Esto es útil si la red es muy dispersa y usted no desea que el área de servicio cubra grandes áreas en las que no hay entidades.
  • NO_TRIM_POLYSNo acorta los polígonos.
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)
  • LINES_SOURCE_FIELDS Agrega los campos SourceID, SourceOID, FromPosition y ToPosition a las líneas de área de servicio para retener información sobre las entidades de origen subyacentes atravesadas durante el análisis. Esto puede ser útil para unir los resultados de las líneas del área de servicio con los datos de origen originales.
  • NO_LINES_SOURCE_FIELDSNo agrega los campos de fuente (SourceID, SourceOID, FromPosition y ToPosition) a las líneas del área de servicio.
Boolean
hierarchy
(Opcional)
  • USE_HIERARCHY Usa el atributo de jerarquía para el análisis. Utilizar una jerarquía hace que el solucionador prefiera bordes de orden superior en lugar de bordes de orden inferior. Las soluciones jerárquicas son más rápidas y se pueden utilizar para simular la preferencia de un conductor que prefiere viajar por autovías en lugar de carreteras locales cuando es posible, incluso si eso significa un viaje más largo. Esta opción es válida solo si el dataset de red de entrada tiene atributos de jerarquía.
  • NO_HIERARCHYNo usa el atributo de jerarquía para el análisis. No utilizar una jerarquía produce un área de servicio que se mide a lo largo de todos los bordes del dataset de red independientemente del nivel de jerarquía.

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

  • Representa la hora de salida si Viajar desde o hacia las instalaciones está establecido en TRAVEL_FROM.
  • Representa la hora de llegada si Viajar desde o hacia las instalaciones está establecido en TRAVEL_TO.

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, 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 viajar debería empezar a 5:00 p.m. el martes, especifique el valor de parámetro como 1/2/1900 5:00 p.m.

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

Ejemplo de código

Ejemplo 1 de MakeServiceAreaLayer (ventana de Python)

Ejecutar la herramienta utilizando solo los parámetros requeridos.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeServiceAreaLayer("Transportation/Streets_ND","FireStationCoverage",
                              "Minutes")
Ejemplo 2 de MakeServiceAreaLayer (ventana de Python)

Ejecutar la herramienta utilizando todos los parámetros.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/Paris.gdb"
arcpy.na.MakeServiceAreaLayer("Transportation/ParisNet","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")
Ejemplo 3 de MakeServiceAreaLayer (flujo de trabajo)

La siguiente secuencia de comandos de Python independiente muestra cómo se puede utilizar la herramienta MakeServiceAreaLayer para generar áreas de servicio de 1, 2 y 3 minutos alrededor de estaciones de bomberos.

# Name: MakeServiceAreaLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service area 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

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/data/SanFrancisco.gdb"
    env.overwriteOutput = True

    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "FireStationCoverage"
    impedanceAttribute = "TravelTime"
    inFacilities = "Analysis/FireStations"
    outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"

    #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.
    outNALayer = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
                                  impedanceAttribute, "TRAVEL_FROM", "1 2 3",
                                  "SIMPLE_POLYS", "NO_MERGE", "RINGS",
                                  hierarchy = "USE_HIERARCHY")

    #Get the layer object from the result object. The service layer can now be
    #referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)

    #Get the names of all the sublayers within the service area layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]

    #Load the fire stations as facilities using default field mappings and
    #default search tolerance
    arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities, "", "")

    #Solve the service area layer
    arcpy.na.Solve(outNALayer)

    #Save the solved service area 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 occured on line %i" % tb.tb_lineno
    print str(e)
Ejemplo 4 de MakeServiceAreaLayer (flujo de trabajo)

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 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 local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "FireStationCoverage"
    outSAFC = "Analysis/outSAPolys"
    impedanceAttribute = "TravelTime"
    inFacilities = "Analysis/FireStations"
    timelist = [datetime.datetime(2013, 8, 23, 7, 0, 0),
                datetime.datetime(2013, 8, 23, 12, 30, 0),
                datetime.datetime(2013, 8, 23, 17, 30, 0),
                datetime.datetime(2013, 8, 23, 21, 0, 0)]

    #Create a new service area layer.
    outSAResultObject = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
                                  impedanceAttribute, "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.
    outNALayer = outSAResultObject.getOutput(0)

    #Get the names of all the sublayers within the service area layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Store the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]
    polygonsLayerName = subLayerNames["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(outNALayer, facilitiesLayerName,
                                                    "FireStationID", "TEXT")
    fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
                                                    facilitiesLayerName)
    fieldMappings["FireStationID"].mappedFieldName = "FireStationID"

    #Load the fire stations as facilities.
    arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities,
                            fieldMappings, "",
                            exclude_restricted_elements = "EXCLUDE")

    #Get sublayers we will want to work with later
    FacilitiesSubLayer = arcpy.mapping.ListLayers(outNALayer,
                                                    facilitiesLayerName)[0]
    PolygonsSubLayer = arcpy.mapping.ListLayers(outNALayer,
                                                    polygonsLayerName)[0]

    # Add fields to the output Polygons sublayer. We will fill the values later.
    arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
                                        "FireStationID", "TEXT")
    arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
                                        "TimeOfDay", "TEXT")

    #Get the Service Area Layer's solver properties. This will allow us to
    #set individual properties later without re-creating the layer.
    SA_SolverProperties = arcpy.na.GetSolverProperties(outNALayer)

    #Solve the Service Area for each time of day in our time list
    for t in timelist:

        print "Now solving for time of day: " + t

        #Use the solver properties to set the time of day for the solve
        SA_SolverProperties.timeOfDay = t

        #Solve the service area layer
        arcpy.na.Solve(outNALayer)

        #Transfer the FireStationID field from the input Facilities to the
        #output Polygons
        arcpy.management.AddJoin(PolygonsSubLayer, "FacilityID",
                                        FacilitiesSubLayer, "ObjectID")
        arcpy.management.CalculateField(PolygonsSubLayer, "FireStationID",
                                        "!Facilities.FireStationID!", "PYTHON")
        arcpy.management.RemoveJoin(PolygonsSubLayer)

        #Populate the TimeOfDay field
        expression = '"' + t + '"'
        arcpy.management.CalculateField(PolygonsSubLayer, "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(outSAFC):
            arcpy.management.CopyFeatures(PolygonsSubLayer, outSAFC)
        else:
            arcpy.management.Append(PolygonsSubLayer, outSAFC)

    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 occured on line %i" % tb.tb_lineno
    print str(e)

Entornos

Temas relacionados

Información sobre licencias

ArcGIS for Desktop Basic: Sí
ArcGIS for Desktop Standard: Sí
ArcGIS for Desktop Advanced: Sí
5/10/2014