1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #### This script uses RCurl and RJSONIO to download data from Google's API: #### Latitude, longitude, location type (see explanation at the end), formatted address #### Notice ther is a limit of 2,500 calls per day library(RCurl) library(RJSONIO) library(plyr) url <- function(address, return.call = "json", sensor = "false") { root <- "http://maps.google.com/maps/api/geocode/" u <- paste(root, return.call, "?address=", address, "&sensor=", sensor, sep = "") return(URLencode(u)) } geoCode <- function(address,verbose=FALSE) { if(verbose) cat(address,"\n") u <- url(address) doc <- getURL(u) x <- fromJSON(doc,simplify = FALSE) if(x$status=="OK") { lat <- x$results[[1]]$geometry$location$lat lng <- x$results[[1]]$geometry$location$lng location_type <- x$results[[1]]$geometry$location_type formatted_address <- x$results[[1]]$formatted_address return(c(lat, lng, location_type, formatted_address)) } else { return(c(NA,NA,NA, NA)) } } ##Test with a single address #address <- geoCode("The White House, Washington, DC") #address #[1] "38.8976831" #[2] "-77.0364972" #[3] "APPROXIMATE" #[4] "The White House, 1600 Pennsylvania Avenue Northwest, Washington, D.C., DC 20500, USA" |
1 | location <- modelerData$%%address%% |
1 | modelerData<-cbind(modelerData,lat) |
1 2 | var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real", fieldFormat="",fieldMeasure="", fieldRole="") |
1 | modelerDataModel<-data.frame(modelerDataModel,var1) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | library(RCurl) library(RJSONIO) location <- modelerData$%%address%% print(location) root <- "http://maps.google.com/maps/api/geocode/" u <- paste(root,"json", "?address=", location, "&sensor=", "false", sep = "") u <- gsub(' ','%20',u) #Encode URL Parameters print(u) require("plyr") doc <- aaply(u,1,getURL) json <- alply(doc,1,fromJSON,simplify = FALSE) coord = laply(json,function(x) { if(x$status=="OK") { lat <- x$results[[1]]$geometry$location$lat lng <- x$results[[1]]$geometry$location$lng return(c(lat,lng)) } else { return(c(NA,NA)) } }) lat<-c(coord[,1]) lng<-c(coord[,2]) modelerData<-cbind(modelerData,lat) print(modelerData) var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real", fieldFormat="",fieldMeasure="", fieldRole="") modelerDataModel<-data.frame(modelerDataModel,var1) modelerData<-cbind(modelerData,lng) print(modelerData) var2<-c(fieldName="Longitude",fieldLabel="",fieldStorage="real", fieldFormat="",fieldMeasure="", fieldRole="") modelerDataModel<-data.frame(modelerDataModel,var2) |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |