Google マップをケータイの画面領域に応じて正しく表示する方法

Google マップが携帯でも表示できるようになりました ということです。

今までも非公式に表示する方法はありましたが、ようやく正式に使えるようになったみたいです。

この日をどれだけ待ち望んでいたことか!

さて、実装方法は、上記ブログにある通り、緯度経度情報等の必要な情報を指定した以下のようなimgタグを記述するのみ。

<img src="http://maps.google.com/staticmap?center=35.65641,139.699477&markers=35.65660,139.699477,red&zoom=16&size=500x300&key=[ここに Key を記述]">

HTMLの知識さえあればOK!

と、思いきや一箇所だけケータイ特有の難所があります。

それは size パラメータです。

ご存知のようにケータイの画面領域は機種により様々です。

size パラメータにいい加減な固定値を指定すると、異常に小さく表示されたり、画面からはみ出たりします。

適切な大きさで表示するにはどうしたらよいか?

結論から言うと、PEAR::Net_UserAgent_Mobile を用いて画面領域を取得する方法が最も賢明だと思います。

以下、サンプルコード。

<?php
/**
 * 以下のサンプルコードは初心者の方でもわかりやすいよう、必要以上に冗長に書いています。あしからず。
 */

/**
 * PEAR::Net_UserAgent_Mobile を用いてケータイ端末の画面横幅/縦幅を取得
 * 参考: http://pear.php.net/package/Net_UserAgent_Mobile/docs/0.31.0/Net_UserAgent_Mobile/Net_UserAgent_Mobile.html
 */
require_once 'Net/UserAgent/Mobile.php';
$agent   = &Net_UserAgent_Mobile::factory();
$display = $agent->getDisplay();
$width   = $display->getWidth();
$height  = $display->getHeight();


/**
 * 画面横幅の90%, 画面縦幅の80% の大きさで表示する例
 * point 1: サイズには整数しか指定できないので必ずintval()により整数化すること
 * point 2: $width - 20 のように固定幅を引くことでマージンを算出せず、倍率指定にするのがコツ(だと思います)
 */
if ($width) {
    $img_width  = intval($width  * 0.9);
    $img_height = intval($height * 0.8);
} else {
    $img_width  = $img_height = 120;// 画面領域を正常取得できなかった場合は 120px * 120px
}
echo '<img src="http://maps.google.com/staticmap?center=35.65641,139.699477&markers=35.65660,139.699477,red&zoom=16&size='.$img_width.'x'.$img_height.'&key=[ここに Key を記述]">';
?>