[R-sig-Geo] Drawing spokes from a fixed point to the boundary of a polygon and take the maximum cut point
Kaushik Jana
kaushikjana11 at gmail.com
Fri May 20 09:21:06 CEST 2016
Hello everyone,
I am working with spatial polygon and using SP and RGEOS package. I am
having
problem to find the maximum-distance intersect points with spokes (drawn
from a kind of centroid) and the polygon boundary.
Thanks,
Kaushik
*Here is the details steps:*
Consider a 2-D polygon (with no holes) with the vertices
> X=
x y
[1,] -13.07387755 6.752311920
[2,] -9.33770907 5.067708782
[3,] -7.49002198 9.665618999
[4,] -3.75490263 7.978791961
[5,] -0.02026076 6.289741026
[6,] -1.86977386 1.692942758
[7,] 1.86397021 0.001667924
[8,] 5.60020191 -1.689606910
[9,] 9.33298897 -3.380881745
[10,] 11.18475614 1.213692624
[11,] 14.91650047 -0.479806108
[12,] 13.06430891 -5.074380477
[13,] 11.21735861 -9.665618999
[14,] 7.48745370 -7.974344164
[15,] 3.75607922 -6.283069330
[16,] 0.02026968 -4.591794496
[17,] -3.71404150 -2.901631611
[18,] -7.44784360 -1.213692624
[19,] -11.18014866 0.472022464
[20,] -14.91491149 2.155513653
[21,] -13.07387755 6.752311920
Consider a point (centre of the convex hull of X):
>cent_0=c(0.4315245,0.3889576)
I am drawing equi-angled (around 360 degree of the centre) spokes from the
above centre to the vertices of the polygon.
*Here is my R-code to draw the spokes:*
>n=50 # Number of equi angled spokes from center
>xcent = cent_0[1]
>ycent = cent_0[2]
>cent = sp::SpatialPoints(cbind(xcent, ycent))
>pts = sp::SpatialPoints(X)
## take the furthest distance from centre to vertex, times two!
>r = 2 * max(sp::spDistsN1(pts, cent))
>theta=seq(0,2*pi,length=n+1)[-(n+1)]
## construct a big wheel of spoke lines
>sl = sp::SpatialLines(lapply(1:length(theta),function(id){
>t = theta[id]
>sp::Lines(list(sp::Line(rbind(c(xcent, ycent),c(xcent + r * cos(t),ycent +
r * sin(t))))),ID=id)}))
## construct the polygon as a SpatialPolygons object:
>pol=sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(rbind(xy,xy[1,]))),ID=1)))
## overlay spokes on polygon as "SpatialLines" so we do line-on-line
## intersect which gets us points
>spokes = rgeos::gIntersection(sl, as(pol,"SpatialLines"), byid=TRUE)
>spokes
I want to have the maximum-distance intersect points with the spokes and
the polygon boundary. If a spoke (corresponding to a specific angle) don't
intersect the boundary of the polygon then we take the intersect point as
the centre itself for that angle.
So finally I want to have *n *boundary points on the (one for each angle)
polygon which obtained from the above scheme.
Stuck here in doing this.
Any suggestions!!
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list