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


79

是否有可用的图书馆(甚至更好的Web服务)可以将纬度/经度转换为时区?


9
是否有非Web服务解决方案?我有一个用例,其中我具有零散的Internet连接,但仍然需要在现场获取此信息。顶部带有API的时区地理数据库将很有用。
西蒙·吉尔比


是的,可以在askgeo.com上找到一个可商购的库,用于执行此操作。它是用Java编写的,具有线程安全性,并且速度非常快(每秒10,000个查询)。
詹姆斯D

1
一切都说完了,时间只是安排的一个维度。“小时”与当地的昼夜周期无关,因为即使对于给定的位置,这每年都会变化。如果每个人都以秒,千秒,兆秒等为单位使用Sidereal时间,它将使事情变得非常简单。kSec约为17分钟,这是非常人性化的时间。一天大约是86.4kSec。这不是偶数,那又如何呢?由于行星的旋转速度正在减慢,因此没有一天与以前的长度完全一样。
Peter Wone 2012年

Answers:


64

对于正在从事的项目,我对这个问题进行了相当深入的研究。在许多情况下,GeoNames.org和EarthTools.com都是不错的选择,但存在以下严重缺陷:

  • GeoNames.org通过搜索数据库中包含时区字段的最近点来找到时区。这通常会导致边界附近的错误结果。它还非常缓慢,导致每个请求的查询时间约为几秒钟。如果他们的数据库中查询点附近没有项目,它也不会返回有效的时区。GeoNames还限制了每天可以进行的查询数量,从而使批量操作变得困难。
  • EarthTools.org使用地图并且能够快速返回查询,但并未考虑大多数位置的夏令时,并且返回原始偏移量而不是时区ID(即,它们返回“ GMT-7” ”,而不是“美国/芝加哥”)。另外,在准备这篇文章时,我只是看着他们的页面,Google Chrome浏览器警告他们站点上的恶意软件。这对我来说是新的,并且可能会改变,但是显然值得关注。

这些缺陷意味着这些现有工具不适合我的需求,因此我推出了自己的解决方案并将其发布为一般用途。你可以在这里找到它:

http://www.askgeo.com/

AskGeo基于世界的时区地图,因此它会为每个有效的纬度和经度返回一个有效的时区。它返回在Linux以及大多数其他操作系统和编程框架上使用的标准时区ID(例如,“ America / Los_Angeles”)。它也返回当前偏移量,并充分考虑了夏令时。

它非常易于使用,其用法已记录在网站的主页上。该API支持批处理查询,因此,如果您需要进行大量查找,请使用批处理接口,而不是使用串行请求来中断我们的服务器。批量查询也更快,因此每个人都可以胜出。

首次启动时,我们是在Google App Engine(GAE)上构建的,并免费提供给所有用户。这是可能的,因为当时GAE的价格太低了。从那时起,我们的服务器负载大大增加,GAE的价格上涨。这两个因素共同导致我们转向使用Amazon Web Services进行托管,并开始为商业用途付费,同时为非营利,非商业性开源项目和研究人员免费提供服务。对于商业用户,我们提供1000个免费查询,以使潜在客户可以评估API以确保其满足他们的需求。有关价格和条款,请参见网站。

基础库是用Java编写的,并且由于受欢迎的需求,我们还根据商业许可发布了该库。图书馆的完整文档和价格详细信息位于网站上。

我希望这是有用的。这对于我正在从事的项目当然很有用。


有没有一种方法可以将您的时区ID(例如“ America / Los_Angeles”)转换为.NET System.TimeZoneInfo?
Judah Gabriel Himango 2011年

本页包含tz数据库ID(也称为Olson ID)和Windows时区ID之间的映射:unicode.org/repos/cldr-tmp/trunk/diff/supplemental/…–
James D

辛苦了 如果可以传递日期以获取针对不同时间点的日光调整偏移量,则将是很好的。添加Windows时区名称将是一个额外的好处。
CodeGrue

1
您是否打算接受回调参数,以便JSONP能够正常工作?
乔恩·尼兰德

8
除非我错过了一些东西,否则它不再免费:该API是免费试用的,并且可用于非商业和个人用途。开源项目,学生和个人可以免费使用它(请遵守我们的使用指南)。希望将API用于商业目的的任何用户必须每年支付200美元的访问费。
2012年

28

看看Geonames.org

这是一项免费的网络服务,可让您从长期/长期获取很多信息

他们还为GeoNames Webservices库提供了一个免费的(开放源代码)Java客户端(还提供了其他语言的库:ruby,python,perl,lisp ...)

这是您可以从long / lat获得的一些信息:(此处是Web服务的完整列表)

  • 查找最近的地址
  • 查找最近的交叉点
  • 查找附近的街道
  • 海拔
  • 时区

1
这将为您提供当前时间以及夏令时和标准时间的偏移量,但是我很难确定将来的日期是否在夏令时下
Scott Cowan

为此,Java日历可能会更有用
Frederic Morin 2009年



5

您需要多少精度?将经度除以15几乎是正确的:p


6
当我做出这个回答时,我非常face昧,但是直到我自己尝试解决问题时再次遇到这个问题时,我才意识到这个想法完全没有用处:upload.wikimedia.org/wikipedia/commons/e/e7 /Timezones2008.png(除非您身处国际水域)
汤姆(Tom

1
我看那张地图,认为您建议的方法实际上是相当不错的粗略估算。例如,我需要一些近似值(几小时的时间就可以了),将经度除以15似乎是一个很好的解决方案。从地图上可以看出,在国际日期变更线周围,地球上几乎没有人居住的地方,如果除以15,将导致严重的错误。
MB。

2
并非总是建议从政治角度使用数学来获取时区。但是,如果需要知道晚上还是白天,可以通过编程方式解决此问题,而无需任何Web服务。谢谢这个主意。
JackPearse 2011年

是的,askgeo.com(完整披露:我运行该网站)。您可以购买在自己的服务器上执行此操作的Java库。
詹姆斯·D

4

Eric Muller为tz(Olson)数据库的时区制作了shapefile映射。不过,有一些小小的警告:

  1. 所使用的界限通常是非正式的。
  2. 它没有像tz数据库本身那样定期更新,因此可能缺少一些新形成或调整的区域。

但是,除此以外,对于大多数目的而言,它似乎非常准确。



0

DRT引擎采用纬度,经度和本地日期时间,并返回时区偏移量。这可用于在将来的日期建立特定位置的时区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.