问题标签 [sfnetwork]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
169 浏览

sf - 向 sfnetwork 添加空间显式边

我在 R 中有一个带有空间隐式边缘的 sfnetwork。我想使用 tmap 绘制它,因此我想通过将边缘变成线条来使边缘在空间上明确。

我创造了这个怪物来做到这一点

可能需要 MULTIPOINT 演员表,因为图中存在自循环,我假设在 st_union 下,它变成了 POINT,而不是 MULTIPOINT,这让 LINESTRING 演员感到沮丧。

这看起来真的很尴尬,它创建了一个单独的对象,我无法将其粘回 sfnetwork。

我应该怎么做呢?

0 投票
1 回答
265 浏览

r - 用点分割线串并在 R 中分配新的段 ID

我正在尝试使用水坝(点)将河流(线)分成水坝之间的连接段。

这里的答案最接近我想要达到的目标。问题是st_split使用多边形边界作为“刀片”,因此将一条线分成三条而不是两条。我还想为每个点之间的线段分配一个通用 ID。

期望的输出

理想的点分割线并将相同的 ID 分配给连接的线段。

这是我尝试过的。对于这个例子,结果应该有 9 个特征。

但结果并不如预期。

数据

0 投票
1 回答
287 浏览

r - 在 r 中使用 sfnetwork 的点之间所有边的组 ID

我有一个带有空间显式边缘 ( ln_sfnetwork) 的有根树,以及通过添加点层 ( ) 创建的附加边缘pt

我想为网络上每个点之间的所有边赋予相同的 ID,这样我就可以计算点之间网络的总长度。我有一个手动解决方案,但这必须使用 > 20,000 点的大型数据集来完成。

使它成为一个 sfnetwork

添加点几何

通过本质上拆分 sfnetwork 使用点几何创建新边

用于对节点之间的所有边进行分组的手动位pt。这将出现在点之间的所有边缘分组。

期望的输出

所需的输出,其中 new_river_id 对于点之间的所有边都相同

然后group_by得到组合长度

最后

0 投票
1 回答
239 浏览

r - 从点列表创建路线并在R中的路段/道路网络上覆盖路线(点列表)

我有一个道路网络 shapefile 和点列表。我必须从点列表中创建一条路线,然后覆盖/空间连接(整合覆盖路段的点的属性)

示例路网形状文件可在此处找到https://drive.google.com/drive/folders/103Orz6NuiWOaFoEkM18SlzFTjGYi1rju?usp=sharing

以下是带有 lat (x) 和 long (y) 信息的点的代码。“顺序”列表示路线中目的地的顺序。

我想要的输出是按上述顺序连接所有点的路线层。而且我还想整合/对路段进行空间连接。

提前致谢

0 投票
1 回答
63 浏览

r - 指定哪个节点是简单 sfnetworks 中的根节点

我有一个具有空间显式边的有根树,它只包含一个边和两个节点。

数据

当我检查哪个节点时,node_is_root()我发现它是第一个节点。

有没有可能反过来呢?

期望的输出

注意:模式必须"in"在调用图上的st_network_path()st_network_cost()等其他函数时使用,因为每个节点都代表河流的源头或河口,因此如果在"out"只有一条边的情况下切换到模式,结果将不正确。

0 投票
1 回答
57 浏览

r - R:获取 igraph 属性到边缘 id:运行时间慢。有没有办法让它更快?

我正在计算 sfnetwork my_sfn中两点之间的最短路径。

计算出的路径由保存在可变路径中的图形 id和 I 组成,并希望获得连接到这些 id 的几何图形(gps 值)。

这是通过以下方式完成的:

整个区块:

首先我得到开放的街道地图数据:

然后我设置起点和终点:

计算路径:

在这里我想得到这条路径的几何形状。

但是这最后一个电话需要很长时间。有没有办法让它更快?

0 投票
1 回答
159 浏览

r - R:sfnetworks:如何在同一数据集中查找多个 A 和 B 位置之间的路线

这是我的数据集

df 数据集包含商店和客户的位置。

我想使用 R 中的 OSM 地图为每一行(每个商店到客户位置)创建最短路径路径。是否可以使用 sfnetworks?

本地路网数据在这里

0 投票
0 回答
85 浏览

r - 使用 sfnetworks 和 r 对河网计算进行排序

我在sfnetworks. 它来源于流网络的线形文件。对于流网中的每条支流,显然都有起止节点来sfnetworks决定,但线路上也有连接起止节点的节点。为简单起见,我将采用在这个问题中开发的示例网络。

在此处输入图像描述

当你在溪流上游移动时,我正在求解一个方程,从河流出口开始。我会尽可能多地为您保存有关该方程式的详细信息,但本质上是:

我正在hx根据节点属性在每个节点 x 处求解。

  • N, dX,KL都是在我们开始计算之前已知的固定参数。

  • N,K对于所有节点都是固定的,它们永远不会改变。

  • dX是节点特定属性。

  • h0并且L是边缘特定的属性(它们对于边缘上的所有节点都是相同的)

  • h0由用户在计算开始时定义,但随着您在上游遍历网络时发生变化,当新边收敛时在末端节点发生变化。

  • h0最初设置为 10,N = 0.5,K = 1500。

  • 为了简单起见,我们将说每条边长 100m。

  • dX只是反映每个边缘的距离。每条边上的下游节点,dX = 0。每条边上的上游节点,dX = 100

  • L反映了一个通道上游的总距离edge,加上那个的总长度edge

