2012-06-09 1 views
0

Я пытаюсь принести широту и долготу в конкретном месте следующие http://ruby.bastardsbook.com/chapters/methods-and-gems/Невозможно преобразовать строку в целое число при разборе Google Maps API

Here is the snippet: 
require 'rubygems' 
require 'rest-client' 
require 'crack' 

def get_coordinates_from_address(addr) 
    base_google_url = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=" 
    res = RestClient.get(URI.encode("#{base_google_url}#{addr}")) 
    parsed_res = Crack::XML.parse(res) 
    lat = parsed_res["GeocodeResponse"]["result"]["geometry"]["location"]["lat"] 
    lng = parsed_res["GeocodeResponse"]["result"]["geometry"]["location"]["lng"] 

    return "#{lat}, #{lng}" 
end  

latlng = get_coordinates_from_address("1 Times Square, NYC") 
puts latlng 

я получаю следующую трассировку стека:

/Users/archie/agile/latlang.rb:9:in `[]': can't convert String into Integer (TypeError) 
    from /Users/archie/agile/latlang.rb:9:in `get_coordinates_from_address' 
    from /Users/archie/agile/latlang.rb:15:in `<main>' 
[Finished] 

В чем проблема?

ответ

1

Я думаю, что знаю. The XML имеет несколько result s, поэтому parsed_res["GeocodeResponse"]["result"] действительно представляет собой массив. Я действительно не знаю, рубин или трещина, но я подозреваю, вам необходимо обратиться индекс привести (как правило, первым результатом является лучшим, так что используйте 0), и написать что-то вроде

parsed_res["GeocodeResponse"]["result"][0]["geometry"]["location"]["lat"] 

или, может быть,

firstResult = parsed_res["GeocodeResponse"]["result"][0] 
lat = firstResult["geometry"]["location"]["lat"] 

Мое обозначение, вероятно, неверно, извините!

+1

Также может быть интересно прокомментировать, что эти значения не являются целыми числами, а преобразование строк в целые числа может не дать ожидаемых результатов. –

Смежные вопросы