2017-05-31 86 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

相關問題