2012-12-16 37 views

Trả lời

14

Với đoạn mã sau tôi đã giải quyết thành công vấn đề.

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 
} 

Vì đây gọi là dịch vụ bên ngoài (openstreetmaps.org) có thể mất một thời gian cho các tập dữ liệu lớn hơn. Tuy nhiên, bạn có thể chỉ làm điều này một lần trong một thời gian khi các thành phố mới đã được thêm vào danh sách.

+0

Bạn cũng có thể làm điều này với GNsearch từ gói địa lý của tôi - nó gọi dịch vụ web geonames.org chia sẻ rất nhiều dữ liệu của nó với dịch vụ Nominatim của OpenStreetMap. – Spacedman

+0

@Jochem Làm thế nào để tôi làm ngược lại điều này? Tôi có vĩ độ và kinh độ và tôi cần phải tìm tên thành phố và quốc gia bằng cách sử dụng đường phố mở thông qua định dạng json như bạn đã làm ở trên? –

11

Một vài tùy chọn khác cho bạn.

ggmaps

ggmaps có chức năng geocode trong đó sử dụng Google Maps để mã địa lý. Điều này giới hạn bạn đến 2.500 mỗi ngày.

taRifx.geo

phiên bản mới nhất của taRifx.geo có chức năng geocode trong đó sử dụng một trong hai Google hay Bing Maps mã địa lý. Phiên bản Bing yêu cầu bạn sử dụng tài khoản Bing (miễn phí), nhưng đổi lại bạn có thể mã hóa địa lý nhiều mục hơn. Các tính năng trong phiên bản này:

  • lựa chọn dịch vụ (Bing và Google Maps đều được hỗ trợ)
  • Log-in hỗ trợ (đặc biệt đối với Bing, mà yêu cầu một khoá tài khoản nhưng để đổi cho phép theo độ yêu cầu hàng ngày hơn)
  • Mã hóa toàn bộ một tệp dữ liệu cùng một lúc, bao gồm một số trình tiết kiệm thời gian như bỏ qua bất kỳ hàng nào đã được mã hóa địa lý
  • Mã hóa địa lý hàng loạt mạnh mẽ (để bất kỳ lỗi nào không gây ra giá trị mã hóa địa lý của toàn bộ dữ liệu. bị mất, vì công việc lớn hơn)
  • Tìm đường ing (thời gian di chuyển từ điểm A đến điểm B)
6

Hãy thử điều này tôi nghĩ rằng nó sẽ tốt hơn giải pháp cho vấn đề này

> 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

Hãy thử này ...

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..

Các vấn đề liên quan