[R-sig-Geo] uniformly sample points on a border of a polygon
mgm mgm
mgm917391 at gmail.com
Fri Oct 14 23:12:16 CEST 2016
Another possible solution is to use the spsurvey package, and think of each
edge as a level of stratification and use the grts function to design a
survey of sample points on the edges. An advantage of the grts function is
that it uses a local neighborhood variance estimator, which can produce
smaller confidence limits compared to simple random sample variiance.
Mike
On Friday, October 14, 2016, Paolo Piras <paolo.piras at uniroma3.it> wrote:
> Dear Adrian,
>
> even this solution is pretty cool.
>
> Again, thanks to all who suggested me how to do that.
>
> Best
>
> Paolo
>
>
> ________________________________
> Da: Adrian Baddeley <adrian.baddeley at curtin.edu.au <javascript:;>>
> Inviato: venerdì 14 ottobre 2016 02.14
> A: Paolo Piras; Rolf Turner
> Cc: r-sig-geo; Ege Rubak
> Oggetto: Re: [FORGED] [R-sig-Geo] uniformly sample points on a border of a
> polygon
>
>
> You can use the spatstat function 'edges' to extract the edges of a
> polygonal window.
>
>
> Example:
>
> W <- letterR #polygonal window
>
> E <- edges(W)
>
> X <- runifpointOnLines(20, E)
>
> plot(E)
>
> plot(X, add=TRUE)
>
>
>
> Prof Adrian Baddeley DSc FAA
>
> Department of Mathematics and Statistics
>
> Curtin University, Perth, Western Australia
>
>
> ________________________________
> From: Paolo Piras <paolo.piras at uniroma3.it <javascript:;>>
> Sent: Friday, 14 October 2016 5:22 AM
> To: Rolf Turner
> Cc: r-sig-geo; Adrian Baddeley; Ege Rubak
> Subject: Re: [FORGED] [R-sig-Geo] uniformly sample points on a border of a
> polygon
>
>
> Thanks a lot Rolf!
>
> This is virtually exactly what I need;
>
> I'm very grateful for that
>
> All the best
>
> Paolo
>
>
> ________________________________
> Da: Rolf Turner <r.turner at auckland.ac.nz <javascript:;>>
> Inviato: giovedì 13 ottobre 2016 23.12
> A: Paolo Piras
> Cc: r-sig-geo; Adrian.Baddeley at curtin.edu.au <javascript:;>; Ege Rubak
> Oggetto: Re: [FORGED] [R-sig-Geo] uniformly sample points on a border of a
> polygon
>
> On 14/10/16 07:03, Paolo Piras wrote:
> > HI folks,
> >
> > I write for a (hopefully) relatively simple question:
> >
> > I would need to uniformly sample 1000 or more points **along the
> border** of a polygon (not within the area enclosed) that is identified by
> ordered but not equally spaced points; which is the fastest way?
> >
> > In a first moment I thought to sample between any pair of consecutive
> points but, given that starting points are not uniformly distributed, the
> final result would be very far from a uniform distribution.
> >
> > here my polygon:
> >
> >
> > mypol<-round(matrix(c(-13.8447497369687, -3.51439434200449,
> 6.09494902836977, 6.83498916728338, 9.20403746769121, 15.3061452155498,
> 18.4050681631565, 15.334153355932, 9.21809033073377, 6.90467983448734,
> 6.17942233200763, -3.4864867866601, -13.8299219386242, -17.5237987124776,
> -17.2262670680261, -17.5217563171495, -2.29667185082115, -7.72275721405543,
> -9.77084968112857, -8.81725304021858, -8.32894043391822, -4.76080777897439,
> -0.0600572363382094, 4.62779963258511, 8.20771806467615, 8.70484104396818,
> 9.68531129857718, 7.67574865642846, 2.46081860449754, 1.31152149442131,
> 0.0845735294613392, -1.11988475144136),ncol=2),digits=2)
> > plot(mypol,asp=1,cex=0)
> > text(mypol[,1],mypol[,2],c(1:nrow(mypol)))
> > Thanks in advance for any hints
>
>
> This can be done reasonably easily using the spatstat package, for some
> value of the word "reasonably". Here's how:
>
> require(spatstat)
> W <- owin(poly=mypol)
> m <- cbind(mypol[-nrow(mypol),],mypol[-1,])
> m <- rbind(m,c(mypol[nrow(mypol),],mypol[1,]))
> m <- as.data.frame(m)
> names(m) <- c("x0","y0","x1","y1")
> L <- with(m,psp(x0,y0,x1,y1,window=boundingbox(W)))
> set.seed(42)
> #X <- runifpointOnLines(1000,L)
> X <- runifpointOnLines(100,L)
> plot(W,main="Piras's Polygon")
> plot(X,add=TRUE)
>
> Note that I have just generated 100 uniform points, r.t. 1000, so that
> the resulting plot is a little less cluttered.
>
> There may be a sexier way of accomplishing your desideratum; I have
> cc-ed this email to my co-authors Adrian and Ege who may come up with
> better ideas.
>
> cheers,
>
> Rolf Turner
>
> --
> Technical Editor ANZJS
> Department of Statistics
> University of Auckland
> Phone: +64-9-373-7599 ext. 88276
>
> [[alternative HTML version deleted]]
>
>
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list