生成服务区 (Network Analyst)

许可等级:BasicStandardAdvanced

摘要

创建服务区网络分析图层,设置分析属性及求解分析。此工具非常适用于在 web 上设置服务区地理处理服务。网络服务区是指包含从一个或多个设施点的给定距离或行程时间之内可到达的所有街道的区域。

服务区通常用于显示和测量可达性。例如,杂货店周围三分钟的行驶时间面可以确定能够在三分钟内到达杂货店以及很有可能到此购物的居民。

注注:

生成服务区创建服务区图层工具类似,只是目的不同而已。如果正在设置地理处理服务,请使用生成服务区;这将会简化设置过程。否则,请使用创建服务区图层。同样地,如果需要生成服务区线,请使用创建服务区图层生成服务区不提供生成线的选项。

如要使用生成服务区创建服务区地理处理服务,只需设置一个工具,然后便可直接将其发布为服务。与此相反,您需要使用创建服务区图层创建模型,将其正确连接到其他不同的工具,并发布此模型以创建服务区地理处理服务。

请参阅地理处理服务示例:行驶时间面,了解如何使用教程数据设置行驶时间面服务。

用法

语法

GenerateServiceAreas_na (Facilities, Break_Values, Break_Units, Network_Dataset, Service_Areas, {Travel_Direction}, {Time_of_Day}, {UTurn_Policy}, {Point_Barriers}, {Line_Barriers}, {Polygon_Barriers}, {Time_Attribute}, {Time_Attribute_Units}, {Distance_Attribute}, {Distance_Attribute_Units}, {Use_Hierarchy_in_Analysis}, {Restrictions}, {Attribute_Parameter_Values}, {Maximum_Snap_Tolerance}, {Exclude_Restricted_Portions_of_the_Network}, {Feature_Locator_WHERE_Clause}, {Polygons_for_Multiple_Facilities}, {Polygon_Overlap_Type}, {Detailed_Polygons}, {Polygon_Trim_Distance}, {Polygon_Simplification_Tolerance}, {Maximum_Facilities}, {Maximum_Number_of_Breaks}, {Maximum_Features_Affected_by_Point_Barriers}, {Maximum_Features_Affected_by_Line_Barriers}, {Maximum_Features_Affected_by_Polygon_Barriers}, {Maximum_Break_Time_Value}, {Maximum_Break_Distance_Value}, {Force_Hierarchy_beyond_Break_Time_Value}, {Force_Hierarchy_beyond_Break_Distance_Value})
参数说明数据类型
Facilities

在其周围生成服务区的设施点。

设施点要素集具有三个属性:

ObjectID:

系统管理的 ID 字段。

Shape:

指示网络分析对象地理位置的几何字段。

名称:

设施点的名称。如果名称为空,则在求解时会自动生成一个。

Feature Set
Break_Values

指定为每个设施点生成的服务区面的大小和数量。单位由“中断单位”值决定。

生成服务区工具运行时,以下参数之间会发生值得注意的交互:中断值中断单位以及时间属性距离属性中断值中断单位共同定义服务区在设施点周围延伸的范围和距离。时间属性距离属性参数分别定义一个网络成本属性。这两个成本属性中,仅使用其中一个,而求解程序选择使用的成本属性对应于中断单位值。换言之,指定一个基于时间的中断单位值(例如秒或分钟)时,此工具将使用在时间属性参数中定义的成本属性进行求解。如果指定一个基于距离的中断单位值(例如公里或英里),该工具将使用在距离属性参数中定义的成本属性。

可以设置多个面中断来为每个设施点创建同心服务区。例如,要查找每个设施点的 2 英里、3 英里及 5 英里服务区,请输入“2 3 5”,数值之间用空格分隔。将中断单位设为英里,并确保已经为距离属性参数选择了基于距离的网络属性。

String
Break_Units

“中断值”参数的单位。

  • 分钟
  • 小时
  • 英里
  • 千米
  • 英尺
  • 海里

生成服务区工具根据您在此处指定的单位是基于时间还是基于距离,选择是否使用在“时间属性”或“距离属性”参数中指定的网络成本属性。

当“中断单位”值与对应的时间或距离成本属性的单位不同时,此工具将进行必要的单位转换。

String
Network_Dataset

将在其中执行服务区分析的网络数据集。网络数据集至少需要一个基于时间和一个基于距离的成本属性。

