生成服务区 (Network Analyst)
摘要
创建服务区网络分析图层,设置分析属性及求解分析。此工具非常适用于在 web 上设置服务区地理处理服务。网络服务区是指包含从一个或多个设施点的给定距离或行程时间之内可到达的所有街道的区域。
服务区通常用于显示和测量可达性。例如,杂货店周围三分钟的行驶时间面可以确定能够在三分钟内到达杂货店以及很有可能到此购物的居民。
生成服务区和创建服务区图层工具类似,只是目的不同而已。如果正在设置地理处理服务,请使用生成服务区;这将会简化设置过程。否则,请使用创建服务区图层。同样地,如果需要生成服务区线,请使用创建服务区图层;生成服务区不提供生成线的选项。
如要使用生成服务区创建服务区地理处理服务,只需设置一个工具,然后便可直接将其发布为服务。与此相反,您需要使用创建服务区图层创建模型,将其正确连接到其他不同的工具,并发布此模型以创建服务区地理处理服务。
请参阅地理处理服务示例:行驶时间面,了解如何使用教程数据设置行驶时间面服务。
用法
为便于管理,工具对话框将不同的可选参数分为以下六个类别:
- 高级分析
- 障碍
- 网络数据集
- 网络位置
- 面生成
- 服务功能
语法
参数 | 说明 | 数据类型 |
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 (可选) |
选择用于生成服务区面的行程方向是朝向还是背离设施点。
行程方向可以改变面的形状,因为街道两侧的阻抗可能不同,或者可能存在单向街道。方向的选择取决于服务区分析的特性。例如,应该在背离设施点的方向上创建比萨外卖店的服务区,而医院的服务区应该创建在朝向设施点的方向上,因为对于病人而言,重要行程时间是前往医院的时间。 | 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 (可选) |
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 (可选) |
| 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 (可选) |
指定对服务区面进行修剪的距离范围。这在数据非常稀疏且不需要服务区覆盖大片不含要素的区域时十分有用。 此参数无数值或数值为零指定不应修剪服务区面。使用等级时,将忽略此参数值。 | 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 |
代码实例
使用 Python 窗口中的必需参数执行此工具。
import arcpy
facilities = arcpy.FeatureSet()
facilities.load("FireStations")
arcpy.na.GenerateServiceAreas(facilities, "1 2 3", "Minutes", "Streets_ND",
"in_memory\\FireStationServiceAreas")
以下独立 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)