【问题标题】:Drawing equidistant points from the sides of a polygon从多边形的边绘制等距点
【发布时间】:2016-04-08 22:52:11
【问题描述】:

我正在绘制一个具有以下顶点的多边形

      x            y
-0.02208709 -0.039161304
 0.01184081 -0.020268029
 0.04578401 -0.001351904
 0.02210236  0.039176396
-0.01185226  0.020252146
-0.04578784  0.001352696

使用以下代码

plot(x,y)
polygon(x,y)
points(mean(x),mean(y),col="red")

现在我想沿着多边形的边绘制 50 个等距点。有什么建议吗?

【问题讨论】:

  • 50 个与多边形等距的随机点,还是沿折线的 50 个等距点?
  • 这里有 50 个点与多边形边缘的距离均为 0:new_x <- runif(50, -0.02, 0.01); points(new_x, -0.0268618 + 0.5568654*new_x, pch=20)
  • @jbaums。感谢您指出这一点。我想要沿折线有 50 个等距点。在问题中澄清了这一点。

标签: r polygon spatial


【解决方案1】:

您可以使用 sp 包中的 spsample 执行此操作。

首先,我们将加载库并读取您的顶点。

library(sp)

xy <- read.table(text='x            y
-0.02208709 -0.039161304
0.01184081 -0.020268029
0.04578401 -0.001351904
0.02210236  0.039176396
-0.01185226  0.020252146
-0.04578784  0.001352696', header=TRUE)

现在从顶点创建一个SpatialLines 对象。这有点混乱 - 如果遇到困难,请参阅 ?SpatialLines?`SpatialLines-Class`

l <- SpatialLines(list(Lines(Line(rbind(xy, xy[1, ])), ID=1)))

然后对点进行采样并使用as.data.frame(pts)coordinates(pts) 强制转换为data.frame

pts <- spsample(l, 50, type="regular")
coordinates(pts) # only the head shown here
##                 x           y
## [1,] -0.019343310 -0.03763339
## [2,] -0.014987452 -0.03520776
## [3,] -0.010631594 -0.03278213
## [4,] -0.006275735 -0.03035651
## [5,] -0.001919877 -0.02793088
## [6,]  0.002435981 -0.02550525

plot(l)
points(pts, pch=20)

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2023-03-14
    • 2011-12-30
    • 2021-12-06
    • 2013-04-20
    相关资源
    最近更新 更多