2008-09-03 75 views
77

是否有任何可以从纬度/经度转换为时区的图书馆(或更好的网络服务)?从纬度经度时区查询

+9

可有非Web服务的解决方案呢?我有一个用例,我有零星的互联网连接,仍然需要在现场获得这些信息。具有顶层API的时区地理数据库将非常有用。 – 2011-01-10 14:12:45

+0

Simon,请参阅:http://stackoverflow.com/questions/5584602/determine-timezone-from-latitude-longitude-without-using-web-services-like-geona – fjsj 2011-10-18 13:41:30

+0

是的,有一个商业可用的库在http ://askgeo.com做到这一点。它用Java编写,线程安全,并且速度非常快(每秒10,000个查询)。 – 2012-05-08 21:27:06

回答

64

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

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

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

http://www.askgeo.com/

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

这是非常容易使用和使用记录在网站的主页上。该API支持批量查询,因此如果您需要进行大量查询,请使用批处理接口,而不是通过串行请求阻塞服务器。批量查询速度也更快,所以每个人都会赢。

当我们首次推出这款产品时,我们将其构建在Google App Engine(GAE)上,并免费向所有用户提供。这是可能的,因为当时GAE的价格非常低。从那时起,我们的服务器负载大幅增加,GAE的价格上涨。这两个因素的结合导致我们转向亚马逊网络服务托管并开始收取商业用途费用,同时为非营利,非商业性开源项目和研究人员免费提供服务。对于商业用户,我们提供1000个免费查询,让潜在客户评估API以确保满足其需求。查看网站的价格和条款。

底层库是用Java编写的,由于大众的需求,我们还根据商业许可发布了这个库。图书馆和定价细节的完整文档在网站上。

我希望这是有用的。这对我正在进行的项目非常有用。

4

这些看起来很promising-

http://www.earthtools.org/webservices.htm

+1

它们只提供一个格林威治标准时间的原始偏移量,而不是时区标识,他们在世界大部分地区都没有考虑到DST,这使得我觉得它很不可用。 – 2012-05-08 16:37:29

+0

他们似乎消失 – ligi 2017-09-12 16:00:39

5

多少准确度,你需要什么?将经度除以15几乎是正确的:p

0

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

3

Eric Muller为tz(Olson)数据库的时区制作了shapefile maps。但有一些小问题需要注意:

  1. 使用的边界通常是非官方的。
  2. 它不会像tz数据库本身那样定期更新,因此可能会丢失一些新形成或调整过的区域。

但是,除了这些之外,它对于大多数目的来说似乎是非常准确的。