[本文へ]


日の出日の入り計算

ひとことお願いします

任意地点,任意の日付における,日の出・日の入り等を計算するサービスです.

Webサービスは,サービス単体ではほとんど使い物にはなりません.みなさまが開発されるアプリケーションの一部機能について,インターネットを介してお手伝いするものです.

サービスURL

このサービスのURLは http://www.finds.jp/ws/movesun.phpです.

パラメータ

Toy Service共通仕様もあわせてご覧下さい.

jsonp (共通)
応答文書をJSONP形式にする場合に指定します.値を指定しない場合はJSON形式を返却します.
json (共通)
応答文書をJSON形式にする場合に指定します.どのような値を指定しても,また値を指定しなくてもかまいません.
php (共通)
応答文書をPHPシリアル化形式にする場合に指定します.どのような値を指定しても,また値を指定しなくてもかまいません.
y
計算対象日付の年(西暦)
m
計算対象日付の月(1から12まで)
d
計算対象日付の日(1から月末まで)
lat
計算対象地点の緯度(単位は十進の度)
lon
計算対象地点の経度(単位は十進の度)
tz
日時のタイムゾーン(単位は時で-12.0から12.0)
e
計算対象地点の標高[m]

応答文書

ルート要素

本サービスのルート要素は movesun です.

応答ステータス

コード意味
200成功した場合 (共通)
400パラメータ等に誤りがあって失敗した場合 (共通)
500サーバ側で問題があって失敗した場合 (共通)

result要素

Toy Service共通仕様もあわせてご覧下さい.

result要素は次に示す子要素を持っています.

<first>
子要素に対象日付の0時0分における状態を持ちます.
<type>
子要素に状態を示す文字列を持ちます.typeおよびtypecodeについてをご覧ください.
<typecode>
子要素にtype要素の子要素に対応したコードを持ちます.typeおよびtypecodeについてをご覧ください.
<event> (複数)
子要素に,状態が変化するイベントを発生順に持ちます.この要素は複数存在する場合があり,また存在しない場合もあります.
<type>
子要素に状態を示す文字列を持ちます.typeおよびtypecodeについてをご覧ください.
<boundary>
子要素に状態の境界(開始,終了など)を示す文字列を持ちます.boundaryおよびboundarycodeについてをご覧ください.
<typecode>
子要素にtype要素の子要素に対応したコードを持ちます.typeおよびtypecodeについてをご覧ください.
<boundarycode>
子要素にboundary要素の子要素に対応したコードを持ちます.boundaryおよびboundarycodeについてをご覧ください.
<azimuth>
子要素にこのイベントが発生した際の方位角(単位は十進の度で,小数第1位まで)を持ちます.
<altitude>
子要素にこのイベントが発生した際の太陽高度(単位は十進の度で,小数第1位まで)を持ちます.
<time>
子要素に,このイベントが発生した日時を持ちます(分まで).

typeおよびtypecodeについて

応答文書で出てくる type は,その時の状態を示す文字列で,typecode は,typeに対応した整数です.対応関係は次の通りです.

状態 type (文字列) typecode (整数)
夜間(薄明時間を除く) night 0
天文薄明 astronomical 1
航海薄明 naval 2
市民薄明 civil 3
日中(日の出から日の入りまで) daytime 4
南中 culmination 5
  • 天文薄明,航海薄明,市民薄明については「薄明について」をご覧ください.
  • このサービスでは太陽高度が極大になれば南中としています.このため,極夜(きょくや-1日中日が出ない)であっても,南中のイベントが現れます.

boundaryおよびboundarycodeについて

応答文書に出てくるboundaryは,状態に開始と終了がある場合と,ある時点でのみ発生する場合とで,分かれます.

開始と終了がある場合
ある時点から別の時点まで状態が持続する場合(薄明,日中があたります)については開始または終了の区別を示します.boundaryとboundarycodeは次のような対応関係を持ちます.
boundary(文字列) boundarycode(整数) 意味
start 1 その状態が開始する
end -1 その状態が終了する
ある時点でのみ発生する場合
ある時点での状態が発生して,その状態が持続しない場合(南中があたります)については,常に boundary は "occurred", boundarycode は 0 になります.

日出時刻を取り出す場合は,type="daytime", boundary="start" となる要素を,日没時刻を取り出す場合は,type="daytime", boundary="end" となる要素を,それぞれ取り出して下さい.

また,南中時刻を取り出す場合は,type="culmination" (, boundary="occurred") の要素を取り出して下さい.

実行例

XML文書,またはJavaScriptやPHPで使用される表現で表示されます.人が見たら読みにくいものと感じるかもしれません.あらかじめご了承ください.

北緯35.6544度 東経139.7447度 標高 0 (地図) における 2000年5月5日 の計算
北緯70.0度 東経135.5度 標高 0 における 2000年7月5日 の計算 (白夜になります)
北緯80.0度 東経135.5度 標高 0 における 2000年12月20日 の計算 (極夜になります)

補遺

薄明について

薄明(はくめい)は,日の出直前または日の入り直後の,薄明るい時を指します.

一般に薄明には3種類あります.

市民薄明 (Civil twilight)
日の入り後で,十分に屋外活動ができる明るさがある時
航海薄明 (Nautical twilight)
海面と空との境が見分けられる程度の明るさがある時
天文薄明 (Astronomical twilight)
肉眼で6等級星まで見える程度まで暗くなる時

なお,日の出・日の入りの判定は太陽の上端で行いますが,薄明は太陽の中心点で行います.

年まで指定しなければならない理由

月・日で太陽の運行が確定するはずなので,年まで指定する必要が無いのではないかと思われることでしょう.

しかし,本サービスで使用している時刻系は一般の時刻系と違うために,年を指定する必要があります.

協定世界時と地球時

秒間隔を正確にとるため,国際的に数百の原子時計を使って秒間隔を厳しく管理しています. この秒体系をSI秒といい,SI秒をそのまま使ったものを国際原子時(TAI)といいます.

一般的には協定世界時(UTC)が使われています.これは,秒間隔はSI秒を使用して正確さを確保していますが, 社会生活上は地球の自転にあわせなければなりません(たとえば,午前8時に南中になるのは困ります). 自転速度は不規則に変化するので,秒間隔が非常に精密なSI秒とは逆にずれを生じます.

このため,自転に基づく時刻とずれが1秒以上になった時に,1秒を挿入したり削除したりして補正しています. この補正は「うるう秒」と言われます.

本サービスでは地球時(TT)を使用しています.これは,TAIもとにしていて TT=TAI+32.184[秒] の関係があります. しかし一般的にはUTCをもとにした時刻が使われていますので,UTCからTTに変換する作業が必要となります.この際に年の指定が必要となります.

年指定はいちおう必要

協定世界時と地球時の差は,2009年時点で34秒あります.本サービスは分単位ですが,1分程度のずれが生じるおそれがあります.

このため,本サービスでは年も指定して,UTCからTTに変換しないと,計算結果がずれます.

ただ,前述の通り2001年1月1日を計算しようとして間違えて2002年と指定したとしても,計算結果に差は出てきませんので,多少のずれがあっても構いません.

協定世界時と地球時の差を求める

本サービスで行っている協定世界時と地球時の差を求める方法は次の通りです.

  • 1958年より前は一律に0にしています.
  • 1958年から1972年より前までは公表されているデータを使っていますが,本来はオフセット方式のところを,うるう秒方式のように扱っています.
  • 1972年から2009年までは値は公表されているので,そのまま使っています.
  • 2013年より後については予測がつかないので,1958年以降のUTC-TTデータを使った回帰式を作り,この式によって計算します.この回帰式の精度は悪いです.

12時ちょうどに南中時刻とならない

正午は,太陽が最も高い高度になる(南中)時刻であるとされていますが, 観測者のいる地点の経度で前後しますし,季節によっても前後します.

位置(経度)による差

経度の影響については,予測対象地点が日本標準子午線より東にあると,日出・南中・日没の時刻が全体的に前倒しになり,西にあるとその逆になります.

季節による差

季節による変動は,公転軌道が楕円であることと,自転軸が傾いているため赤道面に投影した黄道が楕円になること,の二点によります.

仮に自転をせずに公転していると考えると, 1回の公転で太陽が逆方向に1周するので, 地球から見た太陽の回転量は,自転による回転量から公転の影響を加味して,(自転による回転量) - (その日の公転量)となります. その日の公転量は,円軌道なら一定なのですが, 楕円軌道では公転速度は均一ではありません(ケプラーの第二法則)ので, 1日の公転量は日ごとに変化します.

その変化が日ごとに蓄積して,南中時刻と正午とにずれが出ます. ただし,これは1年でプラスマイナスゼロになります.

関連情報

長沢工 著 「日の出・日の入りの計算」 (地人書館)
本サービスは,ほとんどこの書籍の引き写しです.基本的な考え方から追っていけます.
日の出と日の入りの計算
東海大学の星岳彦教授によるJavaScriptコードです.参考図書は同じ「日の出・日の入りの計算」です.
日の出・日の入等表示
Google Maps 上でクリックした地点の日の出・日の入り時刻を表示します.


© 2011 National Agriculture and Food Research Organization | 農研機構トップページ

[先頭へ]