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