Gnome Weather は、Gnome に組み込まれた天気予報アプリで、libgweather ライブラリに依存しています。複数のデータソースを提供していますが、ディストリビューションがこれらのソースをすべて有効にしていない可能性があるため、私たちの偉大な国際 Rock Home Town は見つけることができません。超超はきっと悲しいでしょう。
位置情報のサポートを追加する方法は主に 2 つあります:
-
公式には、location.xml に都市の位置情報を提出することが推奨されています。
ここで直接変更しても効果はありません。この xml ファイルは、コンパイル時にバイナリファイルに変換され、プログラムが読み取る必要があります。
正直言って、彼らのロジックが少し理解できません。明らかにいくつかのサーバーサイドの実装があるのに、なぜこのようなファイルを設定する必要があるのか、そしてファイルの内容は空港(物理的な空港)と関係があるのか、少し不思議です。
-
コードを変更する
カスタムデータソースを追加することで実現できます。たとえば、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)なのかを示しています。
次の配列は緯度,経度
をラジアンで表しています。角度 ×(π/180)の公式を使用します。
2 番目の配列はオプションで、親の位置を表します(代替の場合もあります)。ない場合は@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 アプリは正常に動作しますが、Shell の通知バーにはまだ問題があります。
Shell に統合された天気サービスにはいくつかの論理的な問題があるようで、location.xml で最も近い場所をマッチングしようとします。私の場合、太原に位置づけられてしまいましたが、設定 -> プライバシーで位置情報サービスを無効にすると、石家荘が表示されます。