web-dev-qa-db-ja.com

Ruby場所のタイムゾーンを見つけるための宝石

場所(都市、州)、日付、時刻があり、UTCに変換したいのですが、最初に場所のタイムゾーンを見つける必要があります。少し調べてみたところ、すべてがearthtoolsまたはgeonamesのいずれかを指しているようですが、どちらのWebサービスも緯度と経度のみであるように見えます。この形式の場所に基づいてタイムゾーンを見つけるサービスや宝石、またはその他の方法はありますか?または、場所を緯度と経度に変換するにはどうすればよいですか?

28
Nick

google maps geocoding API を使用して、緯度と経度を簡単に取得できます。 GeoKit のようなAPIのRuby実装があります。それができたら、 timezone gem を使用して、のタイムゾーンを簡単に取得できます。緯度と経度。このgemを使用すると、タイムゾーンでの時間変換も簡単に実行できます。

GeoKit および TimeZone を使用した例を次に示します。

require 'geokit'
require 'timezone'

res = Geokit::Geocoders::GoogleGeocoder.geocode('140 Market St, San Francisco, CA')
timezone = Timezone::Zone.new(:latlon => res.ll)

timezone.zone
=> "America/Los_Angeles"
timezone.time Time.now
=> 2011-12-01 14:02:13 UTC
39
Pan Thomakos

質問の2番目の部分については、この質問に対する受け入れられた回答を参照してください。

Geonames.orgなどのWebサービスを使用せずに緯度/経度からタイムゾーンを決定します

その答えで述べられているように、あなたはすべきです:

  • Geonames.orgから都市のデータベースをダウンロードします
  • コンパクトな緯度/経度->タイムゾーンリストに変換します
  • R-Tree 実装を使用して、指定された座標に最も近い都市(またはそのタイムゾーン)を効率的に検索します

また、多くの米国の州は単一のタイムゾーンに属しているため、作業が簡単になることにも注意してください。

9
Peter O.

この宝石を確認してください: https://github.com/sck-v/google_timezone

Google timezone apiを使用して、既知の緯度と経度でタイムゾーンを決定します

1
Ivan Kryak

Googleマップなどのジオロケーションサービスを独自に呼び出して、都市、州を緯度と経度に変換できます。世界中の都市の緯度と経度を提供するオープンデータベースシードもあります。ロケーションモデルを作成し、それらの1つを使用してそのテーブルにシードを設定できます。

ジオロケーションデータを無料でダウンロードできる場所は次のとおりです。 http://www.maxmind.com/app/geolitecity

1
Sean Hill

GoogleのAPIを使用するバージョンについては https://Gist.github.com/4676207 の要点を確認してください( https://developers.google.com/maps/documentation/timezone/ )。 Geocoder gem と一緒に、すべてのタイムゾーンIDを簡単に見つけることができます:)

0
joost