地震マップを作ってみたよ
ちょっと最近地震が多いので、地震マップを作ってみました。
http://moeten.info/flex/20080614_jisinMap/bin-release/main.html
地震のAPIが「EPSP(partA) 地震感知情報APIにおける開発者向け情報」で公開されていますので、それをPHPでゲットしてFlexが扱いやすいXMLに整形してあげます。
PHPなソースコードはこちら
<?php //日本測地系⇒世界測地系 function tokyo2world( $pos_n , $pos_e ){ $posN_w = $pos_n - 0.00010695*$pos_n + 0.000017464*$pos_e + 0.0046017; $posE_w = $pos_e - 0.000046038*$pos_n - 0.000083043*$pos_e + 0.010040; $wgps['lat'] = $posN_w; $wgps['lng'] = $posE_w; return $wgps; } if( $_GET['mdate'] != "" ){ $todayArr = explode( "/" , $_GET['mdate'] ); if( $todayArr[0] < 10 ){ $todayArr[0] = "0{$todayArr[0]}"; } if( $todayArr[1] < 10 ){ $todayArr[1] = "0{$todayArr[1]}"; } $today = "{$todayArr[0]}/{$todayArr[1]}"; }else{ $today = date( 'm/d' ); } $url = "http://p2pquake.ddo.jp/p2pquake/api_userquake.pl?date={$today}"; $file = file( $url ); $i=0; foreach( $file as $line => $val ){ $lineArr = explode( "/" , $val ); if( count( $lineArr ) > 2 ){ if( preg_match('/QUA/' , $lineArr[0] ) && $lineArr[8] != "" ){ $mtimeArr = explode(",",$lineArr[0]); $mtime = $mtimeArr[0]; $lat = str_replace( "N" , "" , $lineArr['8'] ); $lng = str_replace( "E" , "" , $lineArr['9'] ); $wgps = tokyo2world( $lat , $lng ); $latw =$wgps['lat']; $lngw =$wgps['lng']; $xml .= <<<EOD <item> <itemid>{$i}</itemid> <mdate>{$mtime}</mdate> <sindo>{$lineArr[1]}</sindo> <tsunami>{$lineArr[2]}</tsunami> <singen>{$lineArr[4]}</singen> <hukasa>{$lineArr[5]}</hukasa> <magnitude>{$lineArr[6]}</magnitude> <lat>{$lat}</lat> <lng>{$lng}</lng> <latw>{$latw}</latw> <lngw>{$lngw}</lngw> <kanku>{$lineArr[10]}</kanku> </item> EOD; $i++; } } } if( $xml == "" ){ $xml = <<<EOD <item> </item> EOD; } $xml =<<<EOD <result> {$xml} </result> EOD; header ("Content-Type: text/xml; charset=UTF-8"); echo mb_convert_encoding( $xml , "utf-8" , "sjis"); exit; ?>
得られるGPS情報が日本測地系なのか世界測地系なのかちょっと不明(^^;
PHPから返されるXMLをFlexでGoogleMapにアイコンとして貼り付ければできあがり。
private function setMarker( myid:int , latlng:LatLng ):void{ //アイコンの作成 var myIcon:Bitmap = new iconImage(); var marker:Marker = new Marker( latlng , new MarkerOptions({ draggable :false, icon:myIcon, iconAlignment: MarkerOptions.ALIGN_HORIZONTAL_CENTER, hasShadow:true })); //アイコンの設置 map.addOverlay(marker); }
#ちょっとやる気がなかったので、コメントとかエフェクトが少ないです(汗
関連リンク