本日  昨日
 
03/28(Thu) 17:22

o 日月出没計算
★「おしらせ」★
「祝日法」改正等に伴うカレンダー関連の変更については、こちらをご参照ください。
★「おしらせ」★
「sunmoon.jsのクッキー名の変更」の説明が抜けてました。今のままだと地域の設定変更ができないので後述の解説記事を参考に、クッキー名○○○_koyomiの変更をお願いいたします。(2000/12/12)


このスクリプトは、長沢 工氏著「日の出・日の入りの計算〜天体の出没時刻の求め方」(地人書館)の計算式および定数を利用しています。平易な説明と詳しい手順を解説してくださった長沢 工氏に感謝いたします。

機能
単独でもご利用頂けるよう作成されてますが、今日のこよみと組み合わせて使うと更に便利です。
右のサンプルは単独の場合と今日のこよみと組み合わせた表示例です。単独の場合は出没計算のみが表示されます。

  1. 日の出/日の入りの時刻・方位角および日の南中時刻・高度
  2. 月の出/月の入りの時刻・方位角および月の南中時刻・高度
  3. 任意地点・年月日の出没計算
  4. 表示 出没のみ、出没+南中、出没+南中+方位角の選択が可能
計算手順
  1. 観測地の経緯度(lng,lat)とし、出没時刻 Dを仮定する
  2. 時刻Dに対する太陽の赤経、赤緯(α,δ)、距離(r)、恒星時(Θ)を計算する(日出没)
    時刻Dに対する月の赤経、赤緯(α,δ)、視差(Π)、恒星時(Θ)を計算する(月出没)
  3. 出没高度(k)を計算する
  4. 出没点の時角(tk)を計算する。tkは出のときマイナス、入のときプラスにとる
  5. 天体の時角(t)を計算し、時角の差dt=tk-tを計算する
  6. 補正値dD=dt/ の計算。太陽(=360°),月(=347.8°),惑星/恒星(=361°)
  7. 新しい仮定値をD=D+dDとしてこの計算を繰り返す。収束条件は|dD|<0.00005
    収束時のD が出没時刻になる

設置法
プログラムをダウンロードします。
プログラムの名前を[左]クリックするとダウンロードを始めます。downcnt.cgiという名前で保存されますので、sunmoon.lzhと名前を変更して保存します。これをLhasaなどの解凍ソフトで解凍します。
  • 日月出没計算--------------- sunmoon.lzh (約10KB)

ダウンロードしたファイルを解凍し、編集します。
  1. ファイルの構成と内容
    sunmoon.lzhを解凍すると以下のファイルが得られます。
    1. sunmoon.js(日月出没計算スクリプト)
    2. sunmoon.html(任意地点・年月日の出没計算用html文)
    3. cookie.js(クッキー処理スクリプト)

    (注)当工作室の他のスクリプトをご利用で、すでにcookie.jsを設置済みの方は、現在お使いのcookie.jsがそのまま使えます。

  2. sunmoon.js
    • 558行目: DeleteCookie("〇〇〇_koyomi");の○○○_koyomiを後述のindex.htmの中であなたが定義したクッキー名と同じ名前にします。(参考)私はtkiku_koyomiにしています。
    • 567行目: cookie_name="○○○_koyomi";の○○○_koyomiを上と同じようにあなたが定義したクッキー名と同じ名前にします。

  3. sunmoon.html
    65行目を必ず変更します。61、62行目(ユーザ初期設定の部分)をあなたの都市や表示したい内容に合わせて変更してください。

    • 61行目: var idx = 19; 都市選択フォームのデフォルトの都市番号です。最初は横浜(番号19)に設定されてますのであなたのお住まいの都市などに変更すると良いでしょう。都市番号の決め方はsunmoon.jsファイルの最後にある「日月出没計算の都市(経緯度/標高)選択」の中に、都市を定義した配列cityがあります。該当する都市の順番(配列番号)をカウントします。番号は0から始まります。

    • 62行目: var disp = 2; で表示項目の選択をします。0=出没のみ、1=出没+南中、2=出没+南中+方位角になります。

    • 65行目: get_data = GetCookie("〇〇〇_koyomi");の○○○_koyomiを上と同じようにあなたが定義したクッキー名と同じ名前にします。

スポンサーリンク


単独で日月出没計算を使用する場合のhtml文
index.htmに表示する例で以下説明します。

