在执行网络分析时,分析的输入很少会恰好位于所使用网络数据源的边或交汇点的上方。 例如,您可能正在使用根据街道中心线构造的网络数据集,但是您希望分析的点是城市中的宗地质心。 这些宗地质心不会位于街道中心线上方;相反,它们会与街道偏移一定距离。 要成功执行网络分析,Network Analyst 必须确定每个分析输入所在的网络数据集上的位置。 分析中将使用此网络位置,而非输入的原始位置。 例如,如果您计算城市中两个宗地之间的路径,则该路径的起点和终点不是宗地质心,而是宗地质心捕捉到街道中心线的位置。
上图显示了路径停靠点在网络上的位置。 紫色圆圈指示该停靠点的地理位置。 但是,路径线始于沿街道网络的最近点,即该点的网络位置。
定位过程
将根据多个因素来计算网络位置,其中包括输入的地理位置、将使用其输入的网络分析的设置,以及用于定位输入的工具或功能中的用户指定位置设置。 对于输入点,此过程的工作原理如下:
- Network Analyst 查找网络上最接近原始点位置的点。
- Network Analyst 将考虑网络分析设置和用户的位置设置,以确定此位置对于定位分析输入是否有效。 如果认为该位置对于定位无效,则跳过该位置,并考虑下一个最近的位置。 以下是一些可能认为网络边或交汇点对于定位无效的原因:
- 该位置受所选出行模式限制。 例如,如果当前出行模式限制了所有限制访问的高速公路,并且最近的网络边为限制访问的高速公路,则此分析的点无法位于该边上。
- 位置受障碍限制。
- 位置受指定的位置设置限制。 例如,可以使用搜索查询来防止在具有特定道路类的网络边上定位输入。
- 该过程将重复进行,每次检查下一个最近的网络位置,直到找到输入点的有效网络位置为止。 如果在指定搜索容差距离内未找到有效位置,则该点将保持未定位状态,并且无法在分析中使用。
定位输入后,其网络位置将存储在一组字段中。 这些字段在下面的网络位置字段部分中有述。
在定位点障碍时,将忽略出行模式和其他障碍。 仅考虑几何和用户指定的位置设置。 线和面也可以用作网络分析输入,但只能用作线和面障碍。 这些障碍将位于其叠加的所有网络边或交汇点处,受到用户指定位置设置的约束。
网络分析工作流中的网络位置计算
在网络上定位输入的方式和时间将有所不同,具体取决于网络分析工作流。
基于图层的网络分析工作流
在使用网络分析图层执行分析时,您可以在运行添加位置工具时提前计算网络位置,在求解时自动计算,或这些的任意组合。 下面的小节在几个常见工作流的上下文中解释了这些选项。
使用添加位置工具的基于图层的工作流
最常见的基于图层的网络分析工作流之一是创建网络分析图层、运行添加位置工具以将输入添加到网络分析图层并求解图层。
如果网络分析图层引用本地网络数据集,则在运行添加位置工具时输入位于网络上。 工具根据工具参数中配置的设置、网络分析图层的出行模式以及当前存储在网络分析图层中的任何障碍来计算网络位置。 运行工具后,输入将添加到网络分析图层的指定子图层,并使用计算值填充该子图层的网络位置字段。 您可以在子图层的属性表中查看网络位置字段。
默认情况下,定位输入时会考虑网络分析图层的出行模式和现有障碍。 输入不会位于受出行模式或现有障碍限制的边和交汇点处。 因此,在使用添加位置工具加载其他分析输入之前,建议您先设置出行模式并加载障碍。 但是,如果在添加位置后更改出行模式,或者添加或移除障碍,则在求解时将自动重新计算受影响点的网络位置,以确保其仍然有效,除非此自动重新计算选项关闭。
对于引用门户服务的网络分析图层,则不会计算位置字段,直到您求解分析为止。 添加位置工具会将输入添加到分析图层,而无需计算位置字段。 在求解时,会将输入和网络分析图层的分析和定位设置一起发送到服务。 该服务将计算位置字段,执行分析,然后返回结果。 对图层进行求解后,可以在输入子图层的属性表中查看现已填充的位置字段。
使用编辑工具创建输入的基于图层的工作流
另一种常见的基于图层的网络分析工作流是创建网络分析图层,使用标准编辑工具在网络分析图层的子图层中手动创建要素,然后求解图层。 在此工作流中,输入在求解时位于网络上,使用在网络分析图层、其出行模式和障碍上配置的定位设置。 求解完成后,您可以在每个输入子图层的属性表中查看填充的网络位置字段。
使用预先计算的网络位置的基于图层的工作流
在某些工作流中,会使用计算位置工具预先计算要素类的网络位置。 在这种情况下,添加位置工具使用字段映射将预先计算的网络位置字段从输入要素类传输到指定的子图层。
在某些情况下,某些预先计算的网络位置可能会在求解时重新计算,以确保它们对分析有效,除非该选项被关闭。 如果在预先计算网络位置时使用了非默认位置设置,则应更新网络分析图层的位置设置以匹配。 这可确保在求解时自动重定位的任何输入都使用相同的位置设置。 有关此行为的更多信息包含在上面链接的主题中。
使用 Network Analyst 模块的基于 Python 的工作流
当使用 Network Analyst 模块 (arcpy.nax) 在 Python 中执行分析时,网络位置要么预先计算,要么在求解时计算。 以下小节汇总了这些选项。
没有预先计算的网络位置的基于 Python 的工作流
在典型的基于 Python 的工作流中,可以针对网络分析求解程序对象使用 load 方法或 insertCursor 方法将输入添加到分析。 除非显式映射现有网络位置字段,在使用 solve 方法求解分析前,将不会计算网络位置。 定位输入时会考虑分析中使用的出行模式和任何障碍,以及在网络分析求解程序对象上配置的定位设置。 求解分析后,现已填充的位置字段将显示在可通过求解程序结果对象访问的输出中。
使用预先计算的网络位置的基于 Python 的工作流
在某些工作流中,会使用计算位置工具预先计算要素类的网络位置。 在这种情况下,可以在使用 load 方法或 insertCursor 方法添加输入时映射网络位置字段。 然后在求解时使用这些预先存在的网络位置字段。
在某些情况下,某些预先计算的网络位置可能会在求解时重新计算,以确保它们对分析有效,除非该选项被关闭。 如果在预先计算网络位置时使用了非默认位置设置,则应更新求解程序对象的位置设置以匹配。 这可确保在求解时自动重定位的任何输入都使用相同的位置设置。 有关此行为的更多信息包含在上面链接的主题中。
影响输入定位方式的设置
多个设置控制定位行为。
您可以控制可用于定位的网络边和交汇点源。 例如,您可以将分析配置为在街道上而不是在人行道上定位输入。 要定位的可能源列表特定于用于分析的网络数据集。 使用基于图层的工作流执行网络分析时,您可以使用添加位置工具中的搜索条件参数或使用网络分析图层的属性页面来调整此设置。 当使用 Network Analyst 模块在 Python 中执行分析时,您可以使用 searchSources 属性(也可以用于为每个源设置查询)调整此设置。
搜索查询允许您使用 SQL 表达式限制对匹配某些特征的网络源要素的定位。 例如,您可以将分析配置为仅在与特定道路类匹配的街道要素上定位输入。 使用基于图层的工作流执行网络分析时,您可以使用添加位置工具中的搜索查询参数或使用网络分析图层的属性页面来调整此设置。 当使用 Network Analyst 模块在 Python 中执行分析时,您可以使用 searchSources 属性(也可以用于控制定位的源)调整此设置。
搜索容差控制在网络上定位输入要素所需的最大搜索距离。 如果在此距离内未发现有效的网络位置,则输入要素将被视为未定位。 小的搜索容差会降低定位到错误街道的可能性,但会增加找不到任何有效网络位置的可能性。 使用基于图层的工作流执行网络分析时,您可以使用添加位置工具中的搜索容差参数或使用网络分析图层的属性页面来调整此设置。 当使用 Network Analyst 模块在 Python 中执行分析时,您可以使用 searchTolerance 和 searchToleranceUnits 属性调整此设置。
注:
当分析网络数据源是 ArcGIS Online 或运行低于 11.0 的 ArcGIS Enterprise 版本的门户时,不支持这些设置。了解有关使用 Network Analyst 模块控制工作流的这些设置的更多信息
分别控制每个输入类的定位行为
在某些情况下,您可能希望分别控制分析中每个输入类型的定位行为。 例如,在 OD 成本矩阵分析中,如果搜索查询不需要应用于输入目标和障碍,则可以使用搜索查询仅用于输入源。
使用基于图层的工作流执行网络分析时,您可以使用网络分析图层的属性页面来配置单个子图层的定位行为。 此外,当您运行添加位置工具时,工具对话框中配置的与图层默认设置不匹配的任何位置设置都将保留在该子图层的图层上。
使用 Network Analyst 模块在 Python 中执行分析时,可以使用 setLocateSettingsOverrides 方法为单个输入类配置定位行为,覆盖分析的默认设置。 了解有关此方法的更多信息并查看设置分析输入中的示例。
注:
当分析网络数据源是 ArcGIS Online 或运行低于 11.0 的 ArcGIS Enterprise 版本的门户时,不支持此功能。网络位置字段
在网络上定位输入后,将使用网络位置字段来定义其网络位置。
点的网络位置字段
对于点输入,网络位置字段包含该点位于的网络边或交汇点的 ID。 如果此点位于某边上,则位置字段还包含沿该边的位置以及此点所位于的该边的侧。 点输入的网络位置字段如下:
字段名 | 描述 | 数据类型 |
---|---|---|
SourceID | 输入点所在的网络数据集源要素类的数字标识符。 | 长整型 |
SourceOID | 输入点所在的源中要素的 ObjectID。 | 长整型 |
PosAlong | 沿源线要素的数字化方向的位置点。该值以比率形式存储。如果网络位置引用交汇点,则此字段将为空。 | 双精度 |
SideOfEdge | 相对于线要素的数字化方向的边侧。此字段被限制为具有两个值的属性域:右侧 (1) 和左侧 (2)。 | 长整型 |
SnapX | 在网络数据集的坐标系中,网络数据集中该点所在位置的 x 坐标。 | 双精度 |
SnapY | 在网络数据集的坐标系中,网络数据集中该点所在位置的 y 坐标。 | 双精度 |
SnapZ | 在网络数据集的坐标系中,网络数据集中该点所在位置的 z 坐标。如果网络为二维网络,则 SnapZ 字段将为 0。 | 双精度 |
DistanceToNetworkInMeters | 点的地理位置与其在网络上的位置之间的距离,以米为单位。 | 双精度 |
线和面的网络位置字段
线和面可以在网络分析中用作障碍。 线或面输入的网络位置由单个 BLOB 字段定义:Locations。
字段名 | 描述 | 数据类型 |
---|---|---|
Locations | 此字段中的信息将定义线或面覆盖的网络边和交汇点,以及覆盖的每个边元素部分。您无法直接读取或编辑此字段中包含的信息,但是在求解分析时,Network Analyst 将对其进行解释。 | Blob |
未定位的输入
有时 Network Analyst 无法在网络上定位输入。 如果在指定搜索容差范围内未找到有效的网络边或交汇点时,则通常会出现这种情况。 这些未定位的输入无法用于网络分析。
在未定位某个点时,将不会填充网络位置字段。 此外,Status 字段的值为 1(Not Located)。 可以使用 Status 字段来查询表以查找所有未定位的输入。 查看这些未定位点的地理位置,以确定其是否可以安全忽略或者需要对其进行编辑。
在求解网络分析图层时,将默认忽略未定位的输入。 如果您希望在未定位输入的情况下求解失败,请取消选中求解工具上的忽略无效的位置选项。 对于基于 Python 的工作流,请使用网络分析求解程序对象的 ignoreInvalidLocations 属性来指示是否应忽略未定位的点。
预先计算的网络位置字段
计算大量输入的网络位置是一个非常耗时的过程。 如果您计划对于使用相同网络数据集和分析设置的多个分析使用相同的输入数据,则可以通过预先计算网络位置字段来节省处理时间。
使用车辆的方位角以更精确地计算网络位置
车辆行驶方向或者其方位角可用于在网络上更精确地确定其位置。