PHPで日出没・月出没・月齢・潮を計算(Windowsアプリ版)

(1/1)
PHPで日出没・月出没・月齢・潮を計算」では、日の出・日の入り・月の出・月の入りの時刻、月齢、潮の大小などを計算し、3ヶ月分を表示するPHPプログラムを作った。今回は、このプログラムをWindowsアプリに移植する。

サンプル・プログラム

PHPで日出没・月出没・月齢・潮を計算
各種暦計算、太陽や月の位置計算は、クラス pahooCalendar としてファイル "pahooCalendar" に分離している。これは、「PHPで日出没・月出没・月齢・潮を計算」で作ったものと共通である。

解説:観測地点の緯度・経度

0064:     //予報値地点データファイル
0065:     $path = 'ini';
0066:     if (! file_exists(FILE_SPOTS)) {
0067:         $data = file_get_contents(FILE_SPOTS);
0068:         @mkdir($path);
0069:         $outfp = fopen(FILE_SPOTS, 'wb');
0070:         fwrite($outfp$data);
0071:         fclose($outfp);
0072:     }

0194: /**
0195:  * 予報地点情報を読み込む
0196:  * @return int地点数
0197: */
0198: function readSpots() {
0199:     global $Items_spots$Items_pref;
0200: 
0201:     //XML読み込み
0202:     $options = array('parseAttributes' => TRUE);
0203:     $xml = new XML_Unserializer($options);
0204:     $xml_data = @file_get_contents(FILE_SPOTS);
0205:     $xml->unserialize($xml_dataFALSE);
0206:     $Items_spots = $xml->getUnserializedData();
0207: 
0208:     //予報地点情報から都道府県情報を取り出す
0209:     $i = 1;
0210:     foreach ($Items_spots['spot'] as $key=>$item) {
0211:         $arr = preg_split('/[ ]+/', $item['query']);
0212:         if (isset($arr[0])) {
0213:             $pref = $arr[0];
0214:             if (array_search(internal2sjis($pref), $Items_pref) == FALSE) {
0215:                 $Items_pref[$i] = internal2sjis($pref);
0216:                 $i++;
0217:             }
0218:         }
0219:     }
0220: 
0221:     return count($Items_spots);
0222: }

PHPで日出没・月出没・月齢・潮を計算」では、観測地点(日の出・日の入りなどを計算する地点)の座標(緯度・経度)を手入力させていたが、今回は、コンボボックスから選択できるようにする。
観測地点のリストは、「PHPで地図で指定した場所の天気予報を求める」で作成したXML形式ファイル "FILE_SPOTS" をそのまま利用する。

まず、mycalendarwin.exe の中にパッケージングされたXML形式ファイル "FILE_SPOTS" を、ユーザー関数 [#initialize:initialize] の中で、アイコンなどと同様に、ローカルドライブに展開する。

展開したファイルを、ユーザー関数 [#readSpots:readSpots] を使って配列に読み込む。
XMLのパーシングには、いままで同様、PEAR::XML_Unserializer を利用する。そのままではWinBinderに通らないので、若干、手を加えている。

コンボボックスで選択した観測地点は、「PHPで Windows用週間天気予報プログラムを作る」と同じ方法で、ローカルドライブに保存しておき、次回からはその設定値を読み込むようにしてある。

コンパイル

コマンドラインから "bamcompile mycalendarwin.bcp" を実行する。コンパイルが完了すると、"mycalendarwin.exe" が生成される。"mycalendarwin.exe" は、DLL不要で、単独で動作するEXEプログラムである。

参考サイト

(この項おわり)
header