Network Dataset Layer
Service_Areas

输出工作空间及输出要素的名称。此工作空间必须已经存在。默认输出工作空间为 in_memory。

Feature Class
Travel_Direction
(可选)

选择用于生成服务区面的行程方向是朝向还是背离设施点。

  • TRAVEL_FROM在背离设施点的方向上生成服务区。
  • TRAVEL_TO在接近设施点的方向上创建服务区。

行程方向可以改变面的形状,因为街道两侧的阻抗可能不同,或者可能存在单向街道。方向的选择取决于服务区分析的特性。例如,应该在背离设施点的方向上创建比萨外卖店的服务区,而医院的服务区应该创建在朝向设施点的方向上,因为对于病人而言,重要行程时间是前往医院的时间。

String
Time_of_Day
(可选)

离开或到达设施点的时间。这个值的解释取决于行程方向是朝向还是背离设施点。

  • 如果“行程方向”设置为 TRAVEL_FROM,则表示离开时间。
  • 如果“行程方向”设置为 TRAVEL_TO,则表示到达时间。

您的网络数据集必须包括此参数的流量数据才能产生作用。

重复解决相同的分析问题,但使用不同的“时间”参数值,这样您就会看到设施点的到达时间随时间的变化。例如,消防站周围的五分钟服务区在大清早时可能变得大一点,而在早高峰期消失,上午晚些时候服务区又扩大,并在一天中都保持这样。

Date
UTurn_Policy
(可选)

交汇点的 U 形转弯策略。允许 U 形转弯表示求解程序可以在交汇点处转向并沿同一街道往回行驶。 考虑到交汇点表示街道交叉路口和死角,不同的车辆可以在某些交汇点转弯,而在其他交汇点则不行 - 这取决于交汇点是交叉路口还是死角。为适应此情况,U 形转弯策略参数由连接到交汇点的边数隐性指定,这称为交汇点原子价。此参数可接受的值如下所列;每个值的后面是根据交汇点原子价对其含义的描述。

  • ALLOW_UTURNS无论在交汇点处有几条连接的边,均允许 U 形转弯。这是默认值。
  • NO_UTURNS在所有交汇点处均禁止 U 形转弯,不管交汇点原子价如何。不过请注意,即使已选择该设置,在网络位置仍允许 U 形转弯;但是也可以通过设置个别网络位置的 CurbApproach 属性来禁止 U 形转弯。
  • ALLOW_DEAD_ENDS_ONLY除仅有一条相邻边的交汇点(死角)外,其他交汇点均禁止 U 形转弯。
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY在恰好有两条相邻边相遇的交汇点处禁止 U 形转弯,但是交叉点(三条或三条以上相邻边的交汇点)和死角(仅有一条相邻边的交汇点)处允许。通常,网络在路段中间有多余的交汇点。此选项可防止车辆在这些位置出现 U 形转弯。
提示提示:

如果您需要定义更加精确的 U 形转弯策略,可以考虑在网络成本属性中添加一个通用转弯延迟赋值器,或者如果存在的话,调整其设置,并特别注意反向转弯的配置。还要考虑设置网络位置的 CurbApproach 属性。

String
Point_Barriers
(可选)

指定点障碍,分为两种类型:禁止型点障碍和增加成本型点障碍。它们可以暂时限制网络上的穿越或在网络的点上增加阻抗。点障碍由要素集定义,为点要素指定的属性值决定它们是禁止型障碍还是增加成本型障碍。下面列出并描述了属性表中的字段。

ObjectID:

系统管理的 ID 字段。

Shape:

指示网络分析对象地理位置的几何字段。

名称:

障碍的名称。

BarrierType:

指定障碍的存在将完全禁止通行还是在通行时增加成本。有以下两个选项:

  • 禁止型 (0) - 禁止穿过障碍。这是默认值。
  • 增加成本型 (2) - 穿过障碍会增加网络成本,具体增加值取决于在 Additional_Time 和 AdditionalDistance 字段中指定的值。

将值 0 用于限值型值,将 2 用于成本增加型值。

AdditionalCost:

AdditionalCost 指示服务区穿越障碍时增加的阻抗。

此字段值的单位与为中断单位指定的单位相同。

Feature Set
Line_Barriers
(可选)

