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

Java 从地理坐标获取时区的算法,java,algorithm,language-agnostic,java-me,timezone,Java,Algorithm,Language Agnostic,Java Me,Timezone,我想写的应用程序,用户可以点地图上的任何地方(不仅是城市),并在那个里得到时区 我应该使用什么样的数据结构(应用程序不会连接互联网)和算法?在哪里我可以获得所需的数据(我不会比占卜地图更精确到24个矩形) 我将用Java ME编写我的应用程序。有许多web服务可以为您完成这项工作(例如有一个应用程序)。但是,如果您没有Internet连接,那么就不能直接在JavaME的标准库中找到它 不过,您可以做一些接近的事情:存储每个时区对应的城市坐标,然后执行,这样您就有了离每个城市最近的区域。然后,当用

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

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


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

有许多web服务可以为您完成这项工作(例如有一个应用程序)。但是,如果您没有Internet连接,那么就不能直接在JavaME的标准库中找到它

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


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

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

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

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

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

    好吧,如果精度不是一个要求,为什么还要麻烦使用数据结构呢?编写一个函数,给定经度,返回从格林威治子午线开始的偏移量,以小时表示


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

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

    此外,如果你想使用时区信息来计算时间变化,它会变得更加棘手,因为关于是否使用夏令时的决定,以及它变化的日期只需提前2周通知即可更改。见:


    如果您感兴趣,可以在购买多边形信息。免责声明-我没有购买此信息,因此不知道它有多好。

    但请注意,例如,法国北部有一些地方离伦敦比巴黎近,苏格兰有一些地方离斯塔万格比爱丁堡近,所以最近的城市方法不能保证回答正确。对。关键是每个国家/时区只有一个具有代表性的城市。例如,您不需要六个城市来代表法国,只需要一个城市(例如巴黎)代表它所在的时区(中欧时间)。这增加了每个沃罗诺地区的规模,提高了得到正确答案的机会。但包含巴黎和法国其他地区的多边形将不是巴黎的沃罗诺地区。当然,对每个时区(或每个国家)使用多边形表示,但它们不是沃罗诺地区。非常感谢。我认为这是正确的方向。我认为最困难的部分是从GiS系统中提取时区数据,并将其转换为可用的格式。只需确保为给定位置允许多个时区即可。世界上有些地方的边界非常模糊。我笑了,但这可能是最安全的答案,因为它让每个人都同样感到不安德格。abs(经度/15),所以对于洛杉矶,它是-118.44,你会得到-7.88,我们是GMT-8。参见