Запись маршрута / маршрута в виде GeoTiff в R - PullRequest
0 голосов
/ 14 декабря 2018

Я строю некоторые маршруты в R, используя функцию geom_path.Я надеюсь превратить данные, которые я строю, в GeoTiff (который включает в себя GeoSpatial Components для проекции и длинных углов), который я могу импортировать в NASA WorldWind .

Артефакты, на которые я ссылаюсь, доступны здесь:

Iсделал очень простой пример, чтобы проиллюстрировать, что у меня есть, и что я пытаюсь сделать:

library(rgdal)
library(ggplot2)
library(png)
library(raster)
library(tiff)


wrld <- readOGR("data" , "ne_110m_admin_0_countries")
base <- ggplot(wrld, aes(x = long, y = lat))


myDataFrame <- data.frame(Name=c("Object1","Object1","Object1","Object2","Object2","Object2"), lat=c(34,30,25,65,32,16), long=c(-118,-120,-114,-63,-108,-110)) 


route <- c(geom_path(aes(long, lat, group = myDataFrame$Name), colour = "#ffff00", size = 2, data =
myDataFrame, alpha = 0.75,
lineend = "round"))


earth <- readTIFF("HYP_LR_SR_W.tif")


pathPlot <- base +  annotation_raster(earth, -180, 180, -90, 90) + route
plot(pathPlot)

, который производит этот график:

enter image description here

Следующий шаг, который я хотел бы сделать, - вывести полученный график в виде GeoTIFF (который я могу импортировать в WorldWind).

Я думаю, что знаю команды для создания GeoTIFF в нужном мне формате, если у меня есть растровый растр, но я не могу понять, как соединить это вместе, чтобы перейти от маршрута к GeoTIFF, который включает толькосамо изображение, включая GeoSpatial Components:

ggsave(plot=pathPlot, "pathPlot.tiff", device = "tiff")
stackedRaster <- stack("pathPlot.tiff")
xRange <- ggplot_build(pathPlot)$layout$panel_params[[1]][c("x.range")] 
yRange <- ggplot_build(pathPlot)$layout$panel_params[[1]][c("y.range")]     
extent(stackedRaster) <- extent(xRange$x.range[1],xRange$x.range[2], yRange$y.range[1],yRange$y.range[2]) 
projection(stackedRaster) <- CRS("+proj=longlat +datum=WGS84") 
writeRaster(stackedRaster, "myGeoTiff.tiff", options="PHOTOMETRIC=RGB", datatype="INT1U", overwrite=TRUE) 

1 Ответ

0 голосов
/ 16 декабря 2018

Я не думаю, что существует простой способ приведения объекта ggplot (т. Е. ggproto) к объекту RasterStack.Я не уверен, что следующее решение удовлетворит ваше требование, но вы можете рассмотреть его как обходной путь:

  1. Сохраните график ggplot в изображение tiff, используя ggsave
  2. Создание объекта RasterStack для сохраненного изображения с использованием stack
  3. Сохранение объекта RasterStack как GeoTiff изображения с использованием writeRaster

Выполнение вышеуказанных шагов выглядит следующим образом:

# This is your pathPlot
pathPlot <- base +  annotation_raster(earth, -180, 180, -90, 90) + route

# Remove the margins from the plot (i.e., keep the earth raster and the routes only)
pathPlot <- pathPlot + 
  theme(    
        axis.ticks=element_blank(), 
        axis.text.x=element_blank(), 
        axis.text.y=element_blank(), 
        axis.title.x=element_blank(), 
        axis.title.y=element_blank(),
        plot.margin = unit(c(0, 0, 0, 0), "null"),
        legend.position = 'none'
       ) +
       labs(x=NULL, y=NULL)

# Save the plot
ggsave(plot=pathPlot, "pathPlot.tiff", device = "tiff")

# Create a StackedRaster object from the saved plot
stackedRaster <- stack("pathPlot.tiff")

# Get the GeoSpatial Components
lat_long <- ggplot_build(pathPlot)$layout$panel_params[[1]][c("x.range","y.range")] 

# Supply GeoSpatial  data to the StackedRaster 
extent(stackedRaster) <- c(lat_long$x.range,lat_long$y.range)
projection(stackedRaster) <- CRS("+proj=longlat +datum=WGS84")

# Create the GeoTiff
writeRaster(stackedRaster, "myGeoTiff.tif", options="PHOTOMETRIC=RGB", datatype="INT1U")

Вот полученное GeoTiff изображение:

GeoTiff Надеждаэто помогает.

...