计算位置 (Network Analyst)

摘要

用于定位网络上的输入要素,并将字段添加到描述网络位置的输入要素。 该工具用于预先计算将在 Network Analyst 工作流中使用的输入的网络位置,从而提高求解时的分析性能。 该工具将计算的输入网络位置存储在输入数据的字段中。

了解有关定位网络上的要素的详细信息

了解有关预先计算网络位置的详细信息

使用情况

  • 默认情况下,此工具将已计算网络位置存储在一组字段中,其中所有 Network Analyst 工作流可识别网络位置字段名。 但是,您可以更改存储已计算网络位置的字段的名称。 在这种情况下,如果在工作流中使用预先计算的网络位置,请使用字段映射将非默认位置字段映射到正确的网络位置属性。

    更改字段名称的唯一原因是需要为同一要素类中的不同网络或出行模式存储单独的一组位置字段。 否则,必须使用默认字段名。

    可以使用源 ID 字段源 OID 字段延伸百分比字段边缘侧字段定位的 X 坐标字段定位的 Y 坐标字段要素距离字段定位的 Z 坐标字段位置范围字段参数指定备用字段名。

  • 此工具仅使用网络数据集计算输入的网络位置。 无法计算网络分析服务的网络位置。

  • 如果输入要素是网络分析图层的子图层,则将根据存储在输入网络分析图层中的位置属性自动填充搜索容差搜索条件搜索查询参数。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。

    了解有关网络分析图层位置设置的详细信息

  • 如果输入要素是网络分析图层的子图层,并且您更改了搜索容差搜索条件搜索查询参数的值,则运行该工具将更新所选子图层的网络分析图层的位置设置替代。 将这些位置设置存储在网络分析图层中可确保在求解时完成的任何自动重定位都使用您在最初计算网络位置时已使用的相同位置设置。

参数

标注说明数据类型
输入要素

将要计算网络位置的输入要素。

对于线和面要素,由于网络位置信息存储在 BLOB 字段中,所以仅支持地理数据库要素类。

Table View
输入分析网络
(可选)

将用于计算位置的网络数据集。

除非网络分析图层的子图层用作输入要素,否则此参数为必填项。 在这种情况下,将隐藏该参数,并自动将其设置为网络分析图层所引用的网络数据集。

Network Dataset Layer
搜索容差
(可选)

在网络上定位输入要素所需的最大搜索距离。 搜索容差以外的要素将保持未定位状态。 该参数包括值和单位。

默认值为 5000 米。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

计算线或面要素的位置时,不使用该参数。

Linear Unit
搜索条件
(可选)

在网络上定位输入时,将搜索的网络数据集中的边和交汇点源。 例如,如果网络数据集引用表示街道和人行道的单独要素类,则可以在街道上定位输入,而非人行道。

以下是每个网络源可用的捕捉类型选择:

  • NONE - 点将不位于此网络源的元素上。
  • SHAPE - 点将位于此网络源中元素的最近点处。
  • MIDDLE - 此选项已弃用,其行为与 Shape 相同。
  • END - 此选项已弃用,其行为与 Shape 相同。

默认值是在所有网络源上定位,但通过运行融合网络工具创建的替代交汇点和系统交汇点除外。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

Value Table
在所有类中查找最近的
(可选)

旧版本:
此参数已弃用和维护,只是为了向后兼容。 输入将始终与用于定位的所有源中最近的网络源匹配,对应于参数值 MATCH_TO_CLOSESTTrue

Boolean
源 ID 字段
(可选)

要创建或更新的字段的名称,将使用输入要素已计算网络位置的网络数据集源要素类的 ID 进行填充。 默认值为 SourceID

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
源 OID 字段
(可选)

要创建或更新的字段的名称,将使用输入要素已计算网络位置的网络数据集源要素类的 ObjectID 字段值进行填充。 默认值为 SourceOID

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
延伸百分比字段
(可选)

要创建或更新的字段的名称,用于描述已计算网络位置沿其所在网络元素的延伸百分比。 默认值为 PosAlong

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
边缘侧字段
(可选)

要创建或更新的字段的名称,用于描述已计算网络位置所在的网络边缘侧。 默认值为 SideOfEdge

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
定位的 X 坐标字段
(可选)

