我需要根据嵌入式 Linux 设备的时区来估算其地理位置坐标。这是一个未连接到 inetrnet 的独立设备,因此只能使用存储在本地文件系统上的数据。
zone.tab数据库存储每个时区主要城市的坐标信息(纬度和经度),但是我没有找到一个简单的界面来使用 C++ 读取这些信息。
PHP 提供接口(interface)DateTimeZone::getLocation访问此信息。是否有 C++ 或 Linux 系统接口(interface)来做同样的事情?
显然我可以编写自己的接口(interface)来读取文件和转换数据,但我更愿意实现更标准化的解决方案。
最佳答案
在Linux系统上,zone.tab
文件被部署到/usr/share/zoneinfo
,tzselect
等程序直接使用它.它不通过通用操作系统级 API 公开。
PHP 不使用此信息。它有自己的 tzdata 编译器,并在 timezonedb 包中包含区域信息(包括 zone.tab)——它嵌入在每个 PHP 版本中,或 can be downloaded separately from PECL .除非您的系统已经随附了 PHP,否则您可能不想从这里获取它。
最终,如果您的计算机上没有/usr/share/zoneinfo/zone.tab
,而您需要访问它,那么您应该从the tzdata distribution 获取它。直接。
但说真的 - 根据设备用户为时区选择的内容获取设备的纬度/经度只会自找麻烦。请记住,时区的地理区域可以从其引用点跨越数百或数千英里。此外,还有许多没有固定位置引用的行政区域(例如 Etc/GMT+2
)。并非每个有效时区都在 zone.tab 中。
关于c++ - 有没有办法使用 Linux 命令行或 C++ 从 zone.tab 读取坐标信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44274266/