是否有可能在不使用网络服务的情况下确定点(纬度/经度)的时区?Geonames.org 不够稳定,我无法使用 :( 我需要它在 PHP 中工作。
谢谢
是否有可能在不使用网络服务的情况下确定点(纬度/经度)的时区?Geonames.org 不够稳定,我无法使用 :( 我需要它在 PHP 中工作。
谢谢
你的结果必须有多精确?如果粗略估计就足够了,请自行计算偏移量:
offset = direction * longitude * 24 / 360
其中方向为 1 为东,-1 为西,经度为 (-180,180)
我在做另一个项目时遇到了这个问题,并对其进行了深入研究。我发现所有现有的解决方案在主要方面都缺乏。
下载 GeoNames 数据并使用一些空间索引来查找最近的点绝对是一种选择,它会在很多时候产生正确的结果,但如果查询点在时间错误的一侧,它很容易失败从数据库中最近的点开始的区域边界。
更准确的方法是使用时区的数字地图并编写代码来查找该地图中包含给定查询点的多边形。值得庆幸的是,没有可用的世界时区的一个极好的地图在http://efele.net/maps/tz/world/(不保持了)。要编写高效的查询引擎,您需要:
每一个都值得拥有自己的 Stack Overflow 问题/答案页面。
在得出结论认为现有的解决方案都不能满足我的需求后,我编写了自己的解决方案并在此处提供:
AskGeo 使用数字地图并具有高度优化的空间索引,允许在我的计算机上以单个线程每秒运行超过 10,000 次查询。而且它是线程安全的,因此更高的吞吐量当然是可能的。这是一段严肃的代码,我们花了很长时间来开发,所以我们在商业许可下提供它。
它是用 Java 编写的,因此在 PHP 中使用它需要使用:
http://php-java-bridge.sourceforge.net/doc/how_it_works.php
我们也愿意移植它以获得赏金。有关定价的详细信息和详细文档,请参阅http://askgeo.com。
我希望这是有用的。这对我正在从事的项目当然很有用。
我知道这很旧,但我花了一些时间寻找这个答案。发现了一个非常有用的东西。Google 按 long/lat 进行时区查找。不再有免费层:-/