Skip to content

Commit b87e04d

Browse files
author
Nick Heyek
committed
Map render use cache
1 parent 1822fbf commit b87e04d

5 files changed

Lines changed: 44 additions & 53 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This repository is for discussing the format and content of data products that the TERRA Reference team will produce.
44

5-
Most of the discussions occur in the form of [GitHub issues](https://github.com/terraref/reference-data/issues). You can ask questions, request new or updated data products, and propose new formats to support there by contacting us in our [chat room](https://gitter.im/terraref/reference-data) or creating a [new issue](https://github.com/terraref/reference-data/issues/new).
5+
Most of the discussions occur in the form of [GitHub issues](https://github.com/terraref/reference-data/issues). You can ask questions, request new or updated data products, and propose new formats to support there by creating a [new issue](https://github.com/terraref/reference-data/issues/new).
66

77
## Proposing new data products
88

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@ Reference data encompasses clear definitions of data formats, semantics, and int
88
* [Website](https://terraref.ncsa.illinois.edu)
99
* email: dlebauer@illinois.edu
1010
* [GitHub Issues](https://github.com/terraref/reference-data/issues)
11-
* [Chat Room](https://gitter.im/terraref/reference-data)
1211

1312
To provide input on the computing pipeline, please visit the [Reference Data GitHub repository](https://github.com/terraref/reference-data).
1413

1514
* [GitHub Issues](https://github.com/terraref/computing-pipeline/issues)
16-
* [Chat Room](https://gitter.im/terraref/computing-pipeline)
1715

1816

1917

experiment-trait-data-visualizer/app.R

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
library(shiny)
2-
library(traits)
32
library(ggplot2)
43
library(lubridate)
54
library(timevis)
@@ -11,8 +10,8 @@ source('render-site-map.R')
1110

1211
# schedule daily execution of cache refresh
1312
cache_update_cmd <- cron_rscript('cache-refresh.R')
14-
try(cron_add(command = cache_update_cmd, frequency = 'daily',
15-
id = 'cache-update', description = 'daily update of BETYdb cache'))
13+
# try(cron_add(command = cache_update_cmd, frequency = 'daily',
14+
# id = 'cache-update', description = 'daily update of BETYdb cache'))
1615

1716
# set page UI
1817
ui <- fluidPage(theme = shinytheme('flatly'),
@@ -233,7 +232,7 @@ render_map <- function(season_name, input, output, full_cache_data) {
233232
units <- paste0('(', units, ')')
234233
legend_title <- paste0(selected_variable, ' ', units)
235234

236-
render_site_map(traits, legend_title, render_date)
235+
render_site_map(traits, render_date, legend_title)
237236
})
238237
}
239238

experiment-trait-data-visualizer/cache-refresh.R

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,43 @@ get_data_for_season <- function(season) {
1919
# save season start date and end date
2020
season_data <- list(start_date = season[[ 'start_date' ]], end_date = season[[ 'end_date' ]])
2121

22-
season_site_ids <- tbl(bety_src, 'experiments_sites') %>%
22+
site_ids <- tbl(bety_src, 'experiments_sites') %>%
2323
filter(experiment_id == season[[ 'id' ]]) %>%
2424
select(site_id) %>%
2525
collect() %>% unlist(use.names = FALSE)
2626

27-
if (is.null(season_site_ids))
27+
if (is.null(site_ids))
2828
return()
2929

3030
# only use trait records associated with the relevant sites
31-
season_traits_table <- tbl(bety_src, 'traits') %>%
31+
traits_table <- tbl(bety_src, 'traits') %>%
3232
filter(date >= season[[ 'start_date' ]] & date <= season[[ 'end_date' ]]) %>%
33-
filter(site_id %in% season_site_ids) %>%
33+
filter(site_id %in% site_ids) %>%
3434
select(date, mean, variable_id, cultivar_id, treatment_id, site_id)
3535

36-
trait_cultivars <- tbl(bety_src, 'cultivars') %>%
36+
sites_table <- tbl(bety_src, sql("select ST_AsText(sites.geometry) AS geometry, id from sites")) %>%
37+
filter(!is.na(geometry)) %>%
38+
filter(id %in% site_ids) %>%
39+
mutate(site_id = id)
40+
41+
cultivars_table <- tbl(bety_src, 'cultivars') %>%
3742
mutate(cultivar_id = id, cultivar_name = name) %>%
3843
select(cultivar_id, cultivar_name)
3944

40-
season_traits <- season_traits_table %>% left_join(trait_cultivars, by = 'cultivar_id') %>%
45+
traits <- traits_table %>%
46+
left_join(sites_table, by = 'site_id') %>%
47+
left_join(cultivars_table, by = 'cultivar_id') %>%
4148
collect() %>% as.data.frame()
4249

43-
if (nrow(season_traits) == 0)
50+
if (nrow(traits) == 0)
4451
return()
4552

46-
season_variable_ids <- unique(na.omit(
47-
season_traits[[ 'variable_id' ]]
53+
variable_ids <- unique(na.omit(
54+
traits[[ 'variable_id' ]]
4855
))
4956

50-
season_trait_data <- list()
51-
for (curr_variable_id in season_variable_ids) {
57+
trait_data <- list()
58+
for (curr_variable_id in variable_ids) {
5259

5360
variable_data <- list()
5461

@@ -57,35 +64,35 @@ get_data_for_season <- function(season) {
5764
select(id, name, units) %>% collect()
5865

5966
variable_name <- toTitleCase(gsub('_', ' ', variable_record[[ 'name' ]]))
60-
variable_traits <- subset(season_traits, variable_id == curr_variable_id)
67+
variable_traits <- subset(traits, variable_id == curr_variable_id)
6168

6269
variable_data[[ 'units' ]] <- variable_record[[ 'units' ]]
6370
variable_data[[ 'id' ]] <- variable_record[[ 'id' ]]
6471
variable_data[[ 'traits' ]] <- variable_traits
6572

6673
# subset trait data by variable
67-
season_trait_data[[ variable_name ]] <- variable_data
74+
trait_data[[ variable_name ]] <- variable_data
6875
}
6976
# save trait data for all variables
70-
season_data[[ 'trait_data' ]] <- season_trait_data
77+
season_data[[ 'trait_data' ]] <- trait_data
7178

72-
season_treatment_ids <- unique(na.omit(
73-
season_traits[[ 'treatment_id' ]]
79+
treatment_ids <- unique(na.omit(
80+
traits[[ 'treatment_id' ]]
7481
))
7582

7683
# only use management records associated with the relevant treatments
77-
season_management_ids <- tbl(bety_src, 'managements_treatments') %>%
78-
filter(treatment_id %in% season_treatment_ids) %>%
84+
management_ids <- tbl(bety_src, 'managements_treatments') %>%
85+
filter(treatment_id %in% treatment_ids) %>%
7986
collect() %>% unlist(use.names = FALSE)
8087

81-
season_managements <- tbl(bety_src, 'managements') %>%
88+
managements <- tbl(bety_src, 'managements') %>%
8289
filter(date >= season[[ 'start_date' ]] & date <= season[[ 'end_date' ]]) %>%
83-
filter(id %in% season_management_ids) %>%
90+
filter(id %in% management_ids) %>%
8491
select(id, date, mgmttype, notes) %>%
8592
collect()
8693

8794
# save management data
88-
season_data[[ 'managements' ]] <- season_managements
95+
season_data[[ 'managements' ]] <- managements
8996

9097
# load existing full_cache_data object if exists, otherwise use empty list object
9198
full_cache_data <- list()

experiment-trait-data-visualizer/render-site-map.R

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,12 @@
11
library(rgeos)
22
library(dplyr)
33

4-
# set up remote connection to BETYdb
5-
bety_src <- src_postgres(
6-
dbname = Sys.getenv('bety_dbname'),
7-
password = Sys.getenv('bety_password'),
8-
host = Sys.getenv('bety_host'),
9-
port = Sys.getenv('bety_port'),
10-
user = Sys.getenv('bety_user')
11-
)
12-
134
# render leaflet map from traits for a given date
14-
render_site_map <- function(traits, legend_title, render_date) {
5+
render_site_map <- function(traits, render_date, legend_title) {
156

16-
# get associated sites
17-
site_ids <- na.omit(unique(traits[[ 'site_id' ]]))
18-
sites <- tbl(bety_src, sql("select ST_AsText(sites.geometry) AS geometry, id from sites")) %>%
19-
filter(!is.na(geometry)) %>%
20-
filter(id %in% site_ids) %>%
21-
collect() %>% data.frame()
22-
237
# get most recent traits for each site
24-
latest_traits <- subset(traits, date <= render_date) %>% group_by(site_id) %>% top_n(1, date)
8+
latest_traits <- subset(traits, date <= render_date & !is.na(geometry)) %>%
9+
group_by(geometry) %>% top_n(1, date)
2510

2611
pal <- colorNumeric(
2712
palette = 'Greens',
@@ -31,14 +16,16 @@ render_site_map <- function(traits, legend_title, render_date) {
3116
map <- leaflet(options = leafletOptions(minZoom = 20, maxZoom = 21)) %>% addTiles()
3217

3318
# add polygon for each site, color by trait mean value
34-
for (i in 1:nrow(sites)){
35-
site <- sites[i,]
36-
37-
geo_object <- readWKT(site[['geometry']])
38-
if ('polygons' %in% names(attributes(geo_object))) {
19+
if (nrow(latest_traits) > 0) {
20+
for (i in 1:nrow(latest_traits)){
21+
curr_trait <- latest_traits[i,]
3922

40-
trait <- subset(latest_traits, site_id == site[[ 'id' ]])
41-
map <- addPolygons(map, data = geo_object, color = pal(trait[['mean']]))
23+
site_poly <- readWKT(curr_trait[[ 'geometry' ]])
24+
25+
if ('polygons' %in% names(attributes(site_poly))) {
26+
trait_value <- curr_trait[[ 'mean' ]]
27+
map <- addPolygons(map, data = site_poly, color = pal(trait_value))
28+
}
4229
}
4330
}
4431

0 commit comments

Comments
 (0)