Укажите, какой узел является корневым в простых 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)