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

