约束条件属性

约束条件可以在网络数据源上进行配置,这样在分析过程中,可完全禁止、避免甚至首选使用具有特定特征的遍历道路。 例如,约束条件可用于防止行人走上高速公路,或防止过高的卡车在没有足够净空高度的道路上行驶。

为针对特定分析遵守或忽略约束条件,可在求解时将其打开或关闭。 控制用于特定分析的约束条件的首选方法是通过出行模式进行控制。 您可以使用各种分析属性(包括约束条件)来配置出行模式,以便对路径选择中的相关车辆构建相应模型。 求解时,选择预定义的出行模式使您可以对约束条件和其他适用于要对其进行建模的出行模式的属性进行高效且持续地设置。

约束条件属性可以配置为拥有具有默认值的参数,且该默认值可以被使用该约束条件的出行模式所覆盖。 例如,您可以将车辆高度参数添加到约束条件属性。 参数值指示分析中所建模车辆的高度。

在任何情况下,约束条件属性经配置后均可为网络数据源中的每一个网络元素返回一个布尔值(true 或 false)。 对于给定的网络元素,如果约束条件返回 true,则意味着在对包括该约束条件的出行模式进行分析期间对该元素应用了相应的使用类型;如果返回 false,则意味着约束条件对于被评估的特定网络元素无影响。 限制还具有使用类型属性,可用于调整限制对路径的影响。

约束条件用法

分配给使用类型属性的值决定了约束条件属性是禁止、避免还是首选使用与其相关联的网络元素。 此外,网络元素的避免或偏好程度可分为“高”、“中”、或“低”三个等级。 以下三个章节介绍的是常规的约束条件用法。

禁止网络元素

约束条件的最常见用途是禁止遍历。 例如,可以使用约束条件属性对单向街道进行建模,由此只能从一端到另一端对其进行遍历,而不能反向对其进行遍历。 同样,人行道上的约束条件属性可设为完全禁止遍历,这样标识为人行道的网络元素就被排除在为机动车生成的所有路径之外。

避免网络元素

您可能需要放宽禁止约束条件而非完全禁止遍历某些网络元素,求解程序可凭此条件避免遍历相关元素(除非遍历无法实现或成本过高)。 例如,如果您在安排商业配送车辆的路线时希望它们避免在私家道路上行驶,则可以使用一个约束条件属性并将其使用类型属性设置为避免。 这样选择路线时大多会避免私家道路,但如果配送恰好需要经过私家道路,该路线仍能够到达目的地。 同样,如果在去往停靠点的途中避开私家道路的成本过高(即私家道路附近的绕行路线过长),则求解程序将允许此例外并安排车辆通过私家道路。

首选使用网络元素

约束条件属性使用类型的第三种类型是首选使用约束条件。 可通过首选使用类型配置约束条件属性。 请考虑一辆运送危险材料(危险品)的卡车。 针对运输危险品,有些道路是非法的,有些道路是允许的,而有些道路则是首选的,因为沿着这些道路发生的事故对于应急救援人员来说最容易到达和控制。 您可以通过以下方法对这些规则进行建模:在运送危险材料为非法的道路上配置一个使用类型值为禁止的约束条件属性,而在非常适宜运送危险材料的道路上再配置一个使用类型值为首选的约束条件属性。 这样一来,您的车辆将决不会被安排在禁止的道路上行驶,而是可能被安排在首选使用的道路上行驶。

使用类型值

通过为使用类型分配值,可以定义这种避免或偏好的程度。 具体来说,默认情况下,“高”、“中”、“低”和禁止的避免或偏好值如下所示:

  • -1:禁止
  • 5:避免(高)
  • 2:避免
  • 1.3:避免(低)
  • 0.8:首选(低)
  • 0.5:首选
  • 0.2:首选(高)
抢先版本:

每个文本值在内部由一个固定的数值表示,显示在上述列表的文本标注前。 所提供的文本选择及其基本数值足够几乎所有用户使用。 不过,如果需要微调避免或首选元素的程度,可通过提供自己的数值来实现。 为帮助您了解是否需要提供自定义值,您需要了解这些值对求解程序有哪些影响。

对于成本大于零的元素(通常大多是与边元素一起),将有约束条件的元素的成本乘以这些数值可提高或降低成本,进而使这些元素在分析期间的优先级增加或减少。 例如,首选元素乘以一个大于 0 且小于 1 的参数值可降低其成本,并使求解程序更有可能在结果中包含这些元素。 值首选:高有一个接近于 0 的值,首选:低有接近于 1 的值。 (请注意,不允许输入值 0;这会在求解时引起错误。)对于想要避免的元素,“约束条件用法”数值应设置为大于 1 的数,因为乘以这些值会提高成本。

对于成本为零的元素(例如,大多数网络数据集中的交汇点元素通常为零成本),如果“约束条件用法”数值大于一(表示您要避免的元素),有约束条件的元素的成本会增加至每个元素的“约束条件用法”数值,进而使这些元素在分析期间的优先级减少。 如果“约束条件用法”的数值小于一(表示您首选的元素),有约束条件的元素的成本仍为零。 请注意,这将不会使受限元素获得更多的优先级,因为这些元素的成本为零。

