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

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

タグ [  Tech  GoogleMap  携帯  ]
皆さん、こんにちは。
笹亀です。

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

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

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

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

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

  1. <?php
  2. //携帯でGoogleMapの画像をプリントするクラス
  3. class GoogleMobileMapView{
  4.   //取得URLとクエリを保持する変数
  5.   private $geturl = 'http://maps.google.com/mapprint?tstyp=4';
  6.   private $query = "";
  7.   private $image_format = "1";
  8.   private $type = array("1"=>"gif","2"=>"png","3"=>"jpeg");
  9.   
  10.   //画像を取得するためのURLをセットするメソッド
  11.   public function setUrl($latitude,$longitude,$settings,$points = null) {
  12.     //中心の位置がない場合はfalseを返す
  13.     if( $latitude == "" || $longitude == ""){
  14.       return false;
  15.     }
  16.  
  17.     //画像を取得するためのパラメータをセットしていく
  18.     $this->query = $this->geturl . "&c=$longitude,$latitude";
  19.     if(!isset($settings["w"])) $settings["w"] = 200;
  20.     if(!isset($settings["h"])) $settings["h"] = 200;
  21.     if(!isset($settings["z"])) $settings["z"] = 0;
  22.     $this->query .= "&r={$settings["w"]},{$settings["h"]}";
  23.     $this->query .= "&z={$settings["z"]}";
  24.     
  25.     //出力形式をセット(デフォルトはGIF
  26.     if(isset($settings["image_format"])) $this->image_format = $settings["image_format"];
  27.     $this->query .= "&image_format=" . $this->image_format;
  28.  
  29.     //複数のポイントを表示するのにも対応させる
  30.     if(!is_array($points)) return true;
  31.     foreach( $points as $point ){
  32.       if(!isset($point["latitude"]) || !isset($point["longitude"])) continue;
  33.       if(!isset($point["iconid"]) ) $point["iconid"] = 15;
  34.       $this->query .= "&l={$point["longitude"]},{$point["latitude"]},{$point["iconid"]}";
  35.     }
  36.     return true;
  37.   }
  38.  
  39.   //画像を出力するメソッド
  40.   public function viewPicture() {
  41.     $pic_type = $this->image_format;
  42.     header("Content-type: image/" . $this->type[$pic_type]);
  43.     if ($this->query != ""){
  44.       readfile($this->query);
  45.     }
  46.   }
  47. }
  48. ?>

次にGoogleMobileMapViewクラスファイルを読み込み、実行するためのスクリプトを作成します。
ここでは、私が知っている今までのアシアルのオフィスを示した場所を画像で表示しました。
  1. <?php
  2. require_once ("./gooleMobileMapView.php");
  3.  
  4. $points = array();
  5. $points[] = array('latitude' => 35707701,'longitude' => 139761787,'iconid' => 17);
  6. $points[] = array('latitude' => 35706847,'longitude' => 139762618,'iconid' => 18);
  7. $points[] = array('latitude' => 35706764,'longitude' => 139762515,'iconid' => 19);
  8. $gmap = new GoogleMobileMapView();
  9. $gmap->setUrl(35707215,139762162,array('w' => 240,'h' => 240,'image_format' => '3'),$points);
  10. $gmap->viewPicture();
  11. ?>
上記プログラムを作成した後に、地図が画像形式で表示することができます。
今回は、「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

コメント

    • GoogleMapはゼンリンがGoogleに対して提供しているもののようで、ゼンリン側は携帯電話への表示はGoogleに対して許可していないようです。
      Google側から返答等はありませんが、今後携帯への表示はNGになる可能性がありますので、注意が必要かもしれません。
    • コメントありがとうございます。

      そこまで詳しくは知りませんでした。
      参考になる情報ありがとうございました。

      アクセスが集中するサイトなどでは、通常のGoogleMapAPIもGoogleの許可を得ないと制限を掛けられたりされてしまうことはよく聞きます。
      無料で使用させていただいたいるので、制約はたしかに必要な処置だとは思いますが、ゼンリンさんも認めてもらえて、ある程度使用させていただける状態になっていると私個人としてはうれしいのですが^^;
    • 携帯はゼンリンじゃないんですね。ちょっと意外でした。
      ちなみに携帯版のGoogleMapはどこのデータを使っているんですか
      また、あえてゼンリン以外のデータを使っている理由を
      ご存じでしたら教えて頂けないでしょうか? >名無しさん

      >ゼンリンさんも認めてもらえて、ある程度使用させて
      >いただける状態になっていると私個人としてはうれしいのですが^^;
      たしかに自分も広告入りでもいいので正式に使用許可
      ほしいです。なんとかならないですね…
    • class GoogleMobileMapView
      の載っているコードの20行目、'w'は'h'の誤りのようです。
    • スクリプトのご指摘ありがとうございました。

      本文の修正をさせていただきました。
    • http://maps.google.com/mapprintのAPIを使った画像を不特定多数の閲覧者へ公開するのは大丈夫なんでしょうか?
      たしか以前からあるhttp://maps.google.com/mapdataのAPIは個人使用に限定されていたような気がします。
      もし大丈夫なら非常に嬉しいのですが・・・

コメントフォーム

認証
captcha_key
 

トラックバック