Skip to content

Instantly share code, notes, and snippets.

@fabricebrito
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fabricebrito/85e57e61239d4038d545 to your computer and use it in GitHub Desktop.
Save fabricebrito/85e57e61239d4038d545 to your computer and use it in GitHub Desktop.
Tidy NASA NOMAD and query it
strs <- readLines("~/Downloads/nomad_seabass_v2.a_2008200.txt")
nomad <- read.csv(text=strs, skip=92, header=FALSE, stringsAsFactors = FALSE)
nomad.names <- "year,month,day,hour,minute,second,lat,lon,id,oisst,etopo2,chl,chl_a,kd405,kd411,kd443,kd455,kd465,kd489,kd510,kd520,kd530,kd550,kd555,kd560,kd565,kd570,kd590,kd619,kd625,kd665,kd670,kd683,lw405,lw411,lw443,lw455,lw465,lw489,lw510,lw520,lw530,lw550,lw555,lw560,lw565,lw570,lw590,lw619,lw625,lw665,lw670,lw683,es405,es411,es443,es455,es465,es489,es510,es520,es530,es550,es555,es560,es565,es570,es590,es619,es625,es665,es670,es683,ap405,ap411,ap443,ap455,ap465,ap489,ap510,ap520,ap530,ap550,ap555,ap560,ap565,ap570,ap590,ap619,ap625,ap665,ap670,ap683,ad405,ad411,ad443,ad455,ad465,ad489,ad510,ad520,ad530,ad550,ad555,ad560,ad565,ad570,ad590,ad619,ad625,ad665,ad670,ad683,ag405,ag411,ag443,ag455,ag465,ag489,ag510,ag520,ag530,ag550,ag555,ag560,ag565,ag570,ag590,ag619,ag625,ag665,ag670,ag683,a405,a411,a443,a455,a465,a489,a510,a520,a530,a550,a555,a560,a565,a570,a590,a619,a625,a665,a670,a683,bb405,bb411,bb443,bb455,bb465,bb489,bb510,bb520,bb530,bb550,bb555,bb560,bb565,bb570,bb590,bb619,bb625,bb665,bb670,bb683,bbr420,bbr442,bbr470,bbr488,bbr510,bbr514,bbr532,bbr550,bbr555,bbr589,bbr620,bbr671,bbr676,bbr870,wt,sal,poc,kpar,z_37,z_10,z_01,chlide_a,mv_chl_a,dv_chl_a,chl_c3,chl_c2,chl_c1c2,perid,but-fuco,hex-fuco,fuco,pras,viola,diadino,allo,diato,lut,zea,chl_b,beta-car,alpha-car,alpha-beta-car,flag,cruise"
nomad.header <- unlist(strsplit(nomad.names, split=","))
colnames(nomad) <- nomad.header
# convert split date/time to as.POSIXct
nomad$datetime <- as.POSIXct(paste(nomad$year, sprintf("%02d", nomad$month), sprintf("%02d", nomad$day), sprintf("%02d", nomad$hour), sprintf("%02d", nomad$minute), sprintf("%02d", nomad$second)), format="%Y %m %d %H %M %S")
# transform to SpatialPointsDataFrame
coordinates(nomad) <- cbind(nomad$lon, nomad$lat)
proj4string(nomad) <- CRS("+init=epsg:4326")
# end tidy
query.nomad <- function(startdate, enddate, minx=-180, miny=-90, maxx=180, maxy=90) {
temporal.subset <- subset(nomad, nomad$datetime > strptime(startdate, format="%Y-%m-%d %H:%M:%S") &
nomad$datetime < strptime(enddate, format="%Y-%m-%d %H:%M:%S"))
bl <- paste(minx, miny) #"-100 10"
br <- paste(maxx, miny) #"100 10"
tl <- paste(minx, maxy) #"-100 20"
tr <- paste(maxx, maxy) #"100 20"
pol.query <- readWKT(paste0("POLYGON((", bl, ",", tl, ",", tr, ",", br, ",", bl, "))"))
proj4string(pol.query) <- CRS("+init=epsg:4326")
return(temporal.subset[pol.query, ])
}
b <- query.nomad("2003-07-21 18:27:00", "2010-09-21 18:29:00", -180, 20, +140, 90)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment