2016-08-25 8 views
0

Я хотел бы использовать Plotly в R для создания 3D-моделей траншей археологических раскопок. Мне довольно удастся построить данные о точке и поверхности (пример: Vignette из R package, над которым я работаю), но я также хотел бы добавить растровую информацию о изображениях с привязкой к профилю траншей.Земельные растровые изображения с привязкой в ​​Plotly (R API)

Я не нашел способа построить растровые данные в среде Plotlys 3D. Единственным решением, которое я придумал до сих пор (спасибо), было создание 3D-модели профиля с помощью SFM с использованием Photoscan, экспорт цветной сетки в файл .ply, исправление заголовка этого файла и его импорт в R делать заговоры на следующем примере кода:

library(geomorph) 
library(plotly) 

#load data 
mesh <- read.ply("plotly/expply8_corr.ply", ShowSpecimen = FALSE) 

# extract vertex coordinates 
x <- mesh$vb["xpts",] 
y <- mesh$vb["ypts",] 
z <- mesh$vb["zpts",] 

# plot 
plot_ly(
    x = x, y = y, z = z, 
    i = mesh$it[1,]-1, j = mesh$it[2,]-1, k = mesh$it[3,]-1, 
    facecolor = c(mesh$material$color[1, ]), 
    type = "mesh3d" 
) 

Вы найдете данные примера here.

К сожалению, этот весы действительно ужасно. Если вы увеличиваете разрешение сетки, все становится медленным. Я бы очень хотел добавить простой растровый привязку, чтобы поддерживать высокую производительность и избежать необходимости создавать 3D-модели профилей. Есть ли рабочий процесс для достижения этой цели с помощью Plotly или другой библиотеки графиков?

ответ

0

Я нашел хорошее решение с пакетом rgl. Пример:

library(rgl) 
library(jpeg) 

# download and load picture 
download.file(
    url = 'https://upload.wikimedia.org/wikipedia/en/6/6d/Chewbacca-2-.jpg', 
    destfile = "chewbacca.jpg", 
    mode = 'wb' 
) 

chewie <- readJPEG("chewbacca.jpg", native = TRUE) 

# create some sample data 
x <- sort(rnorm(1000)) 
y <- rnorm(1000) 
z <- rnorm(1000) + atan2(x, y) 

# plot sample data 
plot3d(x, y, z, col = rainbow(1000), size = 5) 

# add picture 
show2d(
    # plot raster 
    { 
    par(mar = rep(0, 4)) 
    plot(
     0:1, 0:1, type="n", 
     ann = FALSE, axes = FALSE, 
     xaxs = "i", yaxs = "i" 
    ) 
    rasterImage(chewie, 0, 0, 1, 1) 
    }, 
    # image position and extent 
    # coordinate order: lower left, lower right, upper right and upper left 
    x = c(-2, 1, 1, -2), 
    y = c(-1, -1, 1, 1), 
    z = c(-3, -3, 2, 2) 
) 

Изображения должны быть привязаны к системе координат с другим программным обеспечением (фотограмметрии в GIS/CAD). Если у вас есть привязанный к георейтингу растр, вам просто нужны координаты его угловых точек для его построения.