arcpy.na.MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
名称
|
说明
|
数据类型
|
|
network_data_source
|
将对其执行网络分析的网络数据集或服务。
可以使用以下值之一来指定该参数:
要使用门户 URL,您必须使用具有路径选择权限的账户登录门户。
了解如何在 Python 中登录门户
了解有关使用路径服务的网络分析详细信息
当使用 ArcGIS Online 或使用 ArcGIS Online 配置路径服务的 ArcGIS Enterprise 门户作为输入网络时,解决分析将消耗配额并受到某些限制,例如允许的输入数量。
了解关于网络分析中配额消耗和分析限制的详细信息
|
Network Dataset Layer; String
|
|
layer_name
(可选)
|
将创建的网络分析图层的名称。
|
String
|
|
travel_mode
(可选)
|
要在分析中使用的出行模式名称。 出行模式 代表一组网络设置(例如出行限制和 U 形转弯策略),用于确定行人、汽车、卡车或其他交通媒介在网络中的移动方式。 出行模式在网络数据源中进行定义。
arcpy.na.TravelMode 对象和包含出行模式有效 JSON 表示的字符串也可用作此参数的输入。
|
String
|
|
travel_direction
(可选)
|
指定行至或离开设施点的方向。
使用此参数可能会在具有单向限制和基于行驶方向存在不同阻抗的网络中生成不同的服务区。 例如,应该在远离设施点的方向上创建比萨外卖店的服务区,而医院的服务区应该创建在朝向设施点的方向上。
|
String
|
|
cutoffs
[cutoffs,...]
(可选)
|
将使用所选出行模式使用的抗阻属性单位计算服务区范围。 例如,分析行驶时间时,中断值 10 表示生成的服务区将代表 10 分钟行驶时间内可到达的区域。
可设置多个中断值以创建同心服务区。 例如,要针对同一设施点查找两分钟、三分钟和五分钟内的服务区,可将该参数值指定为 2、3 和 5。
在设施点子图层中指定单独的中断值可按设施点覆盖默认中断值。
|
Double
|
|
time_of_day
(可选)
|
离开或到达服务区图层的设施点的时间。 此值可理解为离开时间或到达时间,具体取决于行驶方向是远离还是朝向设施点。
根据使用阻抗属性的出行模式查找可到达的道路,而阻抗属性根据一天中时间的不同而不同(例如取决于动态交通状况)时,此参数最为有用。 使用此参数的不同值求解同一分析可查看设施点可到达的道路如何随时间的变化而变化。 例如,消防站周围的五分钟服务区在大清早时可能变得大一点,而在早高峰期消失,上午晚些时候服务区又扩大,并在一天中都保持这样。
可将日期和时间指定为 10/21/2015 10:30 AM。
将分析配置为使用以下特殊日期之一以针对一周中的某天或当前日期建模(而非使用特定静态日期):
Today—12/30/1899
Sunday—12/31/1899
Monday—1/1/1900
Tuesday—1/2/1900
Wednesday—1/3/1900
Thursday—1/4/1900
Friday—1/5/1900
Saturday—1/6/1900
了解有关如何在网络分析中使用和解释日期和时间的详细信息
|
Date
|
|
time_zone
(可选)
|
指定时间参数的时区。
LOCAL_TIME_AT_LOCATIONS—时间参数将使用设施点所处的一个或多个时区。 服务区开始时间或结束时间的时区交错。 这是默认设置。例如,如果将时间设为 9:00 a.m.,则会为处于东部时区的设施点生成东部时间 9:00 a.m. 的服务区、为处于中部时区的设施点生成中部时间 9:00 a.m. 的服务区、为处于山区时区的设施点生成山区时间 9:00 a.m. 的服务区等等。 如果商店处于覆盖美国、在当地时间 9:00 a.m. 开业的商店链中,则可以在一次求解中选择此参数值来查找处于所有商店开业时间的市场地区。 首先,东部时区的商店开业并生成一个面。 一小时后中部时区的商店开业,以此类推。 当地时间始终为 9 点,但却因不同时区而实时交错。
UTC—时间参数将使用协调世界时间 (UTC)。 无论各设施点处于哪些时区或区域都会同时到达或出发。如果将时间设为 2:00 p.m.,则会为处于东部时区的设施点生成东部标准时间 9:00 a.m. 的服务区、为处于中部时区的设施点生成中部标准时间 8:00 a.m. 的服务区、为处于山区时区的设施点生成山区标准时间 7:00 a.m. 的服务区等等。
注:
以上情况均假定为标准时间。 在夏令时期间,东部、中部、和山地时间应各提前 1 小时(即分别为 10:00 a.m.、9:00 a.m. 和 8:00 a.m.)。
UTC 选项可用于为跨两个时区的管辖区显示紧急响应范围。 将急救车辆加载为设施点。 将时间设置为 UTC 的当前时间。 (您需要确定当前 UTC 时间和日期,以便正确使用此选项。)设置其他属性,并对分析进行求解。 尽管时区边界会分割车辆,但结果仍将显示当前交通状况下可以到达的区域。 也可对其他时间使用相同的过程,而不仅是当前时间。
|
String
|
|
output_type
(可选)
|
指定将生成的输出类型。 服务区输出可以是超过中断值前表示可到达道路的线要素,也可以是包括这些线的面要素(表示可达到的区域)。
如果网络数据源是不支持线生成的 Portal for ArcGIS 版本上的服务,则线以及面和线输出类型将不可用。
|
String
|
|
polygon_detail
(可选)
|
指定输出面的细节层次。
如果分析包含的市区具有类似格网的街道网络,那么概化面和标准面之间的差异十分细微。 但是,如果涉及山区和农村道路,那么标准面和高精度面表示的结果可能要比概化面更加精确,
STANDARD—将创建具有标准细节层次的面。 这是默认设置。
GENERALIZED—将使用网络的等级属性创建创建概化面,以快速生成结果。 如果网络没有等级属性,则此选项不可用。
HIGH—对于精确结果非常重要的应用程序,将创建具有更高细节层次的面。
|
String
|
|
geometry_at_overlaps
(可选)
|
指定多个设施点中服务区输出间的相互行为。
OVERLAP—将为各个设施点创建单独的面或线集合。 这些面或线可以相互叠置。 这是默认设置。
DISSOLVE—中断值相同的多个设施点面将合并为一个单独的面。 该选项不适用于线输出。
SPLIT—区域将分配至最近设施点,因此面或线不会相互重叠。
|
String
|
|
geometry_at_cutoffs
(可选)
|
指定在指定了多个中断值的情况下单个设施点服务区输出的行为。 该参数不适用于线输出。
RINGS—各个面仅包括连续中断值之间的区域。 不包括设施点和任何较小中断值之间的区域。 例如,如果创建 5 分钟和 10 分钟服务区,那么 5 分钟服务区面将包含 0-5 分钟内可到达的区域,而 10 分钟服务区面则包含 5 到 10 分钟内可到达的区域。 这是默认设置。
DISKS—各个面均包含从设施点到中断值内可到达的区域,其中包括较小中断值内可到达的区域。 例如,如果创建 5 分钟和 10 分钟服务区,则 10 分钟服务区面将包含 5 分钟服务区面内的区域。
|
String
|
|
polygon_trim_distance
(可选)
|
服务区面修剪距离。 面修剪距离是服务区面将从道路延伸的距离,类似于线缓冲区大小。 该参数可对道路中心线与道路之间的可到达距离进行粗略建模。
此参数包括距离的值和单位。 默认值是 100 米。
修剪距离仅适用于未被其他可到达道路完全包围的区域。 无论修剪距离设置如何,服务区面都将覆盖被可到达道路完全包围的区域。
提示:
要生成仅包括可到达道路的修剪距离内区域的面,请将服务区分析配置为输出线而不是面,并使用缓冲区或成对缓冲区工具创建简单缓冲区。
|
Linear Unit
|
|
exclude_sources_from_polygon_generation
[exclude_sources_from_polygon_generation,...]
(可选)
|
生成服务区面时,系统将排除的网络数据集边源。 不会在已排除源周围生成面,即使它们在分析中遍历。
从服务区面中排除网络源时,不会阻止遍历这些源。 从服务区面中排除网络源仅影响服务区的面形状。 要阻止遍历给定网络源,必须在定义网络数据集时创建适当的限制。
在生成面的过程中,如果需要排除某些会创建低精度的面或者对服务区分析无关紧要的网络源时,此选项十分有用。 例如,在包含街道和地铁线路的多模式网络中创建步行时间服务区时,应在面生成过程中排除地铁线路。 尽管旅客可以乘坐地铁线路,但是他们却无法在地铁线路中途下车或进入到附近建筑。 相反,他们必须全程乘坐地铁线路,在地铁站离开地铁系统,然后通过街道步行至建筑物内。 沿地铁线路生成的面要素不会十分准确。
此参数在以下情况中不可用:输出几何类型不包括面,网络中的边源少于两个,网络数据源是 ArcGIS Online 服务,或者网络数据源服务所在 Portal for ArcGIS 的版本不支持排除源功能。
|
String
|
|
accumulate_attributes
[accumulate_attributes,...]
(可选)
|
分析过程中要累积的成本属性的列表。 这些累积属性仅供参考;求解程序仅使用求解分析时指定的出行模式所使用的成本属性。
对于每个累积的成本属性,会在网络分析输出要素中填充 Total_ [阻抗] 属性。
如果分析图层未配置为输出线、网络数据源为 ArcGIS Online 服务,或如果网络数据源是不支持累积的 Portal for ArcGIS 版本上的服务,则此参数不可用。
|
String
|
|
ignore_invalid_locations
(可选)
|
指定是否忽略无效的输入位置。 通常,如果无法在网络上定位,则位置无效。 当无效位置被忽略时,求解程序将跳过它们并尝试使用剩余位置执行分析。
|
Boolean
|
|
analysis_geodatabase
(可选)
|
存储新网络分析图层的子图层的文件地理数据库工作空间。 当未指定此参数时,将在当前工作空间地理处理环境(通常为工程地理数据库)中创建子图层的数据。
了解有关网络分析图层的分析数据源的详细信息
|
Workspace
|
|
analysis_feature_dataset_name
(可选)
|
用于命名该工具将在分析地理数据库中创建的新要素数据集的名称,该数据集将用于存储网络分析图层的子图层数据。 如未指定,要素数据集将以随机唯一名称创建。
了解有关网络分析图层的分析数据源的详细信息
|
String
|
派生输出
|
名称
|
说明
|
数据类型
|
|
out_network_analysis_layer
|
新创建的网络分析图层。
|
Network Analyst Layer
|
代码示例
MakeServiceAreaAnalysisLayer 示例 1(Python 窗口)
仅使用必需参数运行该工具。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
MakeServiceAreaAnalysisLayer 示例 2(Python 窗口)
使用所有参数运行该工具。
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
"Driving Time", "FROM_FACILITIES", [5, 10, 15],
"1/1/1900 9:00 AM", "UTC", "POLYGONS",
"STANDARD", "DISSOLVE", "RINGS", "100 meters",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"], ["Meters",
"DriveTime"])
MakeServiceAreaAnalysisLayer 示例 3(工作流)
以下独立脚本演示了如何使用 MakeServiceAreaAnalysisLayer 函数在消防站周围生成一分钟、两分钟和三分钟服务区。
# Name: MakeServiceAreaAnalysisLayer_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"
travel_mode = "Driving Time"
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 so we can determine the
#number of fire stations that cover a given location. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES", [1, 2, 3],
polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP",
geometry_at_cutoffs="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))
MakeServiceAreaAnalysisLayer 示例 4(工作流)
本例展示了如何在一天的多个时间点内在设施点周边创建服务区,以及如何将字段从输入要素移到输出要素并将输出面追加到现有要素类中。
旧版本:
GetNASublayer 函数用于调用网络分析图层的子图层。 它在 ArcGIS Pro 2.7 中引入。 在以前的软件版本中,用于检索网络分析图层的子图层对象的最佳方法是使用网络分析 Layer 对象的 listLayers 方法,该方法将子图层名称用作通配符。
# Name: MakeServiceAreaAnalysisLayer_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
import 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")
travel_mode = "Driving Time"
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.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES",
[3], polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP")
# 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, "")
# 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 = arcpy.na.GetNASublayer(layer_object, "Facilities")
polygons_sublayer = arcpy.na.GetNASublayer(layer_object, "SAPolygons")
# 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))