PHP,MySQL,Flex,JSな日々+イラストとか このページをアンテナに追加 RSSフィード Twitter

2008年06月14日

地震マップを作ってみたよ

ちょっと最近地震が多いので、地震マップを作ってみました。

http://moeten.info/flex/20080614_jisinMap/bin-release/main.html

f:id:haru-komugi:20080614181245j:image

地震の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);
}

#ちょっとやる気がなかったので、コメントとかエフェクトが少ないです(汗

関連リンク

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/haru-komugi/20080614/1213435582