Я рассчитываю расстояние, пройденное человеком между несколькими точками вокруг объекта. Я создал полигон SpatialLines как для объекта (границы, которую нельзя пересечь), так и для движений человека. Есть ли способ включить границу в расчет объекта SpatialLinesLengths? Я понимаю, что это возможно при расчете KUD, но я не смог выяснить, как преобразовать эту информацию для использования при расчете пройденных расстояний.
Во-вторых, есть ли способ добавить граничный объект на график и заставить линейные движения обойти объект? Если так, есть ли способ слегка изогнуть линию, чтобы сюжет выглядел немного более реалистичным?
proj4string(dat.sp) <- CRS("+init=epsg:4326") #set that projection to actual data
dat.proj <- spTransform(dat.sp, CRS("+init=epsg:32611")) #transform data to the correct spatial projection
isle.shp <- readOGR(dsn = "C:////isle.shp", layer = "isle) #load in the boundary object
isle.sp <- spTransform(isle.shp, CRS("+init=epsg:32611")) #transform the shapefile to spatial points
datline.proj <- list(0)
ID <- sort(unique(dat.proj$ID)) #creates a vector of ids
for(i in 1:length(ID)){
datline.proj[[i]] <- Lines(list(Line(coordinates(dat.proj[dat.proj@data$ID==ID[i],]))), ID=ID[i])
} #for every ID, set spatial 'coordinates' and assign a 'Line' object to the list of 'Lines'
track.proj <- SpatialLines(datline.proj) #coerce 'Lines' objects into a 'SpatialLines' object
proj4string(track.proj) <- CRS("+init=epsg:32611") #make it follow the the same projection
isle.bound <- as(isle.sp, 'SpatialLinesDataFrame') #convert the boundary object spatial polygons df to a spatial lines df
Теперь я могу как-нибудь добавить это в код ниже?
distance <- SpatialLinesLengths(track.proj, longlat = TRUE) #calculating distance traveled
distravel <- data.frame(Transmitter = ID, distance) #combine distance info with the individual data
track.proj <- SpatialLinesDataFrame(track.proj, data = distravel, match.ID = FALSE) #attach the df to generate a SpatialLinesDataFrame
track.proj@data #view the movements of individuals
Вторая часть вопроса относится к графике ниже
#now plot the SpatialLines object for every individual
plot_list <- list() #create an empty list
for(i in 1:length(ID)){ #for every iteration
file_name = paste("Spatial Lines Plots_", ID[i], ".png", sep="")
#create a file name for each plot
png(file_name) #save as a .png
p <- plot(isle.sp, col = "grey80")
p <- title(main = ID[i], col.main = "black", cex.main = 2)
p <- plot(track.proj[i,], lwd = 3, col = "black", add = TRUE)
plot_list[[i]] <- p #fill the plot_list with the plot created in the previous lines
dev.off() #turn plotting off after each run of the loop
} #close for loop