指定线障碍,暂时限制穿越障碍。线障碍由要素集定义。下面列出并描述了属性表中的字段。

ObjectID:

系统管理的 ID 字段。

Shape:

指示网络分析对象地理位置的几何字段。

名称:

障碍的名称。

Feature Set
Polygon_Barriers
(可选)

指定面障碍,分为两种类型:禁止型面障碍和调整成本型面障碍。它们会暂时限制穿越所覆盖的网络部分或调整阻抗。面障碍由要素集定义,为面要素指定的属性值决定它们是禁止型障碍还是调整成本型障碍。下面列出并描述了属性表中的字段。

ObjectID:

系统管理的 ID 字段。

Shape:

指示网络分析对象地理位置的几何字段。

名称:

障碍的名称。

BarrierType:

指定障碍的存在将完全禁止通行还是按比例增加行程成本。共有两个选项:

  • 禁止型 (0) - 禁止穿过障碍的任何部分。这是默认值。
  • 成本按比例增加型 (1) - 将阻抗乘以 ScaledCostFactor 属性值从而调整基础边阻抗。如果障碍部分覆盖了边,则会按比例对阻抗执行乘法运算。

将值 0 用于限值型值,将 1 用于成本按比例增加型值。

ScaledCostFactor:

ScaledCostFactor 指示服务区穿越障碍时成倍增加的阻抗。

Feature Set
Time_Attribute
(可选)

定义“中断单位”值为时间单位时要使用的网络成本属性。

中断单位值与此处定义的成本属性单位不同时,此工具进行必要的时间单位转换。换言之,中断的时间单位与网络成本属性在这里不必相同。

String
Time_Attribute_Units
(可选)

时间属性参数指定的网络成本属性的单位。这只是一个信息参数,只有直接编辑网络数据集才能进行更改。而且也无需更改,因为中断值单位与成本属性之间的单位转换是自行处理的。

String
Distance_Attribute
(可选)

定义中断单位值为距离单位时要使用的网络成本属性。

中断单位值与此处定义的成本属性单位不同时,此工具进行必要的距离单位转换。换言之,中断的距离单位与网络成本属性在这里不必相同。

String
Distance_Attribute_Units
(可选)

距离属性参数指定的网络成本属性的单位。这只是一个信息参数,只有直接编辑网络数据集才能进行更改。而且也无需更改,因为中断值单位与成本属性之间的单位转换是自行处理的。

String
Use_Hierarchy_in_Analysis
(可选)
  • USE_HIERARCHY Use the hierarchy attribute for the analysis. Using a hierarchy results in the solver preferring higher-order edges to lower-order edges. Hierarchical solves are faster, and they can be used to simulate the preference of a driver who chooses to travel on freeways over local roads when possible—even if that means a longer trip. This option is valid only if the input network dataset has a hierarchy attribute.
  • NO_HIERARCHYDo not use the hierarchy attribute for the analysis. Not using a hierarchy yields a service area measured along all edges of the network dataset regardless of hierarchy level.

The parameter is not used if a hierarchy attribute is not defined on the network dataset used to perform the analysis. In such cases, use "#" as the parameter value.

Boolean
Restrictions
(可选)

指示求解时应遵守的网络限制属性。

String
Attribute_Parameter_Values
(可选)

指定具有参数的网络属性的参数值。记录集具有两个共同唯一识别参数的列以及另一个指定参数值的列。

属性参数值记录集具有关联属性。下面列出并描述了属性表中的字段。

ObjectID:

系统管理的 ID 字段。

AttributeName:

网络属性的名称,其属性参数由表行设置。

ParameterName:

属性参数的名称,其值由表行设置。(无法使用此工具更新“对象”类型参数。)

ParameterValue:

您希望的属性参数值。如果未指定值,则属性参数将被设置为空。

Record Set
Maximum_Snap_Tolerance
(可选)

最大捕捉容差是指在网络上定位或重新定位一个点时 Network Analyst 搜索的最远距离。搜索会寻找适合的边或交汇点,并把点捕捉到最近的边或交汇点。如果在最大捕捉容差内没有找到合适的位置,对象将标记为无法定位。

Linear unit
Exclude_Restricted_Portions_of_the_Network
(可选)
  • EXCLUDE设施点仅位于网络的可穿过部分。这样可以防止将设施点定位在求解过程中因限制或障碍而无法到达的元素上。请记住,如果未选中此选项,那么设施点的位置可能远离预期位置。
  • INCLUDE设施点可定位在网络的任何元素上;然而,在求解过程中,定位在限制元素上的设施点无法使用。