(1)下のスクリプトをコピーし、index.htmの<HEAD>と</HEAD>のなかに貼りつけます。
<script language="JavaScript" src="sunmoon.js"></script> <script language="JavaScript" src="cookie.js"></script> <STYLE type="text/css"> <!-- A {text-decoration:none;font-size:9pt} TD {font-size:9pt} //--> </STYLE>

(2)「日月出没計算」を表示したいindex.htmの場所(<BODY>と</BODY>のなか)に下の文を記述します。

変更箇所

  1. ユーザ初期設定のidx、dispを上のsunmoon.htmlの解説を参考に必要なら変更します
  2. get_data = GetCookie("○○○_koyomi");の○○○_koyomiをあなた固有の名前に必ず変更します。(参考)私はtkiku_koyomiにしています。
<script language="JavaScript"> <!-- // ユーザ初期設定 var idx = 19; //初期値の都市インデックス番号(1=稚内、2=旭川・・19=横浜・・) var disp = 2; //表示 出没のみ(0)、出没+南中(1)、出没+南中+方位角(2) // こよみ用都市/緯経度選択クッキー処理 var str = new Array(); get_data = GetCookie("○○○_koyomi"); if (get_data == null) { //クッキーが無い時は初期値をセット c_city = city[idx]; c_tokei = tokei[idx]; c_hokui = hokui[idx]; c_hyoko = hyoko[idx]; } else { //クッキーがあれば値を得る str = get_data.split(","); c_city = str[0]; c_tokei = str[1]; c_hokui = str[2]; c_hyoko = str[3]; } lng = dofun2num(c_tokei); // 緯経度の小数点変換 lat = dofun2num(c_hokui); hei = c_hyoko; // 時刻取得 dt=new Date(); yy=dt.getYear(); if (yy < 2000) yy = yy + 1900; mm=dt.getMonth()+1; dd=dt.getDate(); ww=dt.getDay(); wk=new Array("<font color=red>日</font>","月","火","水","木","金","<font color=blue>土</font>"); // 表示ここから document.write("<table bgcolor=#00deab cellspacing=0 cellpadding=0 border=0 bordercolor=#a0a0a0>"); // タイトル表示 document.write('<form>'); document.write("<tr><td align=center>日月出没計算"); // こよみ用都市選択フォーム表示 document.write('<select onChange="citySelect(this.form, this)">'); for (i = 0; i < city.length; i++) { if(city[i] == c_city) { document.write("<option value='"+city[i]+"' selected>"+city[i]); } else { document.write("<option value='"+city[i]+"'>"+city[i]); } } document.write('</select>'); document.write("</td></tr><tr><td align=center><font color=black>"); // 日付表示 document.write(yy +"年"+ mm +"月"+ dd +"日("+ wk[ww] +")"); // 日・月出没計算 SunMoon(yy,mm,dd,lng,lat,hei,disp); // 使い方・出没計算ボタン表示 document.write('<input style="border:1 solid gray;font-size:9pt;background:white;color:black"'); document.write(' type=button value="使い方"'); document.write(' onClick=\'alert("「' + city[idx]); document.write('」をあなたのお住まい近くの都市に変更してください。'); document.write('あなたのお住まいの日の出・日の入りを表\示します。'); document.write('「出没計算」では任意地点/年月日の詳しい情報を見れます。");\'>'); document.write("<input style='border:1 solid gray;font-size:9pt;background:white;color:black'"); document.write(" type=button value=出没計算"); document.write(" onClick='window.open(\"./sunmoon.html\",\"\",\"width=162,height=250\")'><br>"); // 作者表示 document.write('<div align=right><a href="http://kikuchisan.net/" target="_blank">'); document.write('<i>SunMoon by kikuchisan</i></a></div>'); document.write("</font></td></tr></table>"); document.write('</form>'); //--> </script>


今日のこよみに日月出没計算を組み込む場合のhtml文
index.htmに表示する例で以下説明します。今日のこよみをまだ設置してない方はこちらから設置してください。

(1)下のスクリプトをコピーし、index.htmの<HEAD>と</HEAD>のなかに貼りつけます。
(今日のこよみ設置済みの方は全体を置き換えます。)
<script language="JavaScript" src="qreki.js"></script> <script language="JavaScript" src="koyomi.js"></script> <script language="JavaScript" src="calendar.js"></script> <script language="JavaScript" src="sunmoon.js"></script> <script language="JavaScript" src="cookie.js"></script> <STYLE type="text/css"> <!-- A {text-decoration:none;font-size:9pt} TD {font-size:9pt} //--> </STYLE>

