plot3d для чтенияGDAL?

Я хотел бы подготовить 3D-график в R! с использованием растровых данных. Я слышал о команде plot3d в растровом пакете. К сожалению, у меня есть данные в формате GeoTiff, поэтому прочитать их напрямую через растровый пакет невозможно (вместо него, чтобы загрузить этот файл, я использую команду readGDAL).

Есть ли возможность построить 3D график по таким данным? Как я могу получить координаты? Я знаю, как получить значения растра с помощью команды as.matrix, но поскольку она в формате GeoTiff, я не могу использовать xmin или xmax.


person matandked    schedule 11.09.2011    source источник
comment
В растровом пакете нет функции plot3d. Вы имеете в виду plot3d в пакете rgl? GeoTIFF — лучший общий формат (IMO) для растровых данных, поэтому мне интересно, почему вы считаете это проблемой. Можете ли вы уточнить, какой сюжет вы хотите? Поверхностный участок?   -  person mdsumner    schedule 12.09.2011
comment
@mdsumner Раньше была функция raster::plot3D, но из-за появления на сцене rasterVis была удалена... Из журнала изменений растра: --- 8-July-2011, version 1.8-41 removed gplot and plot3D functions. These are now in the rasterVis package   -  person Roman Luštrik    schedule 12.09.2011


Ответы (1)


Я не понимаю, почему вы не можете читать geotiff с помощью raster, но в любом случае SpatialGridDataFrame (пакет sp), предоставленный readGDAL (package rgdal), может быть передан непосредственно raster().

Вот пример с GeoTIFF из пакета rgdal. Обратите внимание, что функция rasterVis находится в отдельном пакете и называется plot3D (а не plot3d, который находится в пакете rgl):

library(rgdal)
library(rasterVis)

r <- raster(system.file("pictures/cea.tif", package = "rgdal")[1])
plot3D(r)

тупой 3D-график по умолчанию

Пакет rasterVis обрабатывает все масштабирование и цвета и предоставляет хорошие настройки по умолчанию.

Если вы хотите углубиться во вспомогательные пакеты, вот простой пример.

library(rgdal)
library(raster)
library(rgl)

## read the file with raster 

r <- raster(system.file("external/test.ag", package="sp")[1])

## just use simple persp plot
persp(r)

## convert to sp's SpatialGridDataFrame (or use readGDAL directly)
## (for very large rasters this could be prohibitive in terms of memory)
sgdf <- as(r, "SpatialGridDataFrame")

## convert to R's image() format, a list with x,y vector and z matrix

x <- as.image.SpatialGridDataFrame(sgdf)

## plot with rgl, ugly but see ?surface3d for colour options etc.
surface3d(x$x, x$y, x$z)

легкий сюжет

person mdsumner    schedule 11.09.2011