用于查找位置时区的 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CocoaPods的安装、使用(查找.安装) 及 CocoaPods卸载

如何查找 gem 文件的安装位置

在 Windows 上安装 taglib-ruby gem

从纬度经度查找时区 [关闭]

从纬度经度查找时区[关闭]

日期时区在查找“美国/蓬塔阿雷纳斯”位置的 ID 时遇到问题