2016-05-23 8 views
1

Ich möchte die Bing-API zum Batch-Geocode verwenden. Ich habe ein Paket auf Github bei https://github.com/gsk3/taRifx.geo/blob/master/R/Contributed.R gefunden, aber ich kann nicht scheinen, herauszufinden, wie man seine Funktion auf einem Vektor verwendet. Wenn ich folgendes versuchen alles funktioniert gut:Geocode in R mit Bing

devtools::install_github("gsk3/taRifx.geo") 
options(BingMapsKey='my_APIKEY') 
geocode("New York,NY", service="bing", returntype="coordinates") 

Aber wenn ich die Lage mit einem Vektor von Standorten ersetzt, nur ein einziges Koordinatenpaar zurückgeführt wird und die folgende Warnung zurückgegeben wird:

Warning message: In if (is.na(x) | gsub(" *", "", x) == "") return(c(NA, NA)) : the condition has length > 1 and only the first element will be used

Ich habe auch versucht, die folgende alternative Funktion, aber wieder nur ein einziges Koordinatenpaar zurückgegeben wird. Mit ggmap's geocode kann ich diesen Prozess auf einem Vektor laufen lassen, aber die API ist auf 2500 Anfragen/Tag beschränkt, so dass ich festhalte, Bing zu verwenden (Yahoo API ist zu schwer zu bekommen).

bGeoCode <- function(str, BingMapsKey){ 
    require(RCurl) 
    require(RJSONIO) 
    u <- URLencode(paste0("http://dev.virtualearth.net/REST/v1/Locations?q=", str, "&maxResults=1&key=", BingMapsKey)) 
    d <- getURL(u) 
    j <- fromJSON(d,simplify = FALSE) 
    if (j$resourceSets[[1]]$estimatedTotal > 0) { 
     lat <- j$resourceSets[[1]]$resources[[1]]$point$coordinates[[1]] 
     lng <- j$resourceSets[[1]]$resources[[1]]$point$coordinates[[2]] 
    } 
    else {  
     lat <- lng <- NA 
    } 
    c(lat,lng) 
} 

bGeoCode(data$location, "my_APIKEY") 

Jede Hilfe wird sehr geschätzt.

+0

Schleife es mit so etwas wie 'lapply (data $ Lage, Geocodierung, Service = 'bing', return = 'Koordinaten')'. Abwechselnd check out 'ggmap :: geocode', das einen Vektor, z.B. 'ggmap :: geocode (c ('dc', 'nyc', 'la'))' – alistaire

Antwort

2

Ohne das fragliche Paket verwendet zu haben, sieht es so aus, als ob die geocode-Funktion nicht vektorisiert ist. Eine schnelle Lösung ist es zu machen vektorisiert:

geocodeVect <- Vectorize(geocode, vectorize.args="x") 
geocodeVect(multiple_locations, ...) 
+0

Danke, das scheint es zu tun! –