mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - NOAA(アメリカ海洋大気庁)気象観測所一覧!

[ プログラミング ] [ Ruby ]

こんばんは。

NOAA - National Oceanic and Atmospheric Administration(アメリカ海洋大気庁)の所有する世界中の気象観測所一覧についてです。

0. NOAA 気象観測所一覧等について(概要)

  • NOAA が気象観測・予報等を行うのに使用している気象観測所の一覧(“A list of weather stations”)のことである。
  • アメリカは日本とは比べ物にならないくらい航空交通が盛んなため、気象観測所のほとんどが空港・飛行場に設置されている。
    ゆえに、一覧内にある日本の観測所も空港・飛行場ばかり。
  • METAR(定時航空実況気象通報式)対応の観測所は、気象データも公開されている。
    (日本の場合は、航空業務で使用するもので、気象庁のデータとは異なる。)
  • METAR による気象情報は、Linux OS 等の時計(天気)アプレットで表示する気象情報に使用されている。(METAR による気象情報は、一般公開されている)

1. 気象観測所一覧の取得

NOAA の気象観測所一覧は以下のサイトで公開されている。
ページ内の “ADDS Station Table(stations.txt)” リンクがそれである。

2. 気象観測所一覧の項目説明

気象観測所一覧の各項目は以下のようになっている。

項目名 説明
CD 州短縮コード
STATION 測候所名(16文字以内)
ICAO 国際民間航空機関コード(4文字)
IATA 国際航空運送協会(3文字)
SYNOP 地上実況気象通報式番号(5桁)
LAT 緯度(度 分)
LON 経度(度 分)
ELEV 標高(m)
M METAR 発表測候所
- X: 該当
- Z: 廃止
N NEXRAD (WSR-88D) レーダーサイト
- X: 該当
V 航空種別 - V: AIRMET(天気現象に関する注意報)/SIGMET(空域悪天情報)
- A: ARTCC(航空路交通管制センター)
- T: TAF(運航用飛行場予報気象通報式)
- U: T + V
U 高層大気観測種別
- X: レーウィンゾンデ
- W: ウィンドプロファイラ
A 自動化種別 - A: ASOS(自動地上気象観測システム)
- W: AWOS(自動気象観測システム)
- M: Meso(メソ気象学)
- H: Human(人間)
- G: Augmented(拡張)
C センター・オフィス種別
- F: WFO(気象予報事務所)
- R: RFC(河川予報センター)
- C: NCEP(国立環境予測センター)
9(最後から2番目の列) 優先度(区画、作図)?
XX(最後の列) 国コード(ISO 3166 準拠)

3. 日本の ICAO 空港コードについて

