代码之家  ›  专栏  ›  技术社区  ›  Maciek Sawicki

从地理坐标获取时区的算法

  •  11
  • Maciek Sawicki  · 技术社区  · 15 年前

    我想写一个应用程序,用户可以指向地图上的任何地方(不仅仅是城市),并在那个地方得到时区。

    我应该使用什么样的数据结构(应用程序没有互联网连接)和算法?在哪里我可以获得所需的数据(我不会更准确地预测地图成24个矩形)?

    我会用Java ME编写我的应用程序。

    4 回复  |  直到 15 年前
        1
  •  13
  •   joel.neely    15 年前

    考虑到时区是基于政治实体而不是简单的物理lat/lon计算,我将创建一个数据结构,将lat/lon坐标上的多边形映射到政治实体(国家和省/州),然后有一个单独的结构,将政治实体和当前日期映射到时区偏移。

    这样,您不仅可以避免冗余,而且还可以:

    1. 可以独立于特定坐标集显示DST参考信息,以及
    2. 当某些国家/地区更改夏令时开始和结束的规则时,您只有一个地方可以进行更新。

    但是,由于某些边框的形状非常不规则,您需要一个相当大的数据结构来保证准确性,具体取决于输入和/或显示的分辨率。

        2
  •  5
  •   John Feminella    15 年前

    有许多web服务可以为您做到这一点(例如 GeoNames 有一个 great API )中。但是如果你没有互联网连接,那你就不能直接在java me的标准库中找到。

    但是,您可以做一些接近的事情:存储每个时区对应的城市坐标,然后 Voronoi tessellation 这样你就有了离每个城市最近的区域。然后,当用户单击某个特定的地理区域时,只需将该点映射到镶嵌图的右侧部分,然后就可以看到最近的城市,进而确定正确的时区。

    更复杂的方法是可能的,但它们也需要更大的内存结构,如果您运行的是Java ME,我假设这是一个约束这是空间和速度之间的一个很好的折衷。

        3
  •  3
  •   Nick Fortescue    15 年前

    乔尔·尼利的回答很好,但要知道这是一个非常棘手的问题,因为政治原因。因此,对于克什米尔或西藏这样有争议的地区,你的决定可能会冒犯到人们。

    此外,如果您想使用时区信息计算时间更改,则会变得更加棘手,因为有关是否使用夏令时以及更改日期的决定只需提前两周通知即可更改。见: http://www.timeanddate.com/news/time/argentina-dst-2009-2010.html

    多边形信息可以在 http://www.worldtimeserver.com/time_zone_guide/ 如果你感兴趣的话免责声明-我还没有买这个信息,所以不知道它有多好。

        4
  •  3
  •   High Performance Mark    11 年前

    好吧,如果精度不是一个要求,为什么还要为数据结构操心呢?写一个函数,给定经度,返回格林尼治子午线的偏移量,用小时表示。

    如果这对你不起作用,我会同意乔尔·尼利的回答。