Укажите, какой узел является корневым в простых sfnetworks

У меня есть корневое дерево с пространственно явными ребрами, которое состоит только из одного ребра и двух узлов.

Данные

      n01 = st_sfc(st_point(c(0, 0)))
n02 = st_sfc(st_point(c(0, 10)))

from = c(1)
to = c(2)

nodes = st_as_sf(c(n01, n02))
edges = data.frame(from = from, to = to)

G = sfnetwork(nodes, edges) %>%
  convert(to_spatial_explicit, .clean = TRUE)
> G
# A sfnetwork with 2 nodes and 1 edges
#
# CRS:  NA 
#
# A rooted tree with spatially explicit edges
#
# Node Data:     2 x 1 (active)
# Geometry type: POINT
# Dimension:     XY
# Bounding box:  xmin: 0 ymin: 0 xmax: 0 ymax: 10
        x
  <POINT>
1   (0 0)
2  (0 10)
#
# Edge Data:     1 x 3
# Geometry type: LINESTRING
# Dimension:     XY
# Bounding box:  xmin: 0 ymin: 0 xmax: 0 ymax: 10
   from    to     geometry
  <int> <int> <LINESTRING>
1     1     2  (0 0, 0 10)

Когда я проверяю, какой node_is_root() Я вижу, что это первый узел.

      > with_graph(G, node_is_root())
[1]  TRUE FALSE

Возможно ли наоборот?

Желаемый результат

      > with_graph(G, node_is_root())
[1] FALSE TRUE

Примечание: режим должен быть "in" при вызове дополнительных функций, таких как st_network_path() или же st_network_cost() на графике, потому что каждый узел представляет исток или устье реки, поэтому результаты не будут правильными, если режим был переключен на "out" для тех случаев, когда только одна кромка.

1 ответ

Я думаю, что нужно инвертировать from а также to перед созданием sfnetworkобъект. Например:

      library(sf)
#> Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(tidygraph)
library(sfnetworks)

Создать данные

      n01 = st_sfc(st_point(c(0, 0)))
n02 = st_sfc(st_point(c(0, 10)))

from = 2L
to = 1L

nodes = st_as_sf(c(n01, n02))
edges = data.frame(from = from, to = to)

Создать сетевой объект

      G = sfnetwork(nodes, edges) %>%
  convert(to_spatial_explicit, .clean = TRUE)
#> Checking if spatial network structure is valid...
#> Spatial network structure is valid

Проверить результат

      G
#> # A sfnetwork with 2 nodes and 1 edges
#> #
#> # CRS:  NA 
#> #
#> # A rooted tree with spatially explicit edges
#> #
#> # Node Data:     2 x 1 (active)
#> # Geometry type: POINT
#> # Dimension:     XY
#> # Bounding box:  xmin: 0 ymin: 0 xmax: 0 ymax: 10
#>         x
#>   <POINT>
#> 1   (0 0)
#> 2  (0 10)
#> #
#> # Edge Data:     1 x 3
#> # Geometry type: LINESTRING
#> # Dimension:     XY
#> # Bounding box:  xmin: 0 ymin: 0 xmax: 0 ymax: 10
#>    from    to     geometry
#>   <int> <int> <LINESTRING>
#> 1     2     1  (0 10, 0 0)

Проверить вывод

      with_graph(G, node_is_root())
#> [1] FALSE  TRUE

Создано 2021-04-06 пакетом REPEX (v1.0.0)

Другие вопросы по тегам