ICAO(国際民間航空機関)制定の日本の空港コードは、以下のようになっている。

  • RJ で始まる4文字の英数字。("J" は “Japan” の “J")
    沖縄県内の施設と鹿児島県の与論空港以外の日本国内の施設。
  • RO で始まる4文字の英数字。("O" は “Okinawa” の “O")
    沖縄県内の施設と鹿児島県の与論空港。

4. 国別の観測所数一覧

参考までに、観測所一覧を読み込んで国別に集計してみた。(日本("JP")には “*” を付加している)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  US:3377  CA: 833  BR: 167  DE: 166  GB: 163  FR: 158  AU: 158  IT: 155 *JP: 136  RU: 129
  ZA: 120  ID: 120  AF: 104  AR: 101  KR:  86  IN:  82  MX:  81  TR:  79  CN:  78  IR:  78
  NO:  78  ES:  68  TH:  62  SE:  60  PH:  59  GR:  54  VE:  51  CO:  51  CL:  48  CD:  46
  DZ:  43  IQ:  41  GL:  40  SA:  40  PE:  40  FI:  38  NA:  38  PL:  38  PK:  37  BE:  35
  NL:  34  KE:  33  DK:  32  SD:  31  BO:  31  ZM:  30  MY:  30  PT:  30  EC:  29  MA:  29
  CM:  28  TW:  28  ET:  28  KM:  27  CU:  26  YE:  24  TZ:  24  MM:  24  NZ:  22  NG:  22
  WS:  22  CH:  21  KZ:  21  MZ:  21  EG:  20  CZ:  20  AT:  20  ML:  20  RO:  20  OM:  19
  GH:  19  UA:  19  FJ:  19  PA:  18  HN:  18  TN:  17  CS:  17  VN:  16  BS:  16  SO:  16
  IS:  16  ZW:  16  TD:  15  CI:  15  AO:  15  GT:  15  BW:  15  NE:  14  SZ:  14  UG:  14
  UY:  14  HU:  14  CF:  14  GA:  14  LA:  14  TM:  14  SN:  13  CG:  13  MW:  13  GY:  13
  AE:  13  HR:  12  DO:  12  BA:  12  BD:  12  MR:  12  BF:  11  UZ:  11  IE:  11  SK:  11
  GN:  10  LY:  10  FM:  10  PG:  10  NC:   9  NP:   8  BG:   8  IL:   8  NI:   8  BY:   8
  CR:   8  PY:   8  JO:   8  AZ:   7  SR:   7  CY:   7  VU:   7  VI:   7  TG:   7  SI:   7
  KH:   6  LK:   6  BJ:   6  SV:   6  SY:   6  GE:   6  EE:   6  MD:   5  CV:   5  RW:   5
  LV:   5  VC:   5  AQ:   5  AG:   4  HK:   4  LT:   4  TT:   4  SL:   4  DN:   4  AM:   4
  SG:   4  KV:   4  DJ:   4  TP:   4  HT:   4  KW:   4  SB:   3  SC:   3  KY:   3  KG:   3
  MU:   3  GW:   3  MV:   3  DM:   3  KN:   2  JM:   2  AL:   2  QA:   2  ST:   2  EH:   2
  FK:   2  LC:   2  AN:   2  GD:   2  LR:   2  TJ:   2  LS:   2  BH:   2  MK:   2  GP:   2
  GQ:   2  BB:   2  MT:   2  MS:   1  MQ:   1  MO:   1  AW:   1  GM:   1  LU:   1  BI:   1
  GI:   1  BM:   1  BT:   1  LB:   1  CC:   1  AH:   1  BZ:   1  SH:   1
Count of countries: 198

日本国(外務省)が国として承認しているのは「195カ国」だが、ISO 3166による分類で集計すると「198カ国」になるようだ。
それにしても、アメリカ・カナダの気象観測所(≒空港等)の数は多いですね。

5. 使用した Ruby スクリプト

参考までに、上記の一覧を取得するために作成した Ruby スクリプトは以下のとおり。

noaa_stations.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# ***************************************
# NOAA - 気象観測所一覧取得処理
# ***************************************
require 'open-uri'

class NoaaStations
  FILE = "http://www.aviationweather.gov/static/adds/metars/stations.txt"

  def initialize
    @hash = Hash.new(0)
    @cnt_c = 0
  end

  # メイン処理
  def exec_main
    # ファイル読込&集計
    compile

    # 結果出力
    display
  rescue => e
    puts "[#{e.class}] #{e.message}"
    e.backtrace.each{|trace| puts "\t#{trace}"}
    exit 1
  end

  private

  # ファイル読込&集計
  def compile
    open(FILE) do |f|
      while l = f.gets
        l.chomp!
        next if l =~ /^\!/
        next if l.split(//).size < 80
        country_code = l[(-2)..(-1)]
        @hash[country_code] += 1
      end
    end
  rescue => e
    raise
  end

  # 結果出力
  def display
    @hash.sort_by{|k, v| k}.sort_by{|k, v| -v}.each do |k, v|
      print k == "JP" ? " *" : "  "
      printf("#{k}:%4d", v.to_i)
      puts if (@cnt_c += 1) % 10 == 0
    end
    puts "\nCount of countries: #{@cnt_c}"
  rescue => e
    raise
  end
end

NoaaStations.new.exec_main

何かの役に立つような気のする内容でした。(個人的に目論んでいることはある。実現可能か否かは不明だけど。)

以上。

Comments