2017-05-31 91 views
0

我需要近似基于其时区的嵌入式Linux设备的地理位置坐标。这是一个独立的设备,它没有连接到inetrnet,因此只能使用存储在本地文件系统上的数据。有没有办法使用Linux命令行或C++从zone.tab中读取坐标信息

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

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

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

+0

PHP是开源的,您可以随时下载其源代码,并查看'DateTimeZone :: getLocation'函数如何实现它。 –

回答

0

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

+0

感谢 - PHP目前随产品一起提供,我们需要手动将PHP时区与系统时区同步。我们将来会将其从PHP更改为node.js。此功能旨在为不知道自己的经济状况的客户提供后备服务,因为我们的销售部门曾表示,期望他们手动输入他们的位置是不合理的。他们目前进入我们用来提供客户可以优化的默认经纬度的时区。也许暂时我会从C++应用程序中调用一个php脚本来返回经纬度。 – enyal71

相关问题