library(leaflet)
library(htmlwidgets)


#####################################################
# READ RECENT LUEB DATA PROVIDED by leaflet.sh
lueb <- read.table("/zugspitze/lappwald/saqn/recent/lueb-recent.csv",sep=";")
lonbou <- 10.88837
latbou <- 48.37658
lonkar <- 10.89628
latkar <- 48.37027
lonkoe <- 10.89503
latkoe <- 48.36459
lonlfu <- 10.90305
latlfu <- 48.32601
colnames(lueb) <- c("date","time","pm10")
lueb$lon <- c(lonbou,lonkar,lonkoe,lonlfu)
lueb$lat <- c(latbou,latkar,latkoe,latlfu)


#####################################################
# READ RECENT OKLAB DATA PROVIDED by leaflet.sh
header <- c("id","latitude","longitude","hgt","date","utc","pm10","pm25","temp","rhum","x1","x2","x3","x4")
fname <- "/zugspitze/lappwald/saqn/recent/oklab-recent.csv"
oklab <- try(read.table(fname,header=F,stringsAsFactors=F,comment.char="*",sep=" ",dec=".",col.names=header,fill=T))
oklab$latitude[oklab$latitude <45 | oklab$longitude <9 ] <- NA
oklab$longitude[oklab$latitude <45 | oklab$longitude <9 ] <- NA
#oklab$pm10[oklab$pm10 > 60 ] <- NA

#####################################################
# READ RECENT GRIMM DATA PROVIDED by leaflet.sh
step <- 60*60
t2 <- as.POSIXct(Sys.time())
t1 <- t2 - step
header <- c("datetime","serialno","type","PM10","PM25","PM1","um035","um046","um066","um100","um130",
                "um170","um230","um300","um400","um520","um650","um800","um1000","um1200","um1400","um1600",
                "um1800","um2000","um2200","um2500","um2800","um3100","um3400","um3700","serial-OPC","Tout",
                "Taerosol","rH","UTC","longitude","latitude","height","time-resolution","software-version","lastcalibration","configversion")
fname <- "/zugspitze/lappwald/saqn/recent/grimm-recent.csv"
asopc <- try(read.table(fname,header=F,stringsAsFactors=F,comment.char="*",sep=";",dec=",",col.names=header,fill=T))

lat <- gsub("N", "", asopc$latitude )
lat <- gsub(",", ".", lat)
lat <- as.numeric(lat)
lon <- gsub("E", "", asopc$longitude)
lon <- gsub(",", ".", lon)
lon <- as.numeric(lon)


#asopc[as.character(asopc)=="nan"] <- NA

asopc$PM10 <- as.numeric(sub(",", ".",asopc$PM10, fixed = TRUE))
asopc$PM25 <- as.numeric(asopc$PM25)
asopc$PM1 <- as.numeric(asopc$PM1)
asopc$um035 <- as.numeric(asopc$um035)
asopc$um046 <- as.numeric(asopc$um046)
asopc$um066 <- as.numeric(asopc$um066)
asopc$um100 <- as.numeric(asopc$um100)
asopc$um130 <- as.numeric(asopc$um130)
asopc$um170 <- as.numeric(asopc$um170)
asopc$um230 <- as.numeric(asopc$um230)
asopc$um300 <- as.numeric(asopc$um300)
asopc$um400 <- as.numeric(asopc$um400)
asopc$um520 <- as.numeric(asopc$um520)
asopc$um650 <- as.numeric(asopc$um650)
asopc$um800 <- as.numeric(asopc$um800)
asopc$um1000 <- as.numeric(asopc$um1000)
asopc$um1200 <- as.numeric(asopc$um1200)
asopc$um1400 <- as.numeric(asopc$um1400)
asopc$um1600 <- as.numeric(asopc$um1600)
asopc$um1800 <- as.numeric(asopc$um1800)
asopc$um2000 <- as.numeric(asopc$um2000)
asopc$um2200 <- as.numeric(asopc$um2200)
asopc$um2500 <- as.numeric(asopc$um2500)
asopc$um2800 <- as.numeric(asopc$um2800)
asopc$um3100 <- as.numeric(asopc$um3100)
asopc$um3400 <- as.numeric(asopc$um3400)
asopc$um3700 <- as.numeric(asopc$um3700)
asopc$Tout <- as.numeric(asopc$Tout)
asopc$Taerosol <- as.numeric(asopc$Taerosol)
asopc$rH <- as.numeric(asopc$rH)

#asopc$longitude <- as.numeric(asopc$longitude)
#asopc$latitude <- as.numeric(asopc$latitude)
asopc$longitude <- lon
asopc$latitude <- lat

asopc$height <- as.numeric(asopc$height)

#ids <- sort(unique(asopc$serial-no))
#for (i in seq_along(ids)) {
#
#}

fname <- "/zugspitze/lappwald/saqn/recent/grimm-recent-opc.csv"
header <- c("localtime","utctime","longitude","latitude","height","PM10","PM4","PM2.5","PM1",
                "um0_25","um0_28","um0_30","um0_35","um0_40","um0_45","um0_50","um0_58","um0_65","um0_70",
                "um0_80","um1_00","um1_30","um1_60","um2_00","um2_50","um3_00","um3_50m","um4_00","um5_00",
                "um6_50","um7_50","um8_50","um10_00","um12_50","um15_00","um17_50","um20_00","um25_00",
                "um30_00","um32_00","temp","humidity","pressure","serial","software-version")
opc <- try(read.table(fname,header=F,stringsAsFactors=FALSE,comment.char="*",sep=";",dec=",",col.names=header,fill=T))
lat <- gsub("N", "", opc$latitude )
lat <- gsub(",", ".", lat)
lat <- as.numeric(lat)
lon <- gsub("E", "", opc$longitude)
lon <- gsub(",", ".", lon)
lon <- as.numeric(lon)
opc$longitude <- lon
opc$latitude <- lat


# FILTER HIGH VALUES OF OKLAB
pm10oklab <- oklab$pm10
pm10oklab[pm10oklab > 60 ] <- NA
# CREATE COLOR PALETTE
pal <- colorNumeric(
  palette = "Reds",
  domain = c(0,max(c(asopc$PM10,lueb$pm10,pm10oklab),na.rm=TRUE ) )
)


m = leaflet(options = leafletOptions(zoomSnap = 0.01, zoomDelta = 0.01))

#df = data.frame(
#  lat = asopc$latitude,
#  lng = asopc$longitude,
#  size = runif(length(asopc$latitude), 100, 100),
#  color = sample(colors(), length(asopc$latitude))
#)

df = data.frame(
  lat = c(asopc$latitude,opc$latitude),
  lng = c(asopc$longitude,opc$longitude),
  size = runif(length( c(asopc$latitude,opc$latitude) ), 10, 10),
  color = c(asopc$PM10,opc$PM10)
)
val <- as.list(c(asopc$PM10,opc$PM10))

# LUEB
popuplabel <- paste(c("LUEB Borgeplatz","LUEB Karlstrasse","LUEB Koenigsplatz","LUEB LfU"),lueb$date,lueb$time)
m <- addCircleMarkers( m,data=lueb,radius = 15,color="blue",weight=2,fillColor=~pal(lueb$pm10),opacity=1.0,fillOpacity=1.0,popup=popuplabel,
label=as.character(lueb$pm10),labelOptions=labelOptions(noHide=T,textOnly=T,textsize="22px",direction="right",
offset=c(20,0), style = list("color"="blue","font-style"="bold") ), group="lueb")

# GRIMM
col <- "darkblue"
popuplabel <- paste(c(asopc$serialno,opc$serial)," ",c(asopc$datetime,opc$localtime))
m <- addCircleMarkers( m,data=df,radius = df$size,color=col,weight=2,fillColor= ~pal(df$color),opacity=1.0,fillOpacity=1.0,popup=popuplabel,
label=as.character(c(asopc$PM10,opc$PM10)),labelOptions=labelOptions(noHide=T,textOnly=T,textsize="22px",direction="left",
offset=c(-15,0), style = list("color"=col,"font-style"="bold") ), group="edm")

# OKLAB
popuplabel <- paste(oklab$id," ",oklab$date," ",oklab$utc)
m <- addCircleMarkers( m,data=oklab,radius = 8,color="black",weight=2,fillColor= ~pal(oklab$pm10),opacity=1.0,fillOpacity=1.0,popup=popuplabel,
label=as.character(oklab$pm10),labelOptions=labelOptions(noHide=T,textOnly=T,textsize="18px",direction="bottom",
offset=c(0,-8), style = list("color"="black","font-style"="bold") ),group="oklab")

#m <- addGraticule(map=m,interval=1/60.0,group = "Graticule")
#m <- hideGroup(map=m,"Graticule")
#m <- addLayersControl(map=m,overlayGroups = c("Graticule"),
#    options = layersControlOptions(collapsed = FALSE))

#m <- addLabelOnlyMarkers(map=m,lng=10.77043, lat=48.44136, label = "SmartAQnet recent PM10 measurements", labelOptions = labelOptions(noHide=T, textsize="15px"))

#m <- addLegend(map=m,position="topleft",title="recent SAQN data",opacity=1)

m <- addLegend(map=m,position="topleft", pal=pal, values = c(asopc$PM10,lueb$pm10),title="PM10 in µg/m³",opacity=1)

m <- addScaleBar(map=m,position="bottomleft")

m <- addTiles(m)
#m <- addTitle(m,"SAQN")
#m <- addMarkers(m, lng=174.768, lat=-36.852, popup="The birthplace of R")


m <- addProviderTiles(m,"OpenStreetMap",group = "OpenStreetMap")
m <- addProviderTiles(m,"Esri.WorldImagery",group = "Esri.WorldImagery")
m <- addProviderTiles(m,"CartoDB.Positron", group="CartoDB.Positron")

m <- addLayersControl(m,baseGroups = c("OpenStreetMap","Esri.WorldImagery","CartoDB.Positron"),
                        overlayGroups = c("lueb","edm","oklab"), position = "topright",options = layersControlOptions(collapsed = FALSE))

m <- setView(m, 10.88709, 48.36747, 13, options = list())

#m <- addMiniMap(m, tiles = providers$OpenStreetMap,toggleDisplay = TRUE)


saveWidget(m, file="/zugspitze/lappwald/saqn/recent/saqn-map-recent.html", title="SmartAQnet")