要使用已计算网络位置的 x 坐标创建或更新的字段名称。 默认值为 SnapX

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
定位的 Y 坐标字段
(可选)

要使用已计算网络位置的 y 坐标创建或更新的字段名称。 默认值为 SnapY

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
要素距离字段
(可选)

要创建或更新的字段的名称,用于描述原始点要素与其已计算网络位置之间的距离(以米为单位)。 默认值为 DistanceToNetworkInMeters

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
定位的 Z 坐标字段
(可选)

要使用已计算网络位置的 z 坐标创建或更新的字段的名称。 默认值为 SnapZ

仅当输入的网络数据集支持基于网络源的 z 坐标值的连通性时,才会使用该参数。

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
位置范围字段
(可选)

要使用线或面要素的计算的网络位置的位置范围创建或更新的字段的名称。 默认值为 Locations

仅当计算线或面要素的位置时,才会使用此参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
排除网络的受限部分
(可选)

旧版本:
此参数已弃用和维护,只是为了向后兼容。 分析输入永远不会位于受限制的网络元素上,对应于 EXCLUDETrue 的参数值。

Boolean
搜索查询
(可选)

将搜索限制在源要素类的要素子集内的查询。 这在不想查找可能不适合网络位置的要素时很有用。 例如,如果您不想定位在高速公路坡道上,则可定义一个查询将其排除。 可以为网络数据集的每个边或交汇点源要素类指定一个单独的 SQL 表达式。

任何在地理处理窗格中未明确指定的网络源都不会应用查询。

默认情况下,不对任何源使用查询。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

Value Table
出行模式
(可选)

将使用的出行模式的名称。

如果选择了一个出行模式,那么将在计算网络位置时进行出行模式设置(例如限制和阻抗属性)。 例如,在应用所选出行模式时,如果距离输入点之一最近的网络边缘受到限制,则该工具将定位下一条不受限制的网络边缘上的点。

可用出行模式取决于输入分析网络参数值。

如果将网络分析图层的子图层用作输入要素,则将隐藏此参数并且不应使用此参数。 在计算网络位置时,将自动使用网络分析图层的当前出行模式。

String

派生输出

标注说明数据类型
更新的输入要素

更新后的输入要素。

Table View
网络分析图层

如果输入要素参数值是网络分析图层的子图层,则此派生输出参数将返回子图层的父网络分析图层。 否则,将不返回任何值。

Network Analyst Layer

arcpy.management.CalculateLocations(in_point_features, {in_network_dataset}, {search_tolerance}, {search_criteria}, {match_type}, {source_ID_field}, {source_OID_field}, {position_field}, {side_field}, {snap_X_field}, {snap_Y_field}, {distance_field}, {snap_Z_field}, {location_field}, {exclude_restricted_elements}, {search_query}, {travel_mode})
名称说明数据类型
in_point_features

将要计算网络位置的输入要素。

对于线和面要素,由于网络位置信息存储在 BLOB 字段中,所以仅支持地理数据库要素类。

Table View
in_network_dataset
(可选)

将用于计算位置的网络数据集。

除非网络分析图层的子图层用作输入要素,否则此参数为必填项。 在这种情况下,请勿为此参数指定值,或者将其设置为网络分析图层所引用的网络数据集。

Network Dataset Layer
search_tolerance
(可选)

在网络上定位输入要素所需的最大搜索距离。 搜索容差以外的要素将保持未定位状态。 该参数包括值和单位。

默认值为 5000 米。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

计算线或面要素的位置时,不使用该参数。

Linear Unit
search_criteria
[[Source, SnapType],...]
(可选)

在网络上定位输入时,将搜索的网络数据集中的边和交汇点源。 例如,如果网络数据集引用表示街道和人行道的单独要素类,则可以在街道上定位输入,而非人行道。

该参数值被指定为具有嵌套列表的列表。 嵌套列表由两个值组成,分别表示每个网络源的名称和捕捉类型。

以下是每个网络源可用的捕捉类型选择:

  • NONE - 点将不位于此网络源的元素上。
  • SHAPE - 点将位于此网络源中元素的最近点处。

例如,参数值 [["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]] 指定搜索可定位于 Streets 源的形状,而不可定位于 Streets_ND_Junctions 源。

未包含在本列表中的任何网络边或交汇点源源将使用其默认捕捉类型。 建议将所有网络源包含在列表中并为每个网络源明确地设置捕捉类型。

旧版本:
该工具历来支持的捕捉类型有 MIDDLEENDMIDDLE_END。 为了进行向后兼容性,将弃用这些选项并加以维护。 如果指定了这些选项之一,该工具将恢复为该网络源的 SHAPE 选项。

默认值是在所有网络源上定位,但通过运行融合网络工具创建的替代交汇点和系统交汇点除外。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

Value Table
match_type
(可选)

旧版本:
此参数已弃用和维护,只是为了向后兼容。 输入将始终与用于定位的所有源中最近的网络源匹配,对应于参数值 MATCH_TO_CLOSESTTrue

Boolean
source_ID_field
(可选)

要创建或更新的字段的名称,将使用输入要素已计算网络位置的网络数据集源要素类的 ID 进行填充。 默认值为 SourceID

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
source_OID_field
(可选)

要创建或更新的字段的名称,将使用输入要素已计算网络位置的网络数据集源要素类的 ObjectID 字段值进行填充。 默认值为 SourceOID

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
position_field
(可选)

要创建或更新的字段的名称,用于描述已计算网络位置沿其所在网络元素的延伸百分比。 默认值为 PosAlong

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
side_field
(可选)

要创建或更新的字段的名称,用于描述已计算网络位置所在的网络边缘侧。 默认值为 SideOfEdge

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
snap_X_field
(可选)

要使用已计算网络位置的 x 坐标创建或更新的字段名称。 默认值为 SnapX

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
snap_Y_field
(可选)

要使用已计算网络位置的 y 坐标创建或更新的字段名称。 默认值为 SnapY

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
distance_field
(可选)

要创建或更新的字段的名称,用于描述原始点要素与其已计算网络位置之间的距离(以米为单位)。 默认值为 DistanceToNetworkInMeters

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
snap_Z_field
(可选)

要使用已计算网络位置的 z 坐标创建或更新的字段的名称。 默认值为 SnapZ

仅当输入的网络数据集支持基于网络源的 z 坐标值的连通性时,才会使用该参数。

计算线或面要素的位置时,不使用该参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
location_field
(可选)

要使用线或面要素的计算的网络位置的位置范围创建或更新的字段的名称。 默认值为 Locations

仅当计算线或面要素的位置时,才会使用此参数。

当输入要素为网络分析图层的子图层时,请勿使用此参数。 子图层中的网络位置必须以默认名称存储在位置字段中,否则在求解图层时将不会使用它们。

Field
exclude_restricted_elements
(可选)

旧版本:
此参数已弃用和维护,只是为了向后兼容。 分析输入永远不会位于受限制的网络元素上,对应于 EXCLUDETrue 的参数值。

Boolean
search_query
[[Source, Expression],...]
(可选)

将搜索限制在源要素类的要素子集内的查询。 这在不想查找可能不适合网络位置的要素时很有用。 例如,如果您不想定位在高速公路坡道上,则可定义一个查询将其排除。 可以为网络数据集的每个边或交汇点源要素类指定一个单独的 SQL 表达式。

该参数值被指定为具有嵌套列表的列表,其中每个网络源具有一个条目。 每个内部列表由两个值组成,分别表示网络源的名称和用作该源的查询的 SQL 表达式。 空字符串 "" 表示不查询特定源。

例如,值 [["Streets", "ROAD_CLASS <> 3"], ["Streets_ND_Junctions", ""]] 指定了 Streets 源要素类的 SQL 表达式,而没有指定 Streets_ND_Junctions 源要素类的表达式。 如果列表中不包含网络源,则将其解释为无查询。 值 [["Streets", "ROAD_CLASS <> 3"]] 等同于 [["Streets", "ROAD_CLASS <> 3"], ["Streets_ND_Junctions", ""]]

有关 SQL 语法的详细信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考

默认情况下,不对任何源使用查询。

如果输入要素是网络分析图层的子图层,则此参数的默认值由存储在输入网络分析图层中的位置属性确定。 如果网络分析图层具有所选子图层的位置设置替代,则将使用这些设置。 否则,将使用网络分析图层的默认位置设置。 为此参数设置非默认值将更新网络分析图层的位置设置,覆盖选定子图层。

Value Table
travel_mode
(可选)

将使用的出行模式的名称。

如果选择了一个出行模式,那么将在计算网络位置时进行出行模式设置(例如限制和阻抗属性)。 例如,在应用所选出行模式时,如果距离输入点之一最近的网络边缘受到限制,则该工具将定位下一条不受限制的网络边缘上的点。

可用出行模式取决于 in_network_dataset 参数值。

arcpy.na.TravelMode 对象和包含出行模式有效 JSON 表示的字符串也可用作参数的输入。

如果将网络分析图层的子图层用作输入要素,请勿设置此参数的值。 在计算网络位置时,将自动使用网络分析图层的当前出行模式。

String

派生输出

名称说明数据类型
out_point_feature_class

更新后的输入要素。

Table View
output_layer

如果 in_point_features 参数值是网络分析图层的子图层,则此派生输出参数将返回子图层的父网络分析图层。 否则,将不返回任何值。

Network Analyst Layer

代码示例

CalculateLocations 示例 1(Python 窗口)

计算点要素的位置。

stores = "C:/Data/SanFrancisco.gdb/Analysis/Hospitals/Analysis/Stores"
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.CalculateLocations(stores, network, "5000 Meters",
                            [["Streets", "SHAPE"],
                            ["Streets_ND_Junctions", "NONE"]])
CalculateLocations 示例 2(工作流)

以下代码示例演示了使用 CalculateLocations 函数预先计算网络位置以及在 arcpy.nax 工作流中使用这些预先计算的网络位置。

fieldMappings 方法中的 use_location_fields 参数设置为 True 以确保在加载分析输入时,将使用预先计算的网络位置字段。 此外,可以利用在服务区分析中所使用的相同网络数据集、出行模式和位置设置来计算网络位置字段,以确保结果有效且一致。

"""Precalculate network locations with the Calculate Locations
geoprocessing tool, then run a Service Area workflow using
the arcpy.nax solver object. Map the precalculated network
locations using fieldMappings and load.
"""
import arcpy

arcpy.CheckOutExtension("network")

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
input_facilities = "C:/Data/Paris.gdb/Analysis/Stores"
travel_mode = "Driving Time"

# Make a network dataset layer
nd_layer = arcpy.nax.MakeNetworkDatasetLayer(network).getOutput(0)

# Run Calculate Locations to calculate the network locations of
# the points in the input feature class. Use the same network,
# travel mode, and locate settings that will be used in the
# network analysis.
# Set a search_tolerance of 500 meters.
# Use search_criteria to locate only on streets and metro entrances.
# Use search_query to prevent locating on highways (FUNC_CLASS 1)
arcpy.nax.CalculateLocations(
    input_facilities,
    nd_layer,
    search_tolerance="500 Meters",
    search_criteria=[
        ["Streets", "SHAPE"],
        ["Metro_Lines", "NONE"],
        ["Transfer_Stations", "NONE"],
        ["Transfer_Street_Station", "NONE"],
        ["Metro_Entrances", "SHAPE"],
        ["Metro_Stations", "NONE"],
        ["ParisMultimodal_ND_Junctions", "NONE"]
    ],
    search_query=[["Streets", "FUNC_CLASS <> '1'"]],
    travel_mode=travel_mode
)

# Initialize the Service Area solver object
service_area = arcpy.nax.ServiceArea(nd_layer)

# Set the analysis properties. Use the same travel mode and
# locate settings that were used when precalculating the
# network locations
service_area.travelMode = travel_mode
service_area.searchTolerance = 500
service_area.searchToleranceUnits = arcpy.nax.DistanceUnits.Meters
service_area.searchSources = [
    ["Streets", "FUNC_CLASS <> '1'"],
    ["Metro_Entrances", "SHAPE"]
]
service_area.defaultImpedanceCutoffs = [5, 10]

# Construct a field mapping object with network location fields
field_mappings = service_area.fieldMappings(
    arcpy.nax.ServiceAreaInputDataType.Facilities,
    use_location_fields=True
)

# Load the input data using the field mappings
# Location fields are included automatically because
# of the field mappings.
service_area.load(
    arcpy.nax.ServiceAreaInputDataType.Facilities,
    input_facilities,
    field_mappings
)

# Solve the analysis
result = service_area.solve()
print(result.solveSucceeded)

# ...analysis of the results continues...