場所(都市、州)、日付、時刻があり、UTCに変換したいのですが、最初に場所のタイムゾーンを見つける必要があります。少し調べてみたところ、すべてがearthtoolsまたはgeonamesのいずれかを指しているようですが、どちらのWebサービスも緯度と経度のみであるように見えます。この形式の場所に基づいてタイムゾーンを見つけるサービスや宝石、またはその他の方法はありますか?または、場所を緯度と経度に変換するにはどうすればよいですか?
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
質問の2番目の部分については、この質問に対する受け入れられた回答を参照してください。
Geonames.orgなどのWebサービスを使用せずに緯度/経度からタイムゾーンを決定します
その答えで述べられているように、あなたはすべきです:
- Geonames.orgから都市のデータベースをダウンロードします
- コンパクトな緯度/経度->タイムゾーンリストに変換します
- R-Tree 実装を使用して、指定された座標に最も近い都市(またはそのタイムゾーン)を効率的に検索します
また、多くの米国の州は単一のタイムゾーンに属しているため、作業が簡単になることにも注意してください。
この宝石を確認してください: https://github.com/sck-v/google_timezone
Google timezone apiを使用して、既知の緯度と経度でタイムゾーンを決定します
Googleマップなどのジオロケーションサービスを独自に呼び出して、都市、州を緯度と経度に変換できます。世界中の都市の緯度と経度を提供するオープンデータベースシードもあります。ロケーションモデルを作成し、それらの1つを使用してそのテーブルにシードを設定できます。
ジオロケーションデータを無料でダウンロードできる場所は次のとおりです。 http://www.maxmind.com/app/geolitecity
GoogleのAPIを使用するバージョンについては https://Gist.github.com/4676207 の要点を確認してください( https://developers.google.com/maps/documentation/timezone/ )。 Geocoder gem と一緒に、すべてのタイムゾーンIDを簡単に見つけることができます:)