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には複数resultの があるため、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 に答える