【问题标题】:Get Latitude and Longitude from Time Zone in Java从Java中的时区获取纬度和经度
【发布时间】:2011-11-12 18:39:49
【问题描述】:

我正在尝试编写一个世界时钟应用程序,该应用程序返回给定时区的日出和日落信息。想法是用户要么指定 GMT 偏移量,要么明确给出时区。然后应用程序将使用找到的 java.util.TimeZone 查找纬度和经度(或者可能给定 GMT 偏移量)。我意识到时区通常不是获取地理位置信息的非常准确的方法,因为它们主要基于政治边界,但似乎存在这样的东西。我找到的大多数站点/api都会给出纬度和经度的时区,但我想做一个反向搜索(返回给定时区的纬度和经度)。在此先感谢您的帮助。

【问题讨论】:

  • 一个时区会让你排上几十公里长的线路。幸运的是,如果你切断海洋,这将减少到几千公里。您仍然最多只剩下 +/- 5 度的经度,只是对它的纬度有一点了解(21 度的倾斜并不是那么重要,并且几乎不会反映在时区中)。
  • 你可以有一个近似的经度,但绝对没有关于纬度。
  • @bdares:真实时区至少具有国家/地区粒度,以适应夏令时和历史变化。

标签: java android geolocation timezone location


【解决方案1】:

让我告诉你,如果你在我的祖国新西兰这样做,你可以预期的错误程度,新西兰位于一个时区(偏远岛屿除外),但跨越大范围的纬度:

Invercargill, New Zealand
  Time zone: NZST
  Sunrise today: 7:05 am

Auckland, New Zealand
  Time zone: NZST
  Sunrise today: 6:34 am

预计中国(整个国家都是一个时区)、智利、阿根廷等会出现类似问题。

好主意,但可能行不通。

【讨论】:

    【解决方案2】:

    Geonames.org 有一个可下载的城镇数据库,其中包括各种信息,包括时区和人口。您可以使用它来填充从时区映射到该时区最大城市位置的数据库。

    请注意,GMT 偏移对于此目的非常无用,但幸运的是,时区 ID 的大陆/城市术语使用户很容易选择正确的。

    【讨论】:

    • 我原则上喜欢这个想法,但我认为数据库的大小对于安卓应用来说可能大得令人望而却步。
    • @Hobo:如果你只考虑时区,那么只有大约 400 个映射 - 一点也不大。如果您想获得更准确的信息,您可以按人口规模排序并包括例如只有 2000 个最大的城市。
    【解决方案3】:

    时区是一个区域,因此您必须返回该区域边界的坐标(并且可能添加一些方法来检查给定点是否在内部)。所以你必须从地理数据开始。请记住,许多国家/地区都有夏令时,因此时区不是固定的。

    【讨论】:

      【解决方案4】:

      看了大家的回答后,我想我可能会使用Google's Geocoding API,它返回给定物理地址的纬度/经度和时区。我只需要添加一个界面,让用户输入地址、城市或邮政编码,以便从 api 检索信息并计算日出/日落时间。这比尝试将所有这些信息本地存储在数据库中(这将是巨大的)要好。感谢所有回答的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-16
        • 2022-11-01
        • 2021-04-16
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        相关资源
        最近更新 更多