tochka-developers / geo-timezone
PHP 库,用于根据特定位置的时区进行计算。
v0.2.1
2024-06-18 09:05 UTC
Requires
- php: 8.2.*|8.3.*
- ext-zip: *
- guzzlehttp/guzzle: ^6.0|^7.0
- psr/log: ^3.0
- tochka-developers/geophp: ^0.2
Requires (Dev)
- laravel/pint: ^1.14
- phpunit/phpunit: ^10.0
- vimeo/psalm: ^5.23
This package is auto-updated.
Last update: 2024-09-18 09:51:40 UTC
README
基于node-geo-tz 包,这个PHP库根据坐标(纬度,经度)和时间戳参考计算特定位置的时区。因此,此库还可以提供任何时刻特定位置的本地日期。此外,它基于由timezone-boundary-builder 工具提取的时区边界,因此需要始终使用此包的最新版本。为了通过边界改进时区搜索,node-geo-tz 建议创建一个基于迭代划分地球为象限和子象限的目录树。这个树在参考库中称为 "data.zip"。
需求
运行库需要GEOS PHP扩展。因此,您应该下载并编译它,运行脚本 bin/compile-geos .sh;然后,名为 "geos.so" 的库将添加到 /usr/lib/php。如您所见,此脚本包含安装一些在安装过程的下一步中必要的php扩展。
一旦您已编译了GEOS PHP扩展,您应该创建geos.ini文件以启用模块并相应地提高性能。
最后,您应该运行composer文件,这样就会安装其他必要的库。
使用方法
有两个主要类
- UpdaterData:脚本,用于下载时区边界数据的最新版本并创建目录树(data.zip)。这可能需要几个小时,所以您可以使用来自node-geo-tz的"data.zip"进行首次测试。否则,您可以运行UpdaterData脚本来获取最新版本并创建目录树。目标文件夹必须具有写入权限
use Tochka\GeoTimeZone\UpdaterData; use Tochka\GeoTimeZone\Indexer; $updater = new UpdaterData('/path/to/base/data/'); $dataPath = $updater->updateData(); $dataRepository = new JsonFileDataRepository($dataPath, '/path/to/index/data/directory'); $indexer = new Indexer($dataRepository); $indexer->index();
- Calculator:提供与特定纬度、经度和时间戳关联的时区名称或本地日期。
use Tochka\GeoTimeZone\TimezoneFinder; use Tochka\GeoTimeZone\DataRepository\JsonFileDataRepository; $latitude = 39.452800; $longitude = -0.347038; $timestamp = 1469387760; $dataRepository = new JsonFileDataRepository('/path/to/base/data/file.json', '/path/to/index/data/'); $timezoneFinder = new TimezoneFinder($dataRepository); // TimeZone name $timeZoneName = $timezoneFinder->findTimezone($latitude, $longitude); //Europe/Madrid