要禁止元素,“约束条件用法”的值在内部设置为 -1。 为简单起见,您可以认为 Network Analyst 将负成本值解释为不可穿越,但内部过程比这更为复杂。

应清楚求解程序只是临时使用这些修改后的成本;它们不会包括在分析输出或路线规划指示中。

要输入自定义值,请替换提供的数字,标注将自动更新为相应文本。

属性

约束条件选项卡会在上半部分显示网络数据源可用的约束条件属性,并在下半部分显示与选中的约束条件相关联的属性。

约束条件选项卡

属性部分将显示所选约束条件是如何配置的。 它会列出与约束条件属性相关联的元数据,以及有关参数和赋值器是如何配置的详细信息。

以下是“约束条件属性”的属性:

  • 名称 - 约束条件属性的名称。
  • 使用类型 - 约束条件属性的使用类型。 该属性指定在赋值器值为 True 时,约束条件属性是禁止、避免还是首选网络元素。
  • 参数 - 值的占位符,可针对特定分析更改这些值。 每个参数都有一个有意义的默认值,必要时可被覆盖。

    了解有关参数的详细信息

  • 赋值器 - 网络中定义的每个属性都必须提供与参与网络的每个源和方向(沿边方向和与边相反方向)相对应的值。 赋值器为每个源和行驶方向的属性指定值,每个元素默认的赋值器用于没有为属性分配赋值器的源和方向。

    了解有关赋值器的详细信息

注:

编辑网络数据集中的网络属性最好在不包括使用网络数据集的图层的工程中进行。 如果使用此网络数据集的工程中存在图层,则某些编辑操作可能会在网络数据集属性对话框中遭到拦截。 建议您创建一个空白工程,将连接添加到包含网络数据集的地理数据库中并在此工程中进行编辑。 当使用此网络数据集的图层在 ArcGIS Pro 会话中打开时,将无法添加、删除或重命名成本或约束条件属性。 这是为了确保网络数据集方案更新成功,且使用它的图层在打开时能够被正确初始化。

注:

更改任何网络属性时,您必须构建网络数据集以重新建立连通性、重新计算受影响的属性以及更新网络元素。

了解有关何时需要重新构建的详细信息

创建约束条件属性

您可以将约束条件属性配置为与出行模式一起使用。 要创建约束条件属性,请完成以下步骤:

  1. 网络数据集属性对话框上的访问网络属性
  2. 单击约束条件选项卡。
  3. 单击位于该对话框右上角的选项按钮 菜单
  4. 单击菜单中的新建按钮 加,或按 Ctrl+N

    新行即会添加到约束条件部分。

  5. 属性部分的名称字段中输入新约束条件属性的名称。
  6. 使用类型下拉列表中选择使用类型。
  7. 如有必要,请展开参数部分以添加新参数。
  8. 赋值器部分中,将赋值器分配给源要素。
  9. 单击出行模式选项卡。
  10. 如有必要,请展开约束条件部分。

    将新的约束条件属性添加到列表。

  11. 单击确定

    约束条件属性即会保存到网络数据集。

复制约束条件属性

要创建所选约束条件属性的副本,请完成以下步骤:

  1. 网络数据集属性对话框上的访问网络属性
  2. 单击约束条件选项卡。
  3. 选择要复制的约束条件属性。
  4. 单击位于该对话框右上角的选项按钮 菜单
  5. 单击复制按钮 复制,或按 Ctrl+Shift+N

    随即创建一个所选约束条件属性的副本,同时添加一个具有相似约束条件名称的新行(例如,如果复制的约束条件属性名称为 Oneway,则会添加一个名为 Oneway 2 的新约束条件属性)。 这个新的约束条件属性会继承您复制的约束条件属性的所有属性。

  6. 要对新创建的约束条件属性进行必要的编辑,请参阅以下编辑约束条件属性部分。
  7. 单击确定将更改保存到网络数据集。

删除约束属性

要删除约束条件属性,请完成以下步骤:

  1. 网络数据集属性对话框上的访问网络属性
  2. 约束条件选项卡中,选择要删除的约束条件属性。
  3. 单击位于该对话框右上角的选项按钮 菜单
  4. 单击删除按钮 删除,或按 Ctrl+D

    选定的约束属性随即删除。

  5. 注:
    如果约束条件属性由其他出行模式或属性使用,则删除选项将不可用。 要访问删除按钮,请从所有出行模式和属性中移除所选约束条件属性。

编辑约束条件属性

可编辑约束条件属性,以对属性或与约束条件相关的其他属性进行更改。 要编辑约束条件属性,请完成以下步骤:

  1. 网络数据集属性对话框上的访问网络属性
  2. 单击约束条件选项卡。
  3. 选择要编辑的约束条件属性。
  4. 属性部分,对名称使用类型属性进行必要的编辑。
  5. 如有必要,可编辑与约束条件属性关联的参数。
  6. 如有必要,可对约束条件属性的赋值器进行编辑。
  7. 单击出行模式选项卡。
  8. 对约束属性所做的更改将反映在约束部分。