使用方法
该工具可反复运行,以将多个网络分析对象追加到同一子图层中。例如,如果路径图层的停靠点来自于两个要素类,则该工具可通过 APPEND 选项调用两次。
要在加载新的网络分析对象前删除现有的网络分析对象,请使用 CLEAR 选项。
如果用作网络数据集中的网络源的要素类具有有效的最新的空间索引,那么该工具的运行速度将显著提高。
语法
AddLocations(in_network_analysis_layer, sub_layer, in_table, {field_mappings}, {search_tolerance}, {sort_field}, {search_criteria}, {match_type}, {append}, {snap_to_position_along_network}, {snap_offset}, {exclude_restricted_elements}, {search_query})
参数 | 说明 | 数据类型 |
in_network_analysis_layer | 要添加网络分析对象的网络分析图层。 | Network Analyst Layer |
sub_layer | 要添加网络分析对象的网络分析图层的子图层。 | String |
in_table | 将充当新建网络分析对象的源的要素类或表。 | Table View |
field_mappings (可选) | 网络分析对象的属性值。属性可设置为常量或映射到输入要素类或表中的字段。 从 NAClassFieldMappings 类中获得的 NAClassFieldMappings 对象用于指定参数值。NAClassFieldMappings 对象是 NAClassFieldMap 对象的集合,允许您指定默认值或从网络分析对象属性的输入要素中映射字段名。如果正在加载的数据含有用于分析的网络数据集的网络位置或位置范围,请将网络位置字段从输入要素映射到网络位置属性。在字段映射中指定网络位置字段与使用工具对话框中的使用网络位置字段代替几何参数相类似。 警告:如果为其中的任意一个网络位置属性指定字段映射,那么您必须为其余的网络位置属性指定字段映射,以避免工具执行错误。 | Network Analyst Class FieldMap |
search_tolerance (可选) | 在网络上定位输入要素所使用的搜索容差。搜索容差以外的要素将保持未定位状态。该参数包括容差的值和单位。 默认值为 5000 米。 在将位置添加到具有线或面几何(如“线障碍”和“面障碍”)的子图层时,不使用该参数。 | Linear Unit |
sort_field (可选) | 当网络分析对象被添加到网络分析图层时用于排序网络分析对象的字段。默认设置为输入要素类或表中的 ObjectID 字段。 | Field |
search_criteria [[Source, SnapType],...] (可选) | 查找位置时将搜索网络数据集中的源以及将使用几何的部分(也称为捕捉类型)。 该参数值被指定为具有嵌套列表的列表。嵌套列表由两个值组成,分别表示每个网络源的名称和捕捉类型。捕捉类型通过关键字 SHAPE、MIDDLE、END 或 NONE 来指定。
要为单一网络源指定多个捕捉类型,请使用捕捉类型关键字的组合形式,用下划线将关键字分开。例如,MIDDLE_END 指定位置可以捕捉到网络源的中部或末尾。 添加线网络位置或面网络位置时,即使已经指定了其他捕捉类型,也仅使用 SHAPE 捕捉类型。 未包含在本列表中的任何网络源将使用其默认捕捉类型。最可靠的做法是将所有网络源包含在列表中并为每个网络源明确地设置捕捉类型。 除系统交汇点外的所有网络源的默认值均为 NONE,系统交汇点的默认值为 SHAPE。 | Value Table |
match_type (可选) | 指定网络位置的匹配方式。
在将位置添加到具有线或面几何(如“线障碍”和“面障碍”)的子图层时,不使用该参数。 | Boolean |
append (可选) | 指定是否将新网络分析对象附加到现有对象。
| Boolean |
snap_to_position_along_network (可选) | 指定是否沿着网络数据集或以离网络数据集的指定偏移量捕捉网络位置。
在将位置添加到具有线或面几何(如“线障碍”和“面障碍”)的子图层时,不使用该参数。 | Boolean |
snap_offset (可选) | 将点捕捉到网络时,您可以应用偏移距离。偏移距离为零表示点将与网络要素(通常是线)重合。要使点偏离网络要素,请输入偏移距离。偏移与起始点的位置有关;即,如果起始点在左侧,它的新位置就会向左偏移。如果起始点在右侧,它的新位置就会向右偏移。 在将位置添加到具有线或面几何(如“线障碍”和“面障碍”)的子图层时,不使用该参数。 默认值为 5 米。但是,如果将 snap_to_position_along_network 设置为 NO_SNAP,则会忽略此参数。 | Linear Unit |
exclude_restricted_elements (可选) | 指定是否将排除受限网络元素。
| Boolean |
search_query [[Source, Expression],...] (可选) | 将搜索限制在源要素类的要素子集内的查询。这在希望排除可能不适合网络位置的要素时很有用。例如,如果正在加载面的质心,但不想定位在地方道路上,则可定义一个仅搜索主要道路的查询。 该参数值被指定为具有嵌套列表的列表。嵌套列表由两个值组成,分别表示所有网络源的名称和 SQL 表达式。对于不同的网络源要素类类型,SQL 表达式的语法略有不同。例如,如果要查询存储在文件或企业级地理数据库中的源要素类或 shapefile,需将字段名用双引号括起:"CFCC"。 如果您不想指定特定源的查询,请使用 "#" 作为 SQL 表达式的值,或者将源名称和 SQL 表达式从参数值中排除。如果您不想指定所有网络源的查询,请使用 "#" 作为参数值。 例如,参数值 [["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] 指定了 Streets 源要素类的 SQL 表达式,而没有指定 Streets_ND_Junctions 源要素类的表达式。注意:用于括字段名 CFCC 的双引号通过反斜杠字符进行转义,以避免 Python 解释程序出现分析错误。 默认情况下不使用查询。 | Value Table |
派生输出
名称 | 说明 | 数据类型 |
output_layer | 已更新的网络分析图层。 | 网络分析图层 |
代码示例
仅使用必需参数执行此工具。
hospitals = "C:/Data/SanFrancisco.gdb/Analysis/Hospitals"
arcpy.na.AddLocations("Route", "Stops", hospitals, "", "")
使用所有参数执行此工具。
hospitals = "C:/Data/SanFrancisco.gdb/Analysis/Hospitals"
arcpy.na.AddLocations("Route", "Stops", hospitals,
"Name Name #;Attr_Minutes VisitTime 0;CurbApproach # 0",
"2 Miles", "FID",
[["Streets", "SHAPE"], ["Streets_ND_Junctions", "NONE"]],
"MATCH_TO_CLOSEST", "CLEAR", "SNAP", "10 Feet", "EXCLUDE",
[["Streets", '"FREEWAY" = 0'],
["Streets_ND_Junctions", ""]])
以下独立 Python 脚本演示了如何使用 AddLocations 工具将起始点和目的地点加载到 OD 成本矩阵图层中。
# Name: AddLocations_Workflow.py
# Description: Calculate a travel time matrix between stores. Use the Add
# Locations tool to load origins and destinations into an OD Cost
# Matrix layer. Since the origins and destinations are the same in
# this case, the origins are first loaded from the stores feature
# class using geometry, and the destinations are loaded from the
# origins using network location fields in order to speed up the
# load times.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#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 inputs and outputs
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "StoreTravelTimeMatrix"
travel_mode = "Driving Time"
stores = os.path.join(input_gdb, "Analysis", "Stores")
search_tolerance = "500 Meters"
search_query = [["Streets", '"FREEWAY" = 0'], ["Streets_ND_Junctions", ""]]
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new OD cost matrix analysis layer. For this scenario, the default
#value for all the remaining parameters statisfies the analysis requirements
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
travel_mode)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the OD layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Store the layer names for later use
origins_layer_name = sublayer_names["Origins"]
destinations_layer_name = sublayer_names["Destinations"]
#Load store features as origins using the geometry of store features.
#Ensure that the stores are not located on freeways by using a search query.
arcpy.na.AddLocations(layer_object, origins_layer_name, stores, "",
search_tolerance,
exclude_restricted_elements = "EXCLUDE",
search_query = search_query)
#Because we want our origins and destinations to be the same, load the
#origins as destinations using the network locations fields. Loading using
#existing network location fields is much faster than loading using geometry
#because the network locations have already been calculated.
#Create a field mappings object that supports network location fields using
#the candidate fields from origins
origins_sublayer = layer_object.listLayers(origins_layer_name)[0]
candidate_fields = arcpy.ListFields(origins_sublayer)
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
destinations_layer_name, True,
candidate_fields)
arcpy.na.AddLocations(layer_object, destinations_layer_name,
origins_sublayer, field_mappings, "")
#Solve the od cost matrix layer. Halt the execution if there is an
#invalid location
arcpy.na.Solve(layer_object, "HALT")
#Save the solved OD cost matrix 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))
环境
许可信息
- Basic: 是
- Standard: 是
- Advanced: 是