I am drawing a polygon with the following vertices
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
using the following code
plot(x,y)
polygon(x,y)
points(mean(x),mean(y),col="red")
Now I want to plot 50 equally-spaced points along the sides of polygon. Any suggestion how to do it?
You can do this with spsample
from the sp
package.
First we'll load the library and read in your vertices.
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)
Now create a SpatialLines
object from the vertices. This is a bit messy - see ?SpatialLines
and ?`SpatialLines-Class`
if you get stuck.
l <- SpatialLines(list(Lines(Line(rbind(xy, xy[1, ])), ID=1)))
Then sample the points and coerce to a data.frame
with as.data.frame(pts)
or coordinates(pts)
.
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)
来源:https://stackoverflow.com/questions/34606181/drawing-equidistant-points-from-the-sides-of-a-polygon