我想在边缘 a的下游节点开始计算h0 = 10

  1. hx在该起点计算,然后在沿边的每个节点计算(在此示例中仅显示起点和终点节点),直到到达边 g边 b合并形成边 a的交界处。

  2. 在边 a 的那个端点:

  1. 边缘 g边缘 b的这个交界处,我想更新h0以反映在边缘 ahx的终点计算的结果,因此为 13.03。该值将用于边g边 bhxh0

  2. 我现在想对每个子网进行这个计算。我将从边缘 b开始的子网开始。h0已更改为 13.03,我们计算边 bhx上的节点,然后到达边 c边 d的交界处。

  3. 在边 b的那个端点:

  1. h0边 c边 d更新,以反映hxb的端点 (14.13)
  2. hx为边 d上的所有节点计算,并再次在边 c上计算。
  3. 边 c的端点处,h0更新以反映边 e边 fhx的交界处
  1. hx最终计算边缘 e边缘 f上的所有节点,使用在边缘 chx的端点计算的. 这样就完成了该子网的遍历。h0

  2. 我们返回边 g来计算hx从那里开始的子网。

  3. 从前面的计算中我们知道,边 ahx的端点是 13.03。我们现在想再次反映从边 g开始遍历子网络的这个值。h0

  4. 当我们到达边 h边 i的节点交汇点时,我们再次更新h0以反映在边 ghx的终点处计算的值。

  1. 这是h0用于边 h边 i的值。我们hx边 i上计算,然后在边 h上计算。h0最后一次更新边缘 j边缘 k合并以反映在边缘 hhx的端点处计算的值。

在对边 j边 k上的所有节点进行最终更新后h0hx计算 , 。

总而言之,h0当您向上游移动到新边缘时,需要更新以反映hx直接下游边缘的最大值。必须达到一定的解决顺序,在解决任何边缘(第一条边缘之外)之前,您需要知道该ho段的 ,这意味着您必须首先解决下面的边缘,以确定hx要使用的.

我一直在努力想出一个循环/迭代/递归解决方案来解决这个计算,从表面上看,它应该很容易解决。单个引流线程的解决方案很容易手动完成,但是当它扩展到整个网络时,必须解决这些排序问题。当网络中有数千条边时,手动进行这些计算将不是一种选择。

这种类型的计算顺序在许多基本水文分析中非常常见(计算河流顺序、河流大小、计算上游贡献面积等)。 sfnetworks并且 tidygraph似乎非常适合进行这种类型的计算,但是在水文网络上的示例应用程序很少(大多数图形分析工具都适用于道路网络,考虑到用户数量的差异,这是完全有意义的)。

我试图让它尽可能地重复,如果需要更多,我会很乐意提供,鉴于问题的概念性更强,这很难做到。

0 投票
1 回答
77 浏览

r - 从 sf 线串对象创建具有正确索引标签的 inla.graph 对象

我有一个包含linestrings描述巴西城市之间连接的 shapefile。我想将这些连接转换为将城市代码设置为行名的邻域对象,使其与我的数据框兼容:

因此,行名称将设置为origin_code,而邻居将dest_code在列表中设置为,反之亦然(最终这将更改为我创建的索引,但这会使事情更容易检查)。本质上,我需要linestring以下用于多边形的代码的等效项:

shp是一个由多边形组成的 shapefile,并且该index变量同时存在于 shapefile 和数据框中)。

到目前为止,我已经使用sfnetworksandigraph包创建了一个邻域对象,但还不能将索引值附加到行名:

默认情况下,该函数as_sfnetwork为网络中的每个节点分配一个数字(在边缘数据中,这些是变量 'from' 和 'to' 并且不能使用 mutate 进行更改):

然后,这些值在使用和nb创建的对象的下一步中用作行名称。有谁知道如何附加我自己的索引甚至提取已创建的索引,以便我可以使其与数据框保持一致?我试图创建一个采用/和/但它们不匹配的转换表,该值是两个索引中的最低值,因此并不总是我数据中的来源。as_adjacency_matrixmat2listwfromorigin_codetodest_codefrom

更难的是,比预期多 57 个节点,我不知道为什么会发生这种情况。我检查了重复项,它们在数据中具有相同的坐标和代码/名称,但使用不同的索引号单独处理。

总之,我想将线串对象转换为可用于 INLA 模型的邻域对象,在该模型中,由线连接的城市被视为邻居。我需要为这些城市附加一个索引,以便邻域对象将索引设置为行名,并且它可以与模型中的数据结合。希望这是有道理的,如果没有,请告诉我!

0 投票
1 回答
80 浏览

r - R:返回所有简单路径的边列表

我正在尝试使用 tidygraph 获取两个节点之间的路径边缘列表。这是一个例子

我使用 igraph 包中的 all_simple_paths 来获取节点 B 和节点 C 之间的所有可能路径。

我想知道如何为所有简单路径生成边列表。谢谢你。