用于查找位置时区的 Ruby gem [关闭]
Posted
技术标签:
【中文标题】用于查找位置时区的 Ruby gem [关闭]【英文标题】:Ruby gem for finding timezone of location [closed] 【发布时间】:2012-01-11 02:21:15 【问题描述】:我有一个位置(城市、州)、日期和时间,我想将其转换为 UTC,但需要先找到该位置的时区。我做了一些研究,一切似乎都指向earthtools 或geonames,但两个Web 服务似乎都只是纬度和经度。是否有服务或 gem 或任何其他方式来根据这种位置格式查找时区?或者如何将位置转换为经纬度?
【问题讨论】:
另见this community wiki entry 【参考方案1】:您可以自己调用地理定位服务,例如 Google 地图,将城市、州翻译成纬度和经度。还有一些开放的数据库种子,可以为您提供世界各地城市的纬度和经度。您可以创建一个位置模型并使用其中之一为该表播种。
您可以在这里免费下载地理位置数据:http://www.maxmind.com/app/geolitecity
【讨论】:
【参考方案2】:对于问题的第二部分,请参阅此问题的已接受答案:
Determine timezone from latitude/longitude without using web services like Geonames.org
如该答案所述,您应该:
从 geonames.org 下载城市数据库 将其转换为紧凑的纬度/经度 -> 时区列表 使用R-Tree 实现有效地查找最近的城市(或者更确切地说,它的 时区)到给定的坐标
还要记住,美国的许多州属于一个时区,这应该会使工作更容易。
【讨论】:
nearest_time_zone 就是这样做的。阅读此答案后,我做到了,因为我不想因调用 Web 服务而受到性能损失。【参考方案3】:您可以使用google maps geocoding API 轻松获取纬度和经度。 API 有 ruby 实现,例如 GeoKit。一旦你有了它,你就可以使用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
【讨论】:
谢谢,这似乎是最好的选择 如果您有经纬度,您可以使用nearest_time_zone gem 查找时区名称,而无需进行任何网络服务调用。 上述方法无效。正确答案在***.com/questions/12578695/…【参考方案4】:查看https://gist.github.com/4676207 的 Gist 以获取使用 Google API (https://developers.google.com/maps/documentation/timezone/) 的版本。连同Geocoder gem,您可以轻松找到所有时区ID :)
【讨论】:
【参考方案5】:检查这个宝石:https://github.com/sck-v/google_timezone
它使用google timezone api通过已知的经纬度来确定时区
【讨论】:
以上是关于用于查找位置时区的 Ruby gem [关闭]的主要内容,如果未能解决你的问题,请参考以下文章