美文网首页
R语言sfnetworks包,st_network_paths地

R语言sfnetworks包,st_network_paths地

作者: youmigo | 来源:发表于2021-09-02 02:23 被阅读0次

    R语言sfnetworks包,st_network_paths地理空间点间路径
    寻找最短路径,最短距离

    # Mon Jul 26 15:30:06 2021 -
    
    # 字符编码:UTF-8
    # R 版本:R x64 4.1 for window 11
    # cgh163email@163.com
    # 个人笔记不负责任,拎了个梨🍐🍈
    #.rs.restartR()
    require(sfnetworks)
    rm(list = ls());gc()
    
    ?st_network_paths()#地理空间点间路径
    
    library(sf, quietly = TRUE)
    library(tidygraph, quietly = TRUE)
    
    #创建以边长度作为权重的网络。
    #这些权重将自动用于最短路径计算。
    net <- as_sfnetwork(roxel, directed = FALSE) #|> plot()
      st_transform(3035) |>
      activate("edges")  |>
      mutate(weight = edge_length())
    
    # 提供节点索引。
    paths = st_network_paths(net, from = 495, to = 121)
    paths
    #> # A tibble: 1 x 2
    #>   node_paths edge_paths
    #>   <list>     <list>
    #> 1 <int [33]> <int [32]>
    node_path = paths %>%
      slice(1) %>%
      pull(node_paths) %>%
      unlist()
    node_path
    #>  [1] 495 485 244 402 166  18  19  96 299 283   9 167 292 524 111 506 512 657 533
    #> [20] 424 426 208 164 260 471 143 136 135 140 478  28  29 121
    oldpar = par(no.readonly = TRUE)
    par(mar = c(1,1,1,1))
    plot(net, col = "grey")
    plot(slice(activate(net, "nodes"), node_path), col = "red", add = TRUE)
    par(oldpar)
    dev.copy(png, "2.png");dev.off()
    #提供节点作为空间点。
    #不等于节点的点将捕捉到最近的节点。
    p1 = st_geometry(net, "nodes")[495] + st_sfc(st_point(c(50, -50)))
    st_crs(p1) = st_crs(net)
    p2 = st_geometry(net, "nodes")[121] + st_sfc(st_point(c(-10, 100)))
    st_crs(p2) = st_crs(net)
    
    paths = st_network_paths(net, from = p1, to = p2)
    paths
    #> # A tibble: 1 x 2
    #>   node_paths edge_paths
    #>   <list>     <list>
    #> 1 <int [33]> <int [32]>
    node_path <- paths %>%
      slice(1) %>%
      pull(node_paths) %>%
      unlist()
    node_path
    #>  [1] 495 485 244 402 166  18  19  96 299 283   9 167 292 524 111 506 512 657 533
    #> [20] 424 426 208 164 260 471 143 136 135 140 478  28  29 121
    oldpar = par(no.readonly = TRUE)
    par(mar = c(1,1,1,1))
    plot(net, col = "grey")
    plot(c(p1, p2), col = "black", pch = 8, add = TRUE)
    plot(slice(activate(net, "nodes"), node_path), col = "red", add = TRUE)
    par(oldpar)
    dev.copy(png, "3.png");dev.off()
    # Mon Jul 26 15:45:49 2021 --
    
    
    image.png
    image.png

    相关文章

      网友评论

          本文标题:R语言sfnetworks包,st_network_paths地

          本文链接:https://www.haomeiwen.com/subject/bjkgmltx.html