问题描述
是否有一个(免费的)网络服务,我可以 a) 给它一个地址(完整的或城市、州/省和邮政编码),以及 b) 获取该地址的 IANA 时区?
用例:我有一个用户管理诊所的表单。每个诊所都有一个地址。我想预先选择该地址的 IANA 时区,以便我可以调整与该诊所相关的预约日期/时间。
我知道 Google Maps API 和 Bing Maps API 可以为我提供地址的纬度/经度,并且还有其他服务可以根据纬度/经度为我提供 IANA TZ。也就是说,这些 api 需要订阅、密钥和合同,并且还需要两个请求的方法来获取单个数据。
解决方法
地址地理定位是一个难题。它需要对地址系统有深入的了解,并对不断变化的现实世界的混乱场景做出反应。
例如,您可以获得美国邮政编码及其大致位置的数据库,但它只是一个快照。随着时间的推移,您会发现数据中会添加或丢失新的邮政编码,并且现有的邮政编码已扩展为包括其他区域。您还会发现许多“无法定位”的邮政编码,例如用于向海外军队发送邮件的邮政编码。您甚至可以找到具有两个不同时区地址的单个邮政编码。
将国际关注付诸实施,您会发现各种边缘情况。每个国家和地区都有自己的特殊规则和情况。
这是值得向服务提供商付费的问题。尝试以离线方式进行地理定位可能可能,但建议。
第二部分 - 确定哪个时区到达某个位置,也很麻烦。但是,协调稍微容易一些。 Time Zone Boundary Builder 是尝试这一点的主要开源项目。大多数图书馆referenced here都使用该数据。但即便如此,它也有更新并依赖于开放街道地图数据建立的边界。其中一些边界存在争议,因此来自 Google、Microsoft 或其他公司的服务可能会给出不同的结果,因为它们具有不同边界的地图数据。如果您关心这些事情,那么您可能想要针对不同的提供者测试一些边缘情况,看看您是否对结果感到满意。您可能会发现 TZBB 数据运行良好,或者您可能更喜欢其中一种在线解决方案。