点输出的多边形和线输入(在 R 中)
Polygon and line input for point output (in R)
我想创建一个坐标 table 的 .shp 文件或数据,其中输出点要素是线端点在多边形边界上的某个点接触的位置以及线穿过多边形边界的位置。在线直接位于多边形边界的输出中不生成任何点。
这可以在 R 中完成吗?
Like the intersect tool in Esri?
我有两个 类(在 R 中)...
- 空间线
- 空间多边形
我似乎找不到 tool/package 可以做到这一点...
(我是初学者)
您可以使用 spatstat
包来执行此操作,但您需要转换
从 SpatialLines
和 SpatialPolygons
到 psp
(平面段
模式)和 owin
(观察 window——平面中的多边形)使用
maptools
包。
既然你没有提供示例数据我先构造
看起来像您的图形的 SpatialPolygons 和 SpatialLines 对象:
library(maptools)
#> Loading required package: sp
#> Checking rgeos availability: TRUE
library(spatstat)
#> Loading required package: nlme
#> Loading required package: rpart
#>
#> spatstat 1.48-0.029 (nickname: 'Alternative Facts')
#> For an introduction to spatstat, type 'beginner'
A <- owin(c(1,3), c(2,5))
B <- owin(c(4,7), c(1,5))
p <- union.owin(A,B)
p <- as(p, "SpatialPolygons")
l <- psp(c(0.5, 0.5), c(2, 4), c(4, 6), c(2, 4), window = owin(c(0,7), c(0,5)))
l <- as(l, "SpatialLines")
plot(p)
plot(l, col = "green", add = TRUE, lwd = 3)
现在按照您的要求将多边形的边转换为 psp
并找到线穿过这些边缘的位置(作为平面点返回
模式 ppp
):
l <- as(l, "psp")
p <- as(p, "owin")
e <- edges(p)
x <- crossing.psp(l, e)
x
#> Planar point pattern: 4 points
#> window: rectangle = [1, 6] x [2, 4] units
将点添加到图中显示了我们发现的内容:
plot(p, main = "")
plot(l, col = "green", add = TRUE, lwd = 3)
plot(x, add = TRUE, col = "red", pch = 20, cex = 3)
我想创建一个坐标 table 的 .shp 文件或数据,其中输出点要素是线端点在多边形边界上的某个点接触的位置以及线穿过多边形边界的位置。在线直接位于多边形边界的输出中不生成任何点。
这可以在 R 中完成吗?
Like the intersect tool in Esri?
我有两个 类(在 R 中)...
- 空间线
- 空间多边形
我似乎找不到 tool/package 可以做到这一点...
(我是初学者)
您可以使用 spatstat
包来执行此操作,但您需要转换
从 SpatialLines
和 SpatialPolygons
到 psp
(平面段
模式)和 owin
(观察 window——平面中的多边形)使用
maptools
包。
既然你没有提供示例数据我先构造 看起来像您的图形的 SpatialPolygons 和 SpatialLines 对象:
library(maptools)
#> Loading required package: sp
#> Checking rgeos availability: TRUE
library(spatstat)
#> Loading required package: nlme
#> Loading required package: rpart
#>
#> spatstat 1.48-0.029 (nickname: 'Alternative Facts')
#> For an introduction to spatstat, type 'beginner'
A <- owin(c(1,3), c(2,5))
B <- owin(c(4,7), c(1,5))
p <- union.owin(A,B)
p <- as(p, "SpatialPolygons")
l <- psp(c(0.5, 0.5), c(2, 4), c(4, 6), c(2, 4), window = owin(c(0,7), c(0,5)))
l <- as(l, "SpatialLines")
plot(p)
plot(l, col = "green", add = TRUE, lwd = 3)
现在按照您的要求将多边形的边转换为 psp
并找到线穿过这些边缘的位置(作为平面点返回
模式 ppp
):
l <- as(l, "psp")
p <- as(p, "owin")
e <- edges(p)
x <- crossing.psp(l, e)
x
#> Planar point pattern: 4 points
#> window: rectangle = [1, 6] x [2, 4] units
将点添加到图中显示了我们发现的内容:
plot(p, main = "")
plot(l, col = "green", add = TRUE, lwd = 3)
plot(x, add = TRUE, col = "red", pch = 20, cex = 3)