2012-12-16 8 views

Antwort

14

Mit dem folgenden Code, den ich erfolgreich das Problem gelöst haben.

library(RJSONIO) 
nrow <- nrow(test) 
counter <- 1 
test$lon[counter] <- 0 
test$lat[counter] <- 0 
while (counter <= nrow){ 
    CityName <- gsub(' ','%20',test$CityLong[counter]) #remove space for URLs 
    CountryCode <- test$Country[counter] 
    url <- paste(
    "http://nominatim.openstreetmap.org/search?city=" 
    , CityName 
    , "&countrycodes=" 
    , CountryCode 
    , "&limit=9&format=json" 
    , sep="") 
    x <- fromJSON(url) 
    if(is.vector(x)){ 
    test$lon[counter] <- x[[1]]$lon 
    test$lat[counter] <- x[[1]]$lat  
    } 
    counter <- counter + 1 
} 

Da dies ruft einen externen Service (openstreetmaps.org) es eine Weile für größere Datensätze nehmen. Allerdings tun Sie dies wahrscheinlich nur ab und zu, wenn neue Städte zur Liste hinzugefügt wurden.

+0

Sie können dies auch mit GNsearch aus meinem geonames-Paket tun - es ruft den geonames.org-Webdienst auf, der viele seiner Daten mit dem Nomatia-Dienst von OpenStreetMap teilt. – Spacedman

+0

@Jochem Wie mache ich das Gegenteil davon? Ich habe Breiten- und Längengrade und muss Stadt- und Landnamen mit offener Straße im JSON-Format finden, wie Sie es oben getan haben. –

11

Ein paar andere Optionen für Sie.

ggmaps

ggmaps eine Funktion hat geocode, die Google Maps verwendet geocodiert. Dies beschränkt Sie auf 2.500 pro Tag.

taRifx.geo

taRifx.geo neueste Version hat eine geocode Funktion, die entweder Google oder Bing Maps geocodieren verwendet. Die Bing-Version erfordert, dass Sie ein (kostenloses) Bing-Konto verwenden, dafür können Sie jedoch viel mehr Einträge geocodieren. Funktionen in dieser Version:

  • Service-Wahl (Bing und Google Maps beide unterstützt)
  • Log-In-Unterstützung (insbesondere für Bing, die einen Kontoschlüssel erfordert aber im Gegenzug ermöglicht eine Größenordnung mehr täglich Anfragen)
  • Geocode eine ganze data.frame zu einer Zeit, darunter auch einige Zeit Sparer wie alle Zeilen ignoriert, die bereits
  • Robust Batch Geocoding geocodiert wurden (so dass jeder Fehler die ganze data.frame im wert von Geocoding nicht dazu führt, verloren gehen, für größere Jobs)
  • Route finden ing (Fahrzeiten von Punkt A nach Punkt B)
6

Versuchen Sie, diese Ich denke, es wird bessere Lösung für dieses Problem

> library(ggmap) 
 
Loading required package: ggplot2 
 
Google Maps API Terms of Service: http://developers.google.com/maps/terms. 
 
Please cite ggmap if you use it: see citation('ggmap') for details. 
 

 
#Now you can give city name or country name individually 
 

 
> geocode("hamburg") 
 
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=hamburg&sensor=false 
 
     lon  lat 
 
1 9.993682 53.55108 
 

 
geocode("amsterdam") 
 
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=amsterdam&sensor=false 
 
     lon  lat 
 
1 4.895168 52.37022 
 

 
> geocode("new york") 
 
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=new+york&sensor=false 
 
     lon  lat 
 
1 -74.00594 40.71278

0

Try This ...

function geocodeAddress(geocoder, resultsMap) { 
    var address = document.getElementById('address').value; 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status === 'OK') { 
     resultsMap.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
      map: resultsMap, 
      position: results[0].geometry.location, 
      draggable:true 
     }); 
     var infowindow = new google.maps.InfoWindow({ 
      content: "Please drag this marker to your position.." 
      }); 
      infowindow.open(resultsMap,marker); 
     document.getElementById('lat').value=marker.getPosition().lat(); 
     document.getElementById('lng').value=marker.getPosition().lng(); 
     marker.addListener('drag', handleEvent); 
marker.addListener('dragend', handleEvent); 
     } else { 
     alert('Geocode was not successful for the following reason: ' + status); 
     } 
    }); 
    } 

get full code from here..

Verwandte Themen