Boolean
Feature_Locator_WHERE_Clause
(可选)

用于选择源要素子集的 SQL 表达式,该子集对可以定位设施点的网络元素设定了限制。此参数的语法由两部分组成:第一部分为源要素类名称(后接一个空格),第二部分为 SQL 表达式。要为两个或多个源要素类编写 SQL 表达式,请用分号分隔。

例如,为确保设施点不定位在限制出入的公路上,编写一个类似于下面所列的 SQL 表达式,排除这些源要素:"Streets" "FUNC_CLASS not in('1', '2')".

注意,加载时,障碍将忽略要素定位器 WHERE 子句。

String
Polygons_for_Multiple_Facilities
(可选)

选择当分析中存在多个设施点时生成服务区面的方式。

  • NO_MERGE为各个设施点创建单独的面。这些面可以相互叠置。
  • NO_OVERLAP 创建单独的面,使一个设施点的面不会与其他设施点的面重叠;而且,网络的任何部分只会被最近设施点的服务区覆盖。
  • MERGE 创建并连接具有相同中断值的不同设施点的面。
String
Polygon_Overlap_Type
(可选)

指定该选项,将同心服务区面创建为磁盘或环。仅当为这些设施点指定多个中断值时,此选项才可用。

  • RINGS不包括较小中断的区域。这将在连续的中断之间创建面。如果要查找从一个中断到另一个中断的区域,请使用此选项。例如,如果创建 5 分钟和 10 分钟服务区,则 10 分钟服务区面将排除 5 分钟服务区面内的区域。
  • DISKS 在设施点与中断之间创建面。例如,如果创建 5 分钟和 10 分钟服务区,则 10 分钟服务区面将包含 5 分钟服务区面内的区域。
String
Detailed_Polygons
(可选)

指定此选项是创建详细面还是一般面。

  • SIMPLE_POLYS创建生成速度快并且相当精确的一般面。这是默认设置。
  • DETAILED_POLYS创建详细面,用于对服务区线进行精确建模并且可包含未到达的岛状区域。这种面比一般面的生成速度慢得多。使用等级时,不支持此选项。
Boolean
Polygon_Trim_Distance
(可选)

指定对服务区面进行修剪的距离范围。这在数据非常稀疏且不需要服务区覆盖大片不含要素的区域时十分有用。

此参数无数值或数值为零指定不应修剪服务区面。使用等级时,将忽略此参数值。

Linear unit
Polygon_Simplification_Tolerance
(可选)

指定面几何的简化程度。

简化将保留定义面的基本形状所需的关键点而删除其他点。指定的简化距离为简化面偏离原始面的最大允许偏移。简化面将减少折点的数量,并且往往能够减少绘制时间。

Linear unit
Maximum_Facilities
(可选)

限制可以添加到服务区分析的设施点的数量。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Long
Maximum_Number_of_Breaks
(可选)

限制可以添加到服务区分析的中断的数量。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Long
Maximum_Features_Affected_by_Point_Barriers
(可选)

限制点障碍影响的要素数量。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Long
Maximum_Features_Affected_by_Line_Barriers
(可选)

限制线障碍影响的要素数量。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Long
Maximum_Features_Affected_by_Polygon_Barriers
(可选)

限制面障碍影响的要素数量。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Long
Maximum_Break_Time_Value
(可选)

限制求解基于时间的服务区时中断值参数的最大值。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Double
Maximum_Break_Distance_Value
(可选)

限制求解基于距离的服务区时中断值参数的最大值。

此参数帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。

空值表示没有限制。

Double
Force_Hierarchy_beyond_Break_Time_Value
(可选)

指定求解基于时间的服务区时求解程序强制分级位置之前的中断值,即使未启用等级。

求解高中断值服务区的同时使用网络等级产生的处理往往比求解相同服务区而不使用等级所产生的处理少得多。此参数帮助您管理求解时发生的处理量。

空值表示从不强制执行等级,并且总是支持在分析中应用等级参数的值。如果输入网络数据集不支持等级,则为此参数指定数值将会导致错误。在此情况下,应当使用空值。

Double
Force_Hierarchy_beyond_Break_Distance_Value
(可选)

指定求解基于距离的服务区时求解程序强制分级位置之前的中断值,即使未启用等级。

求解高中断值服务区的同时使用网络等级产生的处理往往比求解相同服务区而不使用等级所产生的处理少得多。此参数帮助您管理求解时发生的处理量。

空值表示从不强制执行等级,并且总是支持在分析中应用等级参数的值。如果输入网络数据集不支持等级,则为此参数指定数值将会导致错误。在此情况下,应当使用空值。

Double

代码实例

GenerateServiceAreas 示例 1(Python 窗口)

使用 Python 窗口中的必需参数执行此工具。

import arcpy
facilities = arcpy.FeatureSet()
facilities.load("FireStations")
arcpy.na.GenerateServiceAreas(facilities, "1 2 3", "Minutes", "Streets_ND",
                              "in_memory\\FireStationServiceAreas")
GenerateServiceAreas 示例 2(工作流)

以下独立 Python 脚本演示了如何使用生成服务区 (GenerateServiceAreas) 确定到达一家商店的时间。此脚本显示了如何在一天中不同时间生成商店位置周围的 5 分钟服务区。这种分析非常有用,例如对于比萨店而言,可以看到在 5 分钟之内可从商店出发到达的区域如何随当前交通状况而变化。

# Name: GenerateServiceAreas_Workflow.py
# Description: Generate a 5 minute service area around a store location at
#              different times in a day. Such analysis can be useful, for example
#              for a pizza store, to see how the area that can be reached within
#              5 minutes from the store changes based on the current traffic
#              conditions.
# Requirements: Network Analyst Extension 

#Import system modules
import arcpy
from arcpy import env
import datetime

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"
    impedanceAttribute = "TravelTime"
    breakValues = "5"
    breakUnits = "Minutes"
    inFacilities = "Analysis/ExistingStore"
    outGeodatabase = "C:/data/output/ServiceAreaOutput.gdb"
    serviceArea = "in_memory\\ServiceAreas"
    dateFieldName = "StartTime"
    nameField = "Name"
    #use today at 8 AM as the start time and then increment it by one hour
    startTime = datetime.datetime(1899,12,30,8,0,0) 
    
    #Create a new feature set with same schema as Facilities parameter in
    #Generate Service Areas tool. Load the feature from the ExistingStore
    #feature class in the feature set
    facilities = arcpy.GetParameterValue("GenerateServiceAreas_na",0)
    facilities.load(inFacilities)
    
    #Create an empty feature class with same spatial reference as the 
    #network dataset and a Date field called StartTime and a text field called Name
    outServiceAreas = arcpy.management.CreateFeatureclass(outGeodatabase, "ServiceAreas",
                                                          "POLYGON","","","",
                                                          inNetworkDataset).getOutput(0)
    arcpy.management.AddField(outServiceAreas, dateFieldName, "DATE")
    arcpy.management.AddField(outServiceAreas, nameField, "TEXT")
    
    #Open an insert cursor on the feature class to add new polygons
    cursor = arcpy.da.InsertCursor(outServiceAreas, ("SHAPE@", nameField,
                                                     dateFieldName))
    
    #Geneate a 5 minute service area around the store at every one hour interval
    #from 8 AM to 8 PM. Copy the output service area to a new feature class
    for i in range(1,14):
        timeFormat = startTime.time().strftime("%I %p")
        print "Generating {0} {1} service area at {2}".format(breakValues,breakUnits,
                                                              timeFormat)
        arcpy.na.GenerateServiceAreas(facilities,breakValues,breakUnits,
                                      inNetworkDataset, serviceArea, "TRAVEL_FROM",
                                      startTime, Time_Attribute=impedanceAttribute)
        #Get the shape from the output service area so that it can be inserted
        #in the feature class
        with arcpy.da.SearchCursor(serviceArea,("SHAPE@", nameField)) as inputRows:
            row = inputRows.next()
            cursor.insertRow((row[0],row[1],startTime))
        startTime = startTime + datetime.timedelta(seconds=3600)
    del cursor
    
    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)

环境

相关主题

许可信息

ArcGIS for Desktop Basic:需要 Network Analyst
ArcGIS for Desktop Standard:需要 Network Analyst
ArcGIS for Desktop Advanced:需要 Network Analyst
9/15/2013