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

Mac*_*cki 11 java language-agnostic algorithm timezone java-me

我想写应用程序,用户可以在地图上指向任何地方(不仅是城市),并在该地点获取时区.

我应该使用什么数据结构(应用程序不具备Internet连接)和算法?在哪里我可以获得所需的数据(我不会更精确,然后将地图分成24个矩形)?

我将在Java ME中编写我的应用程序.

joe*_*ely 13

鉴于时区是基于政治实体而不是简单的物理纬度/经度计算,我将创建一个数据结构,将多边形从纬度/经度坐标映射到政治实体(国家和省/州),然后有一个单独的结构,将政治实体和当前日期映射到时区抵消.

这样你不仅可以避免冗余,还可以:

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

但是,考虑到某些边框的高度不规则形状,根据输入和/或显示的分辨率,您需要一个相当大的数据结构来保证准确性.


Joh*_*lla 5

有许多Web服务可以为您执行此操作(例如,GeoNames有一个很棒的API).但是如果你没有互联网连接,那么你不会直接在Java ME的标准库中找到它.

不过,您可以做一些事情:存储与每个时区对应的城市的坐标,然后进行Voronoi曲面细分,以便您拥有最接近每个城市的区域.然后,当您的用户点击特定地理区域时,您只需将该点映射到曲面细分的右侧部分,然后 - 您就拥有了最近的城市,而城市又决定了正确的时区.

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

  • 但要小心一点,例如,法国北部的地方离伦敦比离巴黎更近,苏格兰的地方离斯塔万格更近,而不是爱丁堡,所以最近的城市方法并不能保证正确答案. (3认同)