Gnome Weather 是 Gnome 內建的天氣預報應用程式,底層依賴於 libgweather 函式庫,它提供了多個資料來源,但不知道是不是發行版不會全部啟用這些來源的原因,我們偉大的國際 Rock Home Town 搜不到,超超知道了肯定不開心。
為它添加位置資訊支援的方式主要有兩種:
-
官方推薦 以 location.xml 提交城市的位置資訊
這裡直接在本地改是沒用的,這個 xml 檔案在編譯時轉換為 bin 檔案程式才會讀取
說實話我有點搞不懂他的邏輯,明明是有好幾個伺服器端實現的,為啥非要配置這麼個檔案,而且檔案內容多少與機場有關(物理機場)
-
改程式碼
可以給它自訂資料來源實現,比如添加個 weather.cma.cn 的實現
那有沒有適合我等自由的平民的辦法呢?答案是有的
gsettings get org.gnome.shell.weather locations
我這裡會返回這麼一串,可能是之前查過的資料快取
[<(uint32 2, <('Beijing', 'ZBAA', false, [(0.69696814214530467, 2.0295270260429752)], @a(dd) [])>)>, <(uint32 2, <('Beijing', 'ZBAA', true, [(0.69696814214530467, 2.0295270260429752)], [(0.69689057971334611, 2.0313596217575696)])>)>, <(uint32 2, <('Shanghai', 'ZSSS', true, [(0.54396095602266359, 2.1194114825206833)], [(0.54493057368860898, 2.1198429802716539)])>)>, <(uint32 2, <('Ashiya Air Base', 'RJFA', false, [(0.59137572239964786, 2.2802726677305918)], @a(dd) [])>)>]
首先外面肯定是個陣列,通過翻程式碼我們不難找到
如果把字串美化下是這樣的
<(
uint32 2,
<(
'Beijing',
'ZBAA',
false,
[
(0.69696814214530467, 2.0295270260429752)
],
@a(dd) []
)>
)>
對照上面的程式碼
uint32 2
表示版本,就是 2
Beijing
城市名
ZBAA
機場或航站樓編碼
false
這條資料是城市 (true) 還是機場 (false)
下面這個陣列表示 緯度,經度
,以弧度表示,公式 角度 * (pi /180)
第二個陣列可選,表示父位置(有可能是備選用),如果沒有就傳 @a(dd) []
比如石家莊市 橋西區 緯經度為 38.04139, 114.47861
那麼就可以得到
<(uint32 2, <('Shijiazhuang', '', true, [(0.663947508, 1.998028668)], @a(dd) [])>)>
分別設置
gsettings set org.gnome.shell.weather locations "[拼接後的內容]"
gsettings set org.gnome.Weather locations "[拼接後的內容]"
這樣 Gnome Weather App 裡 就好了,但是 Shell 的通知欄裡顯示的還是有問題。
Shell 裡面集成的天氣服務好像有些邏輯問題,它會匹配 location.xml 中最近的地方,我這裡被定位到太原去了,關閉設置 -> 隱私中的定位服務後,也就顯示石家莊了。