【问题标题】:Is there a way to read the coordinate information from zone.tab using Linux command line or C++有没有办法使用 Linux 命令行或 C++ 从 zone.tab 读取坐标信息
【发布时间】:2017-05-31 01:32:04
【问题描述】:

我需要根据其时区估算基于 soley 的嵌入式 linux 设备的地理位置坐标。这是一个独立设备,未连接到 inetrnet,因此只能使用存储在本地文件系统上的数据。

zone.tab 数据库存储每个时区主要城市的坐标信息(纬度和经度),但是我还没有找到使用 c++ 读取这些信息的简单界面。

PHP 提供了一个接口DateTimeZone::getLocation 来访问这些信息。是否有 C++ 或 Linux 系统接口可以做同样的事情?

显然我可以编写自己的接口来读取文件并转换数据,但我更愿意实现更标准化的解决方案。

【问题讨论】:

  • PHP 是开源的,你可以随时下载它的源代码,看看DateTimeZone::getLocation 函数是如何实现的。

标签: c++ linux geolocation timezone


【解决方案1】:

在 Linux 系统上,zone.tab 文件部署到 /usr/share/zoneinfotzselect 等程序直接使用它。它不通过通用的操作系统级 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 中。

【讨论】:

  • 感谢 - PHP 目前随产品一起提供,我们确实需要手动将 PHP 时区同步到系统时区。将来我们会将其从 PHP 更改为 node.js。此功能是为不知道他们的纬度/经度的客户提供后备,因为我们的销售部门表示期望他们手动输入他们的位置是不合理的。他们目前输入一个时区,我们将使用该时区来提供客户可以改进的默认纬度/经度。也许暂时我会从 C++ 应用程序中调用一个 php 脚本,它返回纬度/经度。
猜你喜欢
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2019-08-31
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多