DEM を扱う Shiny プログラム
動作画面例
単純表示
影付き表示
等高線
勾配強度
勾配強度の等高線
斜面の向き
斜面の向きの等高線
sinkfill
sinkfill の等高線
topidx
topidxの等高線
ソースコード
ui.r
require(shiny)
# Define UI for application that plots random distributions
shinyUI(pageWithSidebar(
# Application title
headerPanel("Hello!"),
# Sidebar with a slider input for number of observations
sidebarPanel(
radioButtons('vt', 'View Type',
c('単純表示: plotdem(huagrahuma.dem, terrain.colors(20))'='plot',
'影付き表示: shadeplotdem(huagrahuma.dem)'='shadeplot',
'等高線: contour(huagrahuma.dem)'='contour',
'勾配強度: plotdem(slopedem(huagrahuma.dem, 1, 1), rev(heat.colors(20)))'='slopedem',
'勾配強度の等高線: contour(slopedem(huagrahuma.dem, 1, 1))'='slopedem_contour',
'斜面の向き: plotdem(aspectdem(huagrahuma.dem, 1, 1), heat.colors(20)) '='aspectdem',
'斜面の向きの等高線: contour(aspectdem(huagrahuma.dem, 1, 1)) '='aspectdem_contour',
'sinkfill: plotdem(sinkfill(huagrahuma.dem, 25, i), heat.colors(20))'='sinkfill',
'sinkfillの等高線: contour(sinkfill(huagrahuma.dem, 25, i))'='sinkfill_contour',
'topidx: plotdem(topidx(huagrahuma.dem, resolution= 25)$atb, heat.colors(20)) '='topidx',
'topidxの等高線: contour(topidx(huagrahuma.dem, resolution= 25)$atb) '='topidx_contour',
'image(huagrahuma.dem)'='image'),
'単純表示: plotdem(huagrahuma.dem, terrain.colors(20))'),
sliderInput("dir",
"影付き表示での向き:",
min = 0,
max = 360,
value = 315),
sliderInput("a",
"影付き表示での高さ:",
min = 0,
max = 90,
value = 45),
sliderInput("i",
"sinkfill 値:",
min = 2,
max = 100,
value = 5)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot", width="100%", height="100%")
)
))
server.r
require(shiny)
require(ggplot2)
require(topmodel)
require(insol)
require(data.table)
data(huagrahuma)
data(huagrahuma.dem)
plotdem <- function(DEM, c) {
x <- rep(1:nrow(DEM), ncol(DEM)) # 1 2 3 1 2 3 1 2 3 1 2 3
y <- rep(1:ncol(DEM), each=nrow(DEM)) # 1 1 1 1 2 2 2 2 3 3 3 3
T <- data.table(x=x, y=y, val=as.numeric(DEM))
p <- ggplot(T, aes(x=x, y=y, fill=val)) + geom_tile() + scale_fill_gradientn("frequency", colours = c)
return(p)
}
slopedem <- function(DEM, dl_long, dl_lat) {
return( slope( cgrad(DEM, dl_long, dl_lat) ) )
}
aspectdem <- function(DEM, dl_long, dl_lat) {
return( aspect( cgrad(DEM, dl_long, dl_lat) ) )
}
shadeplotdem <- function(DEM, dir, a) {
cellsize=30
sv=normalvector(a, dir)
grd=cgrad(DEM, cellsize)
hsh=grd[,,1]*sv[1]+grd[,,2]*sv[2]+grd[,,3]*sv[3]
## remove negative incidence angles (self shading)
hsh=(hsh+abs(hsh))/2
sh=doshade(DEM, sv, cellsize)
p <- plotdem(hsh*sh, grey(1:100/100))
return(p)
}
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
print(input$vt)
if (input$vt == 'plot') {
p <- plotdem(huagrahuma.dem, terrain.colors(20))
print(p)
}
else if (input$vt == 'shadeplot') {
p <- shadeplotdem(huagrahuma.dem, input$dir, input$a)
print(p)
}
else if (input$vt == 'contour') {
contour(huagrahuma.dem)
}
else if (input$vt == 'slopedem') {
p <- plotdem(slopedem(huagrahuma.dem, 1, 1), rev(heat.colors(20)))
print(p)
}
else if (input$vt == 'slopedem_contour') {
contour(slopedem(huagrahuma.dem, 1, 1))
}
else if (input$vt == 'aspectdem') {
p <- plotdem(aspectdem(huagrahuma.dem, 1, 1), rev(heat.colors(20)))
print(p)
}
else if (input$vt == 'aspectdem_contour') {
contour(aspectdem(huagrahuma.dem, 1, 1))
}
else if (input$vt == 'sinkfill') {
p <- plotdem(sinkfill(huagrahuma.dem, 25, input$i), rev(heat.colors(20)))
print(p)
}
else if (input$vt == 'sinkfill_contour') {
contour(sinkfill(huagrahuma.dem, 25, input$i))
}
else if (input$vt == 'topidx') {
p <- plotdem( topidx(huagrahuma.dem, resolution= 25)$atb, rev(heat.colors(20)))
print(p)
}
else if (input$vt == 'topidx_contour') {
contour( topidx(huagrahuma.dem, resolution= 25)$atb )
}
else if (input$vt == 'image') {
image(huagrahuma.dem)
}
# dist <- rnorm(n = input$n, mean = input$mean, sd = input$sd)
# hist(dist)
}, height=640, width=640)
})
run.r
require(shiny)
runApp("/var/tmp")