アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

携帯でGoogleMapを手軽に表示するPHPクラス

皆さん、こんにちは。
笹亀です。

===
追記:みなさんからのたくさんのはてブをしていただけているので、せっかくなのでちょっと宣伝させてもらいます。
弊社の携帯コンテンツとして、携帯専用イベント支援サイト「あつまろ☆ねっと」というサービスを開始しました。「あつまろ☆ねっと(http://www.atmr.jp/)」は現在ベータ版ですが、ぜひぜひ利用してみてください。
後、恥ずかしながらPHPの本を出版することになりました。
ご興味のある方、気になる方、こちらもよろしくお願い致します^^
http://www.amazon.co.jp/exec/obidos/ASIN/4798114383/
===

遅くなりましたが、明けましておめでとうございます。
今年度もよろしくお願い致します。

先日ですが、毎月恒例の誕生日会を行いました。
メンバーの誰かが毎月誕生日を迎えるので、アシアルで毎月行っている行事のひとつです。
今月の誕生日(主役)は松田氏でした。今月もみんなで盛大にお祝いをしました。
ちなみに私の誕生日は先月の12月で、お祝いしていただきました^^

GooleMapはPC版でJavascriptを使用することで地図を表示して使用することが多かったですが、携帯用として使用するために特定の位置を画像として表示できるようになっています。今回はGoogleMapを携帯の地図として出力する方法を解説します。

まずは、特定の位置の地図を描画させたり設定をセットするクラスを作成します。
今回は、「GoogleMobileMapView」クラスとして作成しています。



<?php
//携帯でGoogleMapの画像をプリントするクラス
class GoogleMobileMapView{
  //取得URLとクエリを保持する変数
  private $geturl = 'http://maps.google.com/mapprint?tstyp=4';
  private $query = "";
  private $image_format = "1";
  private $type = array("1"=>"gif","2"=>"png","3"=>"jpeg");
  
  //画像を取得するためのURLをセットするメソッド
  public function setUrl($latitude,$longitude,$settings,$points = null) {
    //中心の位置がない場合はfalseを返す
    if( $latitude == "" || $longitude == ""){
      return false;
    }

    //画像を取得するためのパラメータをセットしていく
    $this->query = $this->geturl . " &c=$longitude,$latitude";
    if(!isset($settings["w"])) $settings["w"] = 200;
    if(!isset($settings["h"])) $settings["h"] = 200;
    if(!isset($settings["z"])) $settings["z"] = 0;
    $this->query .= " &r={$settings["w"]},{$settings["h"]}";
    $this->query .= " &z={$settings["z"]}";
    
    //出力形式をセット(デフォルトはGIF
    if(isset($settings["image_format"])) $this->image_format = $settings["image_format"];
    $this->query .= " &image_format=" . $this->image_format;

    //複数のポイントを表示するのにも対応させる
    if(!is_array($points)) return true;
    foreach( $points as $point ){
      if(!isset($point["latitude"]) || !isset($point["longitude"])) continue;
      if(!isset($point["iconid"]) ) $point["iconid"] = 15;
      $this->query .= " &l={$point["longitude"]},{$point["latitude"]},{$point["iconid"]}";
    }
    return true;
  }

  //画像を出力するメソッド
  public function viewPicture() {
    $pic_type = $this->image_format;
    header("Content-type: image/" . $this->type[$pic_type]);
    if ($this->query != ""){
      readfile($this->query);
    }
  }
}
?>


次にGoogleMobileMapViewクラスファイルを読み込み、実行するためのスクリプトを作成します。
ここでは、私が知っている今までのアシアルのオフィスを示した場所を画像で表示しました。


<?php
require_once ("./gooleMobileMapView.php");

$points = array();
$points[] = array('latitude' => 35707701,'longitude' => 139761787,'iconid' => 17);
$points[] = array('latitude' => 35706847,'longitude' => 139762618,'iconid' => 18);
$points[] = array('latitude' => 35706764,'longitude' => 139762515,'iconid' => 19);
$gmap = new GoogleMobileMapView();
$gmap->setUrl(35707215,139762162,array('w' => 240,'h' => 240,'image_format' => '3'),$points);
$gmap->viewPicture();
?>

上記プログラムを作成した後に、地図が画像形式で表示することができます。
今回は、「Jpeg」で表示しましたが、この他にも 「image_format」の引数の値を変更することで、画像の出力形式を指定できます。指定しない場合はGIF形式になります。
1:GIF 2:PNG 3:JPEG

緯度経度については、桁数を8桁~9桁にあわせる必要があります。
35.707215→35707215
139.762162→139762162

細かい設定などは、http://labs.anoncom.net/others/GoogleMap/MobileImage.htmlに記述されてます。ご確認ください。

作成したサンプルを実行すると以下のような地図が表示されます。


また、携帯でアクセスしたい場合は、
以下のQRコードを携帯で読みとりアクセスしてください。


このように携帯に向けても画像を手軽に無料で表示させることができます。
GoogleMapはこれからも、WebのAPIとしても力になってくれるものだと思います。
GoogleMapのようなAPIを上手に使うことで、Webアプリケーションの作成の幅も広がり、開発の手助けともなってくれると思います。
みなさんも是非、いろいろなAPIを利用してみてはいかがでしょうか。

最後に使用する際には、GoogleMapの利用規約に記述されている規約に違反しないようにお気をつけください。

http://www.google.com/intl/ja_jp/help/terms_maps.html