(2)「今日のこよみ」を表示したいindex.htmの場所(<BODY>と</BODY>のなか)に下の文を記述します。
(今日のこよみ設置済みの方は全体を置き換えます。)

変更箇所

  1. ユーザ初期設定のmcont、idx、dispを上のsunmoon.htmlの解説を参考に必要なら変更します
    mcontは月齢表示をその日の正午の月齢にするか、現在時刻の月齢にするかの選択です。「理科年表」などは正午月齢を用いてます。好みによって使い分けてください。
  2. get_data = GetCookie("○○○_koyomi");の○○○_koyomiをあなた固有の名前に必ず変更します。(参考)私はtkiku_koyomiにしています。
<script language="JavaScript"> <!-- // ユーザ初期設定 var mcont = 1; //正午月齢(1)、現在時刻月齢(0)の指定 var idx = 19; //初期値の都市インデックス番号(1=稚内、2=旭川・・19=横浜・・) var disp = 2; //表示 出没のみ(0)、出没+南中(1)、出没+南中+方位角(2) // こよみ用都市/緯経度選択クッキー処理 var str = new Array(); get_data = GetCookie("○○○_koyomi"); if (get_data == null) { //クッキーが無い時は初期値をセット c_city = city[idx]; c_tokei = tokei[idx]; c_hokui = hokui[idx]; c_hyoko = hyoko[idx]; } else { //クッキーがあれば値を得る str = get_data.split(","); c_city = str[0]; c_tokei = str[1]; c_hokui = str[2]; c_hyoko = str[3]; } lng = dofun2num(c_tokei); // 緯経度の小数点変換 lat = dofun2num(c_hokui); hei = c_hyoko; // 時刻取得 dt=new Date(); yy=dt.getYear(); if (yy < 2000) yy = yy + 1900; mm=dt.getMonth()+1; dd=dt.getDate(); ww=dt.getDay(); wk=new Array("<font color=red>日</font>","月","火","水","木","金","<font color=blue>土</font>"); // 表示ここから document.write("<table bgcolor=white cellspacing=0 cellpadding=0 border=0 bordercolor=#a0a0a0>"); // タイトル表示 document.write('<form>'); document.write("<tr><td bgcolor=darkcyan align=center><font color=white>今日のこよみ</font>"); // こよみ用都市選択フォーム表示 document.write('<select onChange="citySelect(this.form, this)">'); for (i = 0; i < city.length; i++) { if(city[i] == c_city) { document.write("<option value='"+city[i]+"' selected>"+city[i]); } else { document.write("<option value='"+city[i]+"'>"+city[i]); } } document.write('</select>'); document.write("</td></tr><tr><td>"); // 何の日カレンダー表示 koyomi(yy+"/"+mm); document.write("</td></tr><tr><td align=center><font color=black>"); // 日付表示 document.write(yy +"年"+ mm +"月"+ dd +"日("+ wk[ww] +")"); // 六曜表示 var kr = new kyureki(dt.getJD()); document.write("<font color=blue>"+ kr.rokuyo+"</font><br>"); // 和暦表示 document.writeln("<font color=blue>"+ getGengou(yy) +"("+ get10Kan(yy)); document.writeln(get12Shi(yy) +")"+ getWamei(mm) +"</font><br>"); // 祝日表示 kyuflag = 0; for (j=0; j<kyuDays.length; j++) { if (mm == kyuDays[j].substring(0,2)) { kyuflag = 1; break; } } if (kyuflag == 1) { document.write('<table border=0 bordercolor=#c0c0c0 cellspacing=0><tr><td nowrap>'); document.write("<font color=blue>祝日</font>"); document.write('</td><td nowrap>'); for (j=0; j<kyuDays.length; j++) { if (mm == kyuDays[j].substring(0,2)) { if (dd == kyuDays[j].substring(2,4)) {hcol='red';} else {hcol='brown';} document.write("<font color="+ hcol +">"+kyuDayn[j]+"</font>("+kyuDays[j].substring(2,4)*1+"日)<br>"); } } document.write('</td></tr></table>'); } // 24節気表示 for (j=1; j<=monthDays[mm-1]; j++){ sekki = get24Sekki(yy,mm,j); if (j == dd) { scol = 'red'; } else { scol = 'brown'; } if (sekki != '') { document.write("<font color="+ scol +">"+ sekki +"</font>("+ j +"日) "); } } document.write("<br>"); // 旧暦・潮汐表示 document.write('旧暦'); if (kr.uruu) { document.write('<font color=blue>閏</font>'); } document.write("<font color=blue>"+kr.month +'月'+ kr.day +'日</font>'); document.write(' 潮汐<font color=blue>'+getTide(kr.moon)+'</font><br>'); // 日・月出没計算 SunMoon(yy,mm,dd,lng,lat,hei,disp); // 月齢表示 kr.moon0 = kr.day-1; document.write('<img src=./moon/'+getMimg(kr.moon0)+' width=17 height=17>'); document.write('<font color=blue>'+getMname(kr.moon0)+' </font>'); document.write(' 月齢<font color=blue>'+kr.moon.toFixed(1)+'</font><br>'); // 使い方・出没計算ボタン表示 document.write('<input style="border:1 solid gray;font-size:9pt;background:white;color:black"'); document.write(' type=button value="使い方"'); document.write(' onClick=\'alert("「' + city[idx]); document.write('」をあなたのお住まい近くの都市に変更してください。'); document.write('あなたのお住まいの日の出・日の入りを表\示します。'); document.write('「出没計算」では任意地点/年月日の詳しい情報を見れます。");\'>'); document.write("<input style='border:1 solid gray;font-size:9pt;background:white;color:black'"); document.write(" type=button value=出没計算"); document.write(" onClick='window.open(\"./sunmoon.html\",\"\",\"width=162,height=250\")'><br>"); // 作者表示 document.write('<div align=right><a href="http://kikuchisan.net/" target="_blank">'); document.write('<i>Koyomi by kikuchisan</i></a></div>'); document.write("</font></td></tr></table>"); document.write('</form>'); //--> </script>


