Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:获取一条空间线(数据帧)内直线相交处的所有xy坐标_R_Intersect_Spatstat - Fatal编程技术网

R:获取一条空间线(数据帧)内直线相交处的所有xy坐标

R:获取一条空间线(数据帧)内直线相交处的所有xy坐标,r,intersect,spatstat,R,Intersect,Spatstat,我正在寻找一种方法来获取一个SpatialLines对象或SpatialLinesDataFrame中所有交点的xy坐标。我找到了rgeos的函数gIntersect,但它只查看两个数据集之间的交集。因为我使用的是一个超过50万行的数据集,所以为每一行创建一个单独的文件并检查是否有任何行与另一行相交需要花费太多的时间。在ArcMap中有一个Intersect函数,它可以在几秒钟内完成,我想知道在R中是否也有这样的函数。谢谢 如果将SpatialLines对象从spatstat转换为psp对象,则

我正在寻找一种方法来获取一个
SpatialLines
对象或
SpatialLinesDataFrame
中所有交点的xy坐标。我找到了
rgeos
的函数
gIntersect
,但它只查看两个数据集之间的交集。因为我使用的是一个超过50万行的数据集,所以为每一行创建一个单独的文件并检查是否有任何行与另一行相交需要花费太多的时间。在ArcMap中有一个Intersect函数,它可以在几秒钟内完成,我想知道在R中是否也有这样的函数。谢谢

如果将
SpatialLines
对象从
spatstat
转换为
psp
对象,则可以使用
spatstat
功能
selfcrossing.psp
。然而,我不确定它将如何处理50万条线路,因为过境点的数量可能非常巨大。下面的代码生成一个随机段模式并查找自交叉点

请注意,此代码可能会占用大量内存并杀死R,因此在处理50万行之前,请尝试逐步增加示例。下面的代码在我5岁的笔记本电脑上使用了相当多的内存,运行时间为5秒

set.seed(42)
N <- 1e4
x <- psp(runif(N), runif(N), runif(N), runif(N), owin(), check=FALSE)
y <- selfcrossing.psp(x)
set.seed(42)

N非常感谢埃格。我运行了你的脚本,但正如你所说,它需要大量的处理能力。当我尝试10万行时,我的8gb内存被填满了,所以50万行不通。我知道ArcMap和QGIS使用的函数可以在几秒钟内运行同一个数据集,但我真的希望将其集成到RMaybe中,因为您可以通过将数据集拆分为例如50个线模式(每个线有10000条线)来将问题拆分为几个较小的问题,并循环查找所有线之间的交叉点(有一个名为
crossing.psp
的函数用于模式之间的交叉)。它可能不会很快,但至少你会有足够的内存,并在R中完成工作。我在ArcMap中获得了大约10万个交叉点。我现在正在尝试将R纳入QGIS,这似乎也是一项不可能完成的任务,但至少会缩短流程链。好的。
spatstat
这是一个非常通用的C代码,它没有利用很少的线相交的事实。它可能只在速度和内存方面具有竞争力,当线模式密集且有很大一部分线相互交叉时。我们可能会实现一个更模块化的版本,但它可能不会在很短的将来实现。很抱歉t、 我尝试了selfcrossing.psp函数,由于函数中没有那么多的相交,因此该方法工作正常。似乎执行时间过长是由于示例脚本中的大量相交而不是实际的线元素数量造成的。非常感谢您提供的提示。