0

我正在尝试按照http://ruby.bastardsbook.com/chapters/methods-and-gems/获取特定位置的纬度和经度

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]

可能的问题是什么?

4

1 回答 1

1

我想我知道。XML有几个results,所以parsed_res["GeocodeResponse"]["result"]实际上是一个数组。我真的不知道 Ruby 或破解,但我的直觉是你需要解决一个结果的索引(通常第一个结果是最好的,所以使用 0),然后写类似

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

或许

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

我的符号可能是错误的,对不起!

于 2012-06-09T20:13:24.347 回答