2 Part 2

2.1 Create a polygon shapefile basegrid of radar sample volumes

This will create a polygon shapefile based on the polar coordinates of the radar sample volumes at the lowest tilt angle based on the sample volumes dimensions declared earlier. The maximum range (maxrange) for creating the basegrid was set to 5 km so that the process will run quickly for this exercise. However, usually maxrange should usually be set to 100 km.

###use "destPoint" from package geosphere to estimate the destination latitude and 
##longitude given a starting latitude and longitude(radar origin), bearing and distance
#######################################################################################
ptm <- proc.time()

##lon1,lat1
points<-data.frame()
for (i in 1:length(ranges)){
  loop<-data.frame(destPoint(c(X_origin,Y_origin),b=azimuths, d=ranges[i]))
  loop$azimuth<-azimuths
  points<-data.frame(rbind(points, loop))}

  colnames(points)[1]<-"lon1"
  colnames(points)[2]<-"lat1"
  points$range<-range

#lon2,lat2
points2<-data.frame()
for (i in 1:length(ranges)){
  loop2<-data.frame(destPoint(c(X_origin,Y_origin),b=azimuths, d=ranges[i]+depth*cos(theta*DEG2RAD)))
  points2<-data.frame(rbind(points2, loop2))}
  colnames(points2)[1]<-"lon2"
  colnames(points2)[2]<-"lat2"

#lon3,lat3
points3<-data.frame()
for (i in 1:length(ranges)){
  loop3<-data.frame(destPoint(c(X_origin,Y_origin),b=azimuths+step, d=ranges[i]+depth*cos(theta*DEG2RAD)))
  points3<-data.frame(rbind(points3, loop3))}

  colnames(points3)[1]<-"lon3"
  colnames(points3)[2]<-"lat3"

#lon4,lat4
points4<-data.frame()
for (i in 1:length(ranges)){
  loop4<-data.frame(destPoint(c(X_origin,Y_origin),b=azimuths+step, d=ranges[i]))
  points4<-data.frame(rbind(points4, loop4))}

  colnames(points4)[1]<-"lon4"
  colnames(points4)[2]<-"lat4"

points<-cbind(points, points2, points3, points4)
points$lon5<-points$lon1
points$lat5<-points$lat1
##reorder columns
points<-points[,c(4,3,1,2,5,6,7,8,9,10,11,12)]

##make a data frame with coordinates for each polygon grouped with "id" field
##should be 5 rows of data for each polygon (sample volume)
#######################################################################################
x<-c(sapply(seq(nrow(points)), function(s) c(points$lon1[s], points$lon2[s], points$lon3[s], points$lon4[s], points$lon5[s])))
y<-c(sapply(seq(nrow(points)), function(r) c(points$lat1[r], points$lat2[r], points$lat3[r], points$lat4[r], points$lat5[r])))

radar<-data.frame(id=sapply(ids,c), X=sapply(x,c), Y=sapply(y,c))

########################################################
## assign projection and create sf object of polygons ##
########################################################

my_spatial_polys <- radar %>%
  st_as_sf(coords = c("X", "Y"), crs = 4326) %>%
  group_by(id) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast("POLYGON")

#####################################
## If another projection is needed ##
#####################################

my_spatial_polys_rp <- st_transform(my_spatial_polys, 26918) #EPSG code for UTM Zone 18

# assign value labels to each polygon (id, azimuth, range).  
# setup for midpoint of pulse volume for super-res; change values for other resolution data
my_spatial_polys_rp$azimuth <- points$azimuth+0.25
my_spatial_polys_rp$range <- points$range+125

# Stop the clock
proc.time() - ptm
##    user  system elapsed 
##   24.33    0.61   26.88