首页 > 解决方案 > 如何使用函数 cppRouting (R) 在非方形二进制矩阵中获得最短路径

问题描述

我有一个给定二进制非方阵的计算,如下图所示。

我想找到由值为“1”的单元格创建的路径两端之间的最短路径。未来的目标是获取路径,绘制它并计算从其他单元格到该路径的距离。

我不清楚它的功能get_distance_matrixget_distance_pair工作get_path_pair原理。

所以我创建了一个数据框 df,它只有值“1”的单元格。

    library(data.table)
    library(cppRouting)
    
    setwd("C:/Users/laure/Desktop/Land cover rural")
    mat <- read.csv("test.csv",  header = TRUE)
    mat <- as.matrix(mat)
> mat
      X0 X0.1 X0.2 X0.3 X1 X1.1 X1.2 X1.3 X1.4 X0.4 X0.5
 [1,]  0    0    0    0  1    1    1    1    0    0    0
 [2,]  0    0    0    0  1    1    0    0    0    0    0
 [3,]  0    0    0    0  1    1    0    0    0    0    0
 [4,]  0    0    0    0  1    1    0    0    0    0    0
 [5,]  0    0    0    0  1    1    0    0    0    0    0
 [6,]  0    0    0    0  1    0    0    0    0    0    0
 [7,]  0    0    0    0  1    0    0    0    0    0    0
 [8,]  0    0    0    1  1    0    0    0    0    0    0
 [9,]  0    0    0    1  1    0    0    0    0    0    0
[10,]  0    0    0    1  1    0    0    0    0    0    0
[11,]  0    0    1    1  0    0    0    0    0    0    0
[12,]  0    0    1    1  0    0    0    0    0    0    0
[13,]  0    0    1    1  0    0    0    0    0    0    0
[14,]  0    0    1    1  0    0    0    0    0    0    0
[15,]  0    0    0    1  0    0    0    0    0    0    0
[16,]  0    0    0    1  0    0    0    0    0    0    0
[17,]  0    0    0    1  0    1    0    0    0    0    0
[18,]  0    0    0    1  1    0    0    0    0    0    0
[19,]  0    0    0    1  1    0    0    0    0    0    0
[20,]  0    0    0    1  1    0    0    0    0    0    0
[21,]  0    0    0    1  1    0    0    0    0    0    0
[22,]  0    0    0    1  1    0    0    0    0    0    0
[23,]  0    0    0    1  1    0    0    0    0    0    0
[24,]  0    0    0    0  1    0    0    0    0    0    0
[25,]  0    0    0    0  1    1    0    0    0    0    0
[26,]  0    0    0    1  1    1    1    0    0    0    0
[27,]  0    0    0    0  1    1    1    1    1    0    0
[28,]  0    0    0    0  0    0    1    1    1    0    0
    
    df <- data.frame()
    
    ind <- 0
    
    for(j in 1:v){
      for(k in 1:h){
        if (mat[j,k] == 1){
        ind <- ind+1
        df[ind, 1:3] <- data.frame(j, k, mat[j,k])
      }
      }
    }
    Graph <- makegraph(df,directed=FALSE)
    
    from <- c(1,5)
    to <- c(28,9)
    
    test <- get_distance_matrix(Graph, from, to, algorithm = "phast",
                        allcores = FALSE)
    > test
      28 9
    1  2 2
    5  2 1


    pair <- get_distance_pair(Graph, from , to, algorithm = "NBA")

    > pair
    [1] 2 1

    path <- get_path_pair(Graph, from, to, algorithm = "Dijkstra", constant = 1,
                          keep = NULL, long = TRUE)
   > path
     from to node
   1    1 28   28
   2    1 28    7
   3    1 28    1
   4    5  9    9
   5    5  9    5

> df
      j k mat.j..k.
X1    1 5         1
X1.1  1 6         1
X1.2  1 7         1
X1.3  1 8         1
5     2 5         1
6     2 6         1
7     3 5         1
8     3 6         1
9     4 5         1
10    4 6         1
11    5 5         1
12    5 6         1
13    6 5         1
14    7 5         1
X0.3  8 4         1
16    8 5         1
17    9 4         1
18    9 5         1
19   10 4         1
20   10 5         1
X0.2 11 3         1
22   11 4         1
23   12 3         1
24   12 4         1
25   13 3         1
26   13 4         1
27   14 3         1
28   14 4         1
29   15 4         1
30   16 4         1
31   17 4         1
32   17 6         1
33   18 4         1
34   18 5         1
35   19 4         1
36   19 5         1
37   20 4         1
38   20 5         1
39   21 4         1
40   21 5         1
41   22 4         1
42   22 5         1
43   23 4         1
44   23 5         1
45   24 5         1
46   25 5         1
47   25 6         1
48   26 4         1
49   26 5         1
50   26 6         1
51   26 7         1
52   27 5         1
53   27 6         1
54   27 7         1
55   27 8         1
X1.4 27 9         1
57   28 7         1
58   28 8         1
59   28 9         1

标签: rmatrixshortest-path

解决方案


推荐阅读