计算边属性工具

计算边属性工具用于为形状的每条边计算方向和街道邻接属性。 然后,可以根据 CGA 使用计算的边属性来驱动基于各个边属性的模型生成。

使用工具

选择形状

  1. 选择要应用该工具的形状。
    所选形状
    所选形状

    该工具将针对可见街段计算每个所选形状的边属性,即无需选择街段。

    注:

    该算法目前仅适用于静态形状(请参阅形状)。 如果您希望计算动态形状的边属性,则首先需要使用图表 > 转换为静态形状将其转换为静态形状。

  2. 单击形状 > 计算边属性

    随即将打开工具对话框,其中提供了许多用于配置该算法的参数。 下面将详细介绍算法和参数。 对于常规用例,可以使用默认参数,然后仅需按应用即可执行算法。

    计算边属性对话框
    计算边属性对话框

检查计算的边属性

运行该工具后,将为每个所选形状分配计算的边属性。 下图说明了在运行工具后,如何使用边属性来增强所选形状的形状属性(在本例中,来自 OSM 数据源)。

要计算其属性的所选形状:

用于计算属性的所选形状
用于计算属性的所选形状

运行工具前的形状属性:

计算边属性前的属性
计算边属性前的属性

运行工具后的形状属性:

计算边属性后的属性
计算边属性后的属性

如图所示,该工具将添加 3 个形状属性,其中包含每个边的值列表,从索引 0 的边开始:

  • /edgeattr/orientations - enumeration[]

    包含每个边的方向的数组。

    • front:分配给面向前方的边,通常为主要道路。
    • rear:分配给与前边相反的边。
    • side:分配给前后之间的边。
    • inner:分配给形状孔洞的一部分的边。
  • /edgeattr/streetcategories - string[]

    包含每条边(例如主要边或公路)的街道类别的数组。

    • <类别>:如果某条边面向街道,则分配给该边。
    • NULL:如果某条边未面向街道,则分配给该边。
  • /edgeattr/streetwidths - float[]

    包含每条边的街道宽度的数组。

    • <宽度>:如果某条边面向街道,则分配给该边。
    • NaN:如果某条边未面向街道,则分配给该边。

根据 CGA 使用计算的边属性

可以使用边属性函数从 CGA 访问计算的边属性。

算法和参数的说明

计算边属性的算法分为 3 个阶段:阶段 1 将计算邻接信息;阶段 2 将确定边方向;阶段 3 将创建形状的边属性。

计算邻接信息

邻接信息的计算基于相应算法,该算法根据给定范围内的当前形状边来查找最近的街道边。 该范围将由大量参数控制,如下图所示:

邻接信息的计算
邻接信息的计算
  • 邻接搜索范围:搜索相邻形状和街段的绝对范围(默认值:100.0)。
  • 邻接搜索角度:搜索相邻形状和街段的绝对角度(默认值:15.0)。
  • 边缩进:与边的两个拐角的相对缩进,以边长度的百分比表示(默认值:10.0)。
  • 边公差:朝向形状内部的绝对偏移以增加正确处理重叠形状的公差(默认值:0.1)。

计算边方向

首先,将确定前边(如果选择允许多个前边,则确定多个前边):

  • 该算法将遍历所有边并选择面向街道的边。
  • 在面向街道的边中,选择具有最低街道类别的边。
  • 如果仅允许一个前边,并且多条边面向相同类别的街道,则将选择最长或最短的边,具体取决于前边的优先设置(前边优先)。
  • 确定前边后,该算法将计算后边。 根据后边的优先设置,将选择距离前边最远的边或者最平行于前边的边(后边优先)。
  • 其余边将指定为侧边(或者,如果它们是形状孔洞的一部分,则为内部边)。

创建边属性

如上所述,该算法取决于相邻街道的类别和宽度属性。 可以使用以下算法参数来配置将采用的街道属性:

  • 街道类别属性:用于从街道边获取街道类别的街道网络属性的名称。 对象属性需要为 string 类型。 如果留空,则将使用内置主/次属性。
  • 逗号分隔的街道类别列表:由此允许用户定义街道类别的有序列表,这些街道类别用于排序和确定前边。 例如,假设街道网络包含属性“street_category”,其值为“freeway”、“highway”、“backroad”。 然后,可以将街道类别属性设置为“category”,并将街道类别列表设置为“freeway, highway, backroad”,以确保正确使用优先级。
  • 街道宽度属性:用于从街道边获取街道宽度的街道网络属性的名称。 对象属性需要为 string 类型。 如果留空,则将使用内置街道宽度。
设置算法参数
设置算法参数