######################################################################################################### # # # R functions for writing Javascript for displaying Google dynamic maps with data overlays # # # ######################################################################################################### make.js <- function(filename="dynmap_sub.js", mapops=list(map.lat, map.lng, initial.zoom, type=c("TERRAIN", "ROADMAP", "SATELLITE", "HYBRID")), circlesops=list(circle.data=NULL), markersops=list(marker.data=NULL, iconimage=NULL), overlayops=list(pngname=NULL, sw=c(sw.lat=NULL, sw.lng=NULL), ne=c(ne.lat=NULL, ne.lng=NULL), def.op=45), kmlops = list(kmlname=NULL), clickable = FALSE){ if(!clickable){ js <- NULL if(!is.null(kmlops[[1]])){ tmp <- readLines(kmlops[[1]]) tmp[1]<- paste("var dat = ", tmp[1], sep="") js <- c(js, tmp) } js <- c(js, "var geoXml = NULL;") js <- c(js, "var map = NULL;") js <- c(js, "function initialize() {") js <- c(js, paste("var latlng = new google.maps.LatLng(", mapops[[1]], ",", mapops[[2]], ");", sep="")) js <- c(js, "var myOptions = {") js <- c(js, paste("zoom: ", mapops[[3]], ",", sep="")) js <- c(js, "center: latlng,") js <- c(js, paste("mapTypeId: google.maps.MapTypeId.", mapops[[4]], sep="")) js <- c(js, "};") js <- c(js, "map = new google.maps.Map(document.getElementById(\'map_canvas\'), myOptions);") if(!is.null(circlesops[[1]])){ js <- c(js, make.circlesAdd(circlesops)) } if(!is.null(markersops[[1]])){ js <- c(js, make.markersAdd(markersops)) } if(!is.null(overlayops[[1]])){ js <- c(js, "overlayAdd();") } if(!is.null(kmlops[[1]])){ js <- c(js, "geoXml = new geoXML3.parser({map: map, zoom:false});") js <- c(js, "geoXml.parseKmlString(dat);") } js <- c(js, "};") if(!is.null(overlayops[[1]])){ js <- c(js, make.overlayAdd(overlayops)) } cat(js, file=filename, sep="\n") } if(clickable){ js <- NULL js <- c(js, "var geoxml = NULL;") js <- c(js, "var map = NULL;") js <- c(js, "var oldrb = \"\";") js <- c(js, "function initialize() {") if(is.null(mappars)){ js <- c(js, paste("var latlng = new google.maps.LatLng(", mapops[[1]], ",", mapops[[2]], ");", sep="")) }else{ js <- c(js, paste("var latlng = new google.maps.LatLng(", mappars[1], ",", mappars[2], ");", sep="")) } js <- c(js, "var myOptions = {") if(is.null(mappars)){ js <- c(js, paste("zoom: ", mapops[[3]], ",", sep="")) }else{ js <- c(js, paste("zoom: ", mappars[3], ",", sep="")) } js <- c(js, "draggableCursor:\'auto\', draggingCursor:\'move\', disableDoubleClickZoom: true, panControl: false,") js <- c(js, "zoomControlOptions: {style: google.maps.ZoomControlStyle.SMALL},") js <- c(js, "center: latlng,") js <- c(js, paste("mapTypeId: google.maps.MapTypeId.", mapops[[4]], sep="")) js <- c(js, "};") js <- c(js, "map = new google.maps.Map(document.getElementById(\'map_canvas\'), myOptions);") js <-c(js, "if(roishape == \"\"){") js <- c(js, "document.forms[1].shape[0].checked = false;") js <- c(js, "document.forms[1].shape[1].checked = false;") js <- c(js, "document.getElementById(\'polyinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'circleinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'squareinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'rectinfo\').style.display = \'none\';") js <- c(js, " }") js <-c(js, "if(roishape == \"circ\"){") js <- c(js, "oldrb = \"circ\";") js <- c(js, "document.getElementById(\'polyinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'circleinfo\').style.display = \'block\';") js <- c(js, "document.getElementById(\'squareinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'rectinfo\').style.display = \'none\';") js <- c(js, "document.forms[1].shape[0].checked = true;") js <-c(js, "reloadCircle();") js <- c(js, " }") js <-c(js, "if(roishape == \"poly\"){") js <- c(js, "clearPoly();") js <- c(js, "oldrb = \"poly\";") js <- c(js, "document.getElementById(\'polyinfo\').style.display = \'block\';") js <- c(js, "document.getElementById(\'circleinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'squareinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'rectinfo\').style.display = \'none\';") js <- c(js, "document.forms[1].shape[1].checked = true;") js <-c(js, "reloadPoly();") js <- c(js, " }") js <-c(js, "if(roishape == \"square\"){") js <- c(js, "oldrb = \"square\";") js <- c(js, "document.getElementById(\'polyinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'circleinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'squareinfo\').style.display = \'block\';") js <- c(js, "document.getElementById(\'rectinfo\').style.display = \'none\';") js <- c(js, "document.forms[1].shape[2].checked = true;") js <-c(js, "reloadSquare();") js <- c(js, " }") js <-c(js, "if(roishape == \"rect\"){") js <- c(js, "oldrb = \"rect\";") js <- c(js, "document.getElementById(\'polyinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'circleinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'squareinfo\').style.display = \'none\';") js <- c(js, "document.getElementById(\'rectinfo\').style.display = \'block\';") js <- c(js, "document.forms[1].shape[3].checked = true;") js <-c(js, "reloadRect();") js <- c(js, " }") js <-c(js, "google.maps.event.addListener(map, \"click\", leftClick);") if(!is.null(circlesops[[1]])){ js <- c(js, make.circlesAdd(circlesops)) } if(!is.null(markersops[[1]])){ js <- c(js, make.markersAdd(markersops)) } if(!is.null(overlayops[[1]])){ js <- c(js, "overlayAdd();") } if(!is.null(kmlops[[1]])){ js <- c(js, "kmlAdd();") } js <- c(js, "};") if(!is.null(overlayops[[1]])){ js <- c(js, make.overlayAdd(overlayops)) } if(!is.null(kmlops[[1]])){ js <- c(js, make.kmlAdd(kmlops)) } js.res<-sapply(js, function(x) sub("google.maps.event.addListener\\(map, \"click\", leftClick\\);", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[0\\].checked = true;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[1\\].checked = true;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[0\\].checked = false;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[1\\].checked = false;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[2\\].checked = true;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[3\\].checked = true;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[2\\].checked = false;", "",x)) js.res<-sapply(js.res, function(x) sub("document.forms\\[1\\].shape\\[3\\].checked = false;", "",x)) js.res<-sapply(js.res, function(x) sub("reloadCircle", "reloadCircleRes", x)) js.res<-sapply(js.res, function(x) sub("reloadPoly", "reloadPolyRes", x)) js.res<-sapply(js.res, function(x) sub("reloadSquare", "reloadSquareRes", x)) js.res<-sapply(js.res, function(x) sub("reloadRect", "reloadRectRes", x)) cat(js, file=filename, sep="\n") cat(js.res, file=paste("res", filename, sep="_"), sep="\n") write(paste(polylats, collapse=","), file="polylats.csv") write(paste(polylngs, collapse=","), file="polylngs.csv") write(paste(sqlats, collapse=","), file="sqlats.csv") write(paste(sqlngs, collapse=","), file="sqlngs.csv") write(paste(rectlats, collapse=","), file="rectlats.csv") write(paste(rectlngs, collapse=","), file="rectlngs.csv") write(paste(circpos, collapse=","), file="circpos.csv") write(paste(circrad, collapse=","), file="circrad.csv") write(paste(roishape, collapse=","), file="roishape.csv") } } make.overlayAdd <- function(overlayops){ pngname <- overlayops[[1]] sw <- overlayops[[2]] ne <- overlayops[[3]] def.op <- overlayops[[4]] ovr <- NULL ovr <- c(ovr, "function overlayAdd(){") ovr <- c(ovr, paste("var ov = \"displayfile.do?subid=\"+sbidytrewq+\"&ctype=png&file=",pngname,"\";", sep="")) ovr <-c(ovr, paste("var sw = new google.maps.LatLng(", sw[1], ",", sw[2], ");",sep="")) ovr <-c(ovr, paste("var ne = new google.maps.LatLng(", ne[1], ",", ne[2], ");",sep="")) ovr <-c(ovr, "var bounds = new google.maps.LatLngBounds(sw,ne);") ovr <-c(ovr, paste("overlay = new ProjectedOverlay(map, ov, bounds, {percentOpacity:",def.op,"});", sep="")) ovr <- c(ovr, "}") return(ovr) } make.kmlAdd <- function(kmlops){ ovr <- NULL ovr <- c(ovr, "function kmlAdd(){") ovr <- c(ovr, "geoXml = new geoXML3.parser({map: map, zoom:false});") ovr <- c(ovr, "geoXml.parseKmlString(dat);") ovr <- c(ovr, "}") return(ovr) } make.markersAdd <- function(markersops){ marker.data <- markersops[[1]] iconimage <- markersops[[2]] mrk <- NULL mrk <- c(mrk, "var pMrk;") if(!is.null(iconimage)){ mrk <- c(mrk, paste("var iconimage = \"", iconimage, "\";", sep="")) } for(i in 1:nrow(marker.data)){ md <- marker.data[i,] mrk <- c(mrk, paste("var mLatlng = new google.maps.LatLng(", md[1],", ",md[2],");", sep="")) mrk <- c(mrk, "var pMarkerOptions = {") mrk <- c(mrk, "map: map,") if(!is.null(iconimage)){ mrk <- c(mrk, "icon: iconimage,") } mrk <- c(mrk, "position: mLatlng};") mrk <- c(mrk, "pMrk = new google.maps.Marker(pMarkerOptions);") } return(mrk) } make.circlesAdd <- function(circlesops){ circle.data<-circlesops[[1]] circ <- NULL circ <- c(circ, "var pCircle;") for(i in 1:nrow(circle.data)){ cd <- circle.data[i,] circ <- c(circ, paste("var cLatlng = new google.maps.LatLng(", cd[1],", ",cd[2],");", sep="")) circ <- c(circ, "var pCircleOptions = {") circ <- c(circ, paste("strokeColor: \"", cd[3], "\",",sep="")) circ <- c(circ, paste("fillColor: \"", cd[3], "\",", sep="")) circ <- c(circ, "strokeOpacity: 1,") circ <- c(circ, "fillOpacity: 1,") circ <- c(circ, "strokeWeight: 2,") circ <- c(circ, "map: map,") circ <- c(circ, "center: cLatlng,") circ <- c(circ, paste("radius: ", cd[4], "};", sep="")) circ <- c(circ, "pCircle = new google.maps.Circle(pCircleOptions);") } return(circ) } rotate.image <- function(img) { img.t <- t(as.matrix(img)) img.t <- as.data.frame(img.t) img.t <- as.matrix(rev(img.t)) img.t }