生成服务区 (Network Analyst)
摘要
创建服务区网络分析图层,设置分析属性及求解分析。此工具非常适用于在 web 上设置服务区地理处理服务。网络服务区是指包含从一个或多个设施点的给定距离或行程时间之内可到达的所有街道的区域。
服务区通常用于显示和测量可达性。例如,杂货店周围三分钟的行驶时间面可以确定能够在三分钟内到达杂货店以及更有可能在此购物的居民。
生成服务区和创建服务区图层工具类似,只是目的不同而已。如果正在设置地理处理服务,请使用生成服务区;这将会简化设置过程。否则,请使用创建服务区图层。同样地,如果需要生成服务区线,请使用创建服务区图层;生成服务区不提供生成线的选项。
如要使用生成服务区创建服务区地理处理服务,只需设置一个工具,然后便可直接将其发布为服务。与此相反,您需要使用创建服务区图层创建模型,将其正确连接到其他不同的工具,并发布此模型以创建服务区地理处理服务。请参阅地理处理服务示例:行驶时间面,了解如何使用教程数据设置行驶时间面服务。要考虑的另一个选项是 ArcGIS Online 生成服务区服务。该服务与 ArcMap 中地理处理工具的运行方式类似,可通过其他应用程序进行访问,并包含世界上大部分地区的高质量道路数据。
用法
此工具对话框将各种可选参数分为以下六个类别,以便您能更轻松地进行管理:
- 高级分析
- 障碍
- 网络数据集
- 网络位置
- 面生成
- 服务功能
语法
参数 | 说明 | 数据类型 |
Facilities |
在其周围生成服务区的设施点。 设施点要素集具有三个属性: ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 Name: 设施点的名称。如果名称为空,则在求解时会自动生成一个。 | Feature Set |
Break_Values |
指定为每个设施点生成的服务区面的大小和数量。单位由“中断单位”值决定。 生成服务区工具运行时,以下参数之间会发生值得注意的交互:中断值、中断单位以及时间属性或距离属性。中断值和中断单位共同定义了服务区在设施点周围延伸的范围和距离。时间属性和距离属性参数分别定义了一个网络成本属性。仅使用这两个成本属性中的一个,求解程序选择使用的成本属性与中断单位值相对应;换言之,如果指定一个基于时间的中断单位值(例如秒或分钟),此工具将使用时间属性参数中定义的成本属性进行求解。如果指定一个基于距离的中断单位值(例如公里或英里),该工具将使用距离属性参数中定义的成本属性。 可以设置多个面中断来为每个设施点创建同心服务区。例如,要查找每个设施点的两英里、三英里及五英里服务区,请输入 "2 3 5",各个数值之间用空格进行分隔。将中断单位设为英里,并确保已为距离属性参数选择了基于距离的网络属性。 | String |
Break_Units |
“中断值”参数的单位。
生成服务区工具根据您在此处指定的单位是基于时间还是基于距离,选择是否使用在“时间属性”或“距离属性”参数中指定的网络成本属性。 当“中断单位”值与对应的时间或距离成本属性的单位不同时,此工具将进行必要的单位转换。 | String |
Network_Dataset |
将在其中执行分析的网络数据集。网络数据集通常表示街道网络,但也可能表示其他种类的交通网。网络数据集至少需要一个基于时间和一个基于距离的成本属性。 | Network Dataset Layer |
Service_Areas |
输出工作空间及输出要素的名称。此工作空间必须已经存在。默认输出工作空间为 in_memory。 | Feature Class |
Travel_Direction (可选) |
选择用于生成服务区面的行程方向是朝向还是远离设施点。
行程方向可以改变面的形状,因为街道两侧的阻抗可能不同,或者可能存在单向街道。方向的选择取决于服务区分析的特性。例如,应该在远离设施点的方向上创建比萨外卖店的服务区,而医院的服务区应该创建在朝向设施点的方向上,因为对于病人而言,重要行程时间是前往医院的时间。 | String |
Time_of_Day (可选) |
离开或到达设施点的时间。这个值的解释取决于行程方向是朝向还是远离设施点。
您的网络数据集必须包括此参数的流量数据才能产生作用。 重复解决相同的分析问题,但使用不同的“时间”参数值,这样您就会看到设施点的到达时间随时间的变化。例如,消防站周围的五分钟服务区在大清早时可能变得大一点,而在早高峰期消失,上午晚些时候服务区又扩大,并在一天中都保持这样。 | Date |
UTurn_Policy (可选) |
交汇点的 U 形转弯策略。允许 U 形转弯表示求解程序可以在交汇点处转向并沿同一街道往回行驶。 考虑到交汇点表示街道交叉路口和死角,不同的车辆可以在某些交汇点转弯,而在其他交汇点则不行 - 这取决于交汇点是交叉路口还是死角。为适应此情况,U 形转弯策略参数由连接到交汇点的边数隐性指定,这称为交汇点原子价。此参数可接受的值如下所列;每个值的后面是根据交汇点原子价对其含义的描述。
提示: 如果您需要定义更加精确的 U 形转弯策略,可以考虑在网络成本属性中添加一个通用转弯延迟赋值器,或者如果存在的话,调整其设置,并特别注意反向转弯的配置。还要考虑设置网络位置的 CurbApproach 属性。 | String |
Point_Barriers (可选) | 指定点障碍,分为两种类型:禁止型点障碍和增加成本型点障碍。它们可以暂时限制网络上的穿越或在网络的点上增加阻抗。点障碍由要素集定义,为点要素指定的属性值决定它们是禁止型障碍还是增加成本型障碍。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 名称: 障碍的名称。 BarrierType: 指定障碍的存在将完全禁止通行还是在通行时增加成本。有以下两个选项:
将值 0 用于禁止型值,将 2 用于成本增加型值。 AdditionalCost: AdditionalCost 指示服务区穿越障碍时增加的阻抗。 此字段值的单位与为中断单位指定的单位相同。 | Feature Set |
Line_Barriers (可选) |
指定线障碍,暂时限制穿越障碍。线障碍由要素集定义。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 名称: 障碍的名称。 | Feature Set |
Polygon_Barriers (可选) | 指定面障碍,分为两种类型:禁止型面障碍和调整成本型面障碍。它们会暂时限制穿越所覆盖的网络部分或调整阻抗。面障碍由要素集定义,为面要素指定的属性值决定它们是禁止型障碍还是调整成本型障碍。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 名称: 障碍的名称。 BarrierType: 指定障碍的存在将完全禁止通行还是按比例增加行程成本。共有两个选项:
将值 0 用于禁止型值,将 1 用于成本按比例增加型值。 ScaledCostFactor: ScaledCostFactor 指示服务区穿越障碍时成倍增加的阻抗。 | Feature Set |
Time_Attribute (可选) |
定义“中断单位”值为时间单位时要使用的网络成本属性。 当中断单位值与此处定义的成本属性单位不同时,此工具进行必要的时间单位转换。换言之,中断和网络成本属性的时间单位不必相同。 | String |
Time_Attribute_Units (可选) |
时间属性参数指定的网络成本属性的单位。这只是一个信息参数,只有直接编辑网络数据集才能进行更改。而且也无需更改,因为中断值单位与成本属性之间的单位转换是自行处理的。 | String |
Distance_Attribute (可选) | 定义中断单位值为距离单位时要使用的网络成本属性。 当中断单位值与此处定义的成本属性单位不同时,此工具进行必要的距离单位转换。换言之,中断和网络成本属性的距离单位不必相同。 | String |
Distance_Attribute_Units (可选) |
距离属性参数指定的网络成本属性的单位。这只是一个信息参数,只有直接编辑网络数据集才能进行更改。而且也无需更改,因为中断值单位与成本属性之间的单位转换是自行处理的。 | String |
Use_Hierarchy_in_Analysis (可选) |
如果未在用于执行分析的网络数据集中定义等级属性,该参数将不可用。在这种情况下,使用 "#" 作为参数值。 | 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 (可选) |
| Boolean |
Feature_Locator_WHERE_Clause (可选) |
用于选择源要素子集的 SQL 表达式,该子集对可以定位设施点的网络元素设定了限制。此参数的语法由两部分组成:第一部分为源要素类名称(后接一个空格),第二部分为 SQL 表达式。要为两个或多个源要素类编写 SQL 表达式,请用分号分隔。 例如,为确保设施点不定位在限制出入的公路上,需编写一个类似于下面所列的 SQL 表达式,以排除这些源要素:"Streets" "FUNC_CLASS not in('1', '2')". 注意,加载时,障碍将忽略要素定位器 WHERE 子句。 | String |
Polygons_for_Multiple_Facilities (可选) |
选择当分析中存在多个设施点时生成服务区面的方式。
| String |
Polygon_Overlap_Type (可选) |
指定该选项,将同心服务区面创建为圆或环。仅当为这些设施点指定多个中断值时,此选项才可用。
| String |
Detailed_Polygons (可选) | 指定是要创建详细面或概化面。
| Boolean |
Polygon_Trim_Distance (可选) |
指定对服务区面进行修剪的距离范围。这在您的数据非常稀疏且不需要服务区覆盖大片不含要素的区域时十分有用。 此参数没有值或值为 0 时,会指定不应对服务区面进行修剪。使用等级时,将忽略此参数值。 | 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 |
Save_Output_Network_Analysis_Layer (可选) |
在任何一种情况下,均返回带有服务区面的要素类。不过,服务器管理员也可能希望选择输出一个网络分析图层,以便可以使用 ArcGIS for Desktop 环境中的 Network Analyst 控件调试工具的设置和结果。这会使调试过程变得更加容易。 在 ArcGIS for Desktop 中,网络分析图层的默认输出位置位于临时文件夹内。可通过评估 arcpy.env.scratchFolder 地理处理环境的值来确定临时文件夹的位置。输出网络分析图层存储为 LYR 文件,其名称以 _ags_gpna 开头,后跟字母数字 GUID。 | Boolean |
Time_Zone_for_Time_of_Day (可选) | 指定时区或时间参数的时区。
无论时间的时区如何设置,当时间为非空值并且多个设施点的面设置为创建合并或非重叠面时,所有设施点必须处于同一时区。 | String |
代码实例
使用 Python 窗口中的所需参数执行此工具。
import arcpy
facilities = arcpy.FeatureSet()
facilities.load("FireStations")
arcpy.na.GenerateServiceAreas(facilities, "1 2 3", "Minutes", "Streets_ND",
"in_memory\\FireStationServiceAreas")
以下独立 Python 脚本演示了如何使用生成服务区 (GenerateServiceAreas) 确定商店的到达时间随时间的变化。该脚本显示了如何在一天中的不同时段在商店位置周围生成一个五分钟服务区。以披萨店为例,要了解在五分钟内可从商店到达的区域如何根据当前交通状况而变化,这类分析将非常有用。
# 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)