サーバに転送します。

  1. index.htm、sunmoon.js、sunmoon.html、cookie.jsをアスキーモードでサーバ側に転送します。単独利用の場合は、index.htm、sunmoon.js、sunmoon.html、cookie.jsのみで機能します。今日のこよみに組み込む場合は「(参考)今日のこよみの構成」以下のファイルが必要です。

  2. ファイルの構成
    index.htm
    sunmoon.js
    sunmoon.html
    cookie.js
    (参考)今日のこよみの構成
    qreki.js
    koyomi.js
    calendar.js
    moon
        |--------- moon00.gif
        |--------- moon01.gif
        |---------    |
        |--------- moon29.gif
    
    birthday(777)
        |--------- birthday.cgi (755)
        |--------- birthday.pl (755)
        |--------- birthday.dat (666)
        |--------- birthday.gif
        |--------- mail.gif
        |--------- home.gif
        |--------- heart.gif
        |--------- jcode.pl (755)
        |--------- sayhappy_sp.cgi (755)
    whatday(777)
        |--------- birthday.txt
        |--------- monthly.txt
        |--------- event.txt
        |--------- history.txt
    

さぁ、これで完成です。index.htmを表示して見ましょう。日月出没計算が表示されれば完成です。
観測地点を追加するには(改造法)
このスクリプトには、都道府県庁所在地を中心に代表的な都市や富士山頂が組み込まれていますが、新たに観測地点を追加することが可能です。あなたのお住まいの都市などを追加登録するといいでしょう。追加には以下の情報が必要になります。
  1. 都市の場合はその経度、緯度
  2. 山の場合はその経度、緯度および標高
追加方法
sunmoon.jsファイルの最後にある「日月出没計算の都市(経緯度/標高)選択」の中に、都市名、その都市の経度、緯度、標高を定義した配列city、tokei、hokui、hyokoがあります。この配列の末尾に新観測地点のデータを追加していきます。
経度、緯度は○○°○○′を○○:○○形式で、標高はメートルで記述します。都市名、経度、緯度、標高が同じ配列位置になるよう注意してください。

(注)1.標準時差9時間で計算していますので時差が異なる地点は追加できません。
     また、同じ時差でも日本から極端に離れた地点の結果検証はしてませんのでご注意ください。
   2.都市の追加は配列の途中でも可能です。この場合は、配列city、tokei、hokui、hyokoはセットに
     なってますので配列位置と配列番号19以前に挿入する時はデフォルトの都市番号に注意してください。


 
 
©1997- Kikuchisan's workshop All rights reserved //

スポンサーリンク

関連コンテンツ