quick-vector-desktop

线段分析

线段分析功能列表:

  1. 自重叠分析
  2. 连接分析(图形)
  3. 连接分析(方向)

自重叠分析

自重叠分析有两种情况:

  1. 完全叠加
  2. 部分叠加

环分析

环分析用于找到形成环的边。注意:

  1. 输出的结果是形成环的子边(子边:只有起点和终点两个点组成)。
  2. 监测的是点到点的链接。

连接分析(图形)

连接分析(图形)是用来判断两条线是否在图形上是连接的。基于WKT的线段描述线分为LineString和MultiLineString两类,有关图形的连接分析需要设计如下几种情况:

  1. 检查的两条线都是LineString。
  2. 检查的两条线都是MultiLineString。
  3. 检查的两条线分别是LineString和MultiLineString。

注意当线段自身是MultiLineString时需要进行自检,自检是为了满足自身的子线段都是连接的。

检查的两条线都是LineString

当比较的两条线都是LineString时需要分别比较两条线的第一个点和最后一个点是否相同,只要满足以下条件中的任意一个就认为连接:

  1. 线1的第一个点和线2的第一个点相同。
  2. 线1的第一个点和线2的最后一个点相同。
  3. 线1的最后一个点和线2的第一个点相同。
  4. 线1的最后一个点和线2的最后一个点相同。

MultiLineString 自检

当输入的线类型是MultiLineString时需要进行如下检查,确保线自身是连接的。检查流程:

  1. 将线拆分为多个子线。如果拆分后子线数量是1则不需要检查链接。
  2. 对比所有子线,每两个子线都需要对比,判断子线是否链接的依据是子线和非自身子线以外相连接。子线和子线是否链接需要满足如下条件。注意子线1和子线2不是同一个
    1. 子线1的第一个点和子线2的第一个点相同。
    2. 子线1的第一个点和子线2的最后一个点相同。
    3. 子线1的最后一个点和子线2的第一个点相同。
    4. 子线1的最后一个点和子线2的最后一个点相同。

检查的两条线分别是LineString和MultiLineString。

假设线1类型是 LineString,线2类型是 MultiLineString。检查流程:

  1. 提取线1的第一个点和最后一个点。
  2. 将线2拆分为多个子线。
  3. 将第一步中第一个点和最后一个点与第二步中的所有子线进行对比,满足如下条件中的任意一个则表示链接:
    1. 线1的第一个点和子线的第一个点相同。
    2. 线1的第一个点和子线的最后一个点相同。
    3. 线1的最后一个点和子线的第一个点相同。
    4. 线1的最后一个点和子线的最后一个点相同。

假设线1类型是 MultiLineString,线2类型是 LineString。检查流程:

  1. 将线1拆分为多个子线。
  2. 提取线2的第一个点和最后一个点。
  3. 将第一步中的所有子线与第二步中第一个点和第二个点进行对比,满足如下条件则表示你链接:
    1. 子线的第一个点和线2的第一个点相同
    2. 子线的第一个点和线2的最后一个点相同
    3. 子线的最后一个点和线2的第一个点相同
    4. 子线的最后一个点和线2的最后一个点相同

检查的两条线都是MultiLineString

前提:输入的检查线是自连接的

当输入的两条线都是MultiLineString需要进行如下校验:

  1. 将线1拆分为多个子线。
  2. 将线2拆分为多个子线。
  3. 将第一步中的子线和第二步中的子线进行对比。检查规则:第一步中的子线只要有一个和第二步中的子线连接就认为连接。

连接分析(方向)

连接分析(方向)是用来判断两条线是否在方向上是连接的。方向的定义:线段第一个点认为是起点,线段最后一个点是终点,方向从起点走向终点。一条线的第一个点只能作为其他线的最后一个点,一条线的最后一个点只能作为其他线的第一个点。

  1. 将所有线都拆分为子线
  2. 提取子线的所有起点和终点
  3. 确定是否存在环
    1. 剔除环
    • 确认是否存在环,如果存在环则需要将其涉及的所有边找出来

image-20230607202319502