アシアルブログ

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

2種類のGoogleMap画像出力を比べてみる

こんにちは、笹亀です。

以前に「携帯でGoogleMapを手軽に表示するPHPクラス」の実装方法をご紹介させていただきました。その後、正式にGoogleからGoogleMapを画像で出力する方法が公開されましたが、今回は正式なものを実際に使用して、以前にご紹介したものと比べて解説していきたいと思います。

まずは、私が書いた以前のブログを参照していないかたは、下記よりご参照ください。
http://blog.asial.co.jp/332

今回も設定と表示をまとめたPHPのクラスを作成したいとおもいます。
まずは設定するパラメータについて説明します。
 ※center:マップの中央の座標を緯度と経度で指定
 ※zoom:ズームレベルを0~19の間で指定(例:zoom=13)
 ※size:表示するマップのサイズを幅×高さで指定(MAXで512x512)
  maptype:マップの表示タイプを指定します(roadmapとmobile)
      roadmapは標準のマップ表示
      mobileは携帯用に見やすくした表示
  markers:マーカーをマップ上に配置する。
      マーカーの緯度・経度、マーカーの色(red,blue,green)、
      マーカーの文字(a-z)を|(パイプ、%7C )で区切ることで複数指定できる。
 ※key:Google Maps API キーを指定

※:設定が必須のものです

設定の詳しい内容は下記をご参照ください(英語)
http://code.google.com/apis/maps/documentation/staticmaps/#Usage

すぐに使ってみたい方は、
APIキーがなくても下記から作成できるみたいです。
http://gmaps-samples.googlecode.com/svn/trunk/simplewizard/makestaticmap.html

以下からは、PHPで作成したMap画像の設定・表示クラスを作ります。
 ※ファイル名は「googleMapPictureView.php」として作成します。


<?php

//携帯でGoogleMapの画像をプリントするクラス
class GoogleMapPictureView{
  //取得URLとクエリを保持する変数
  private $geturl = 'http://maps.google.com/staticmap?key=[取得したAPIKEYをセット] &maptype=mobile';
  private $center = "";
  private $width  = "220";
  private $height = "300";
  private $zoom   = "16";
  private $point  = "markers=";

  //画像を取得するためのURLをセットするメソッド
  public function setCenterPoints($latitude,$longitude,$points = null) {
    //中心の位置がない場合はfalseを返す
    if( $latitude == "" || $longitude == ""){
      return false;
    }

    //地図画像の中心をセット
    $this->center = "$latitude,$longitude";
    
    //複数のポイントを表示させる
    if(!is_array($points)) return true;
    foreach( $points as $point ){
      if(!isset($point["latitude"]) || !isset($point["longitude"])) continue;
      if(!isset($point["icontype"]) ) $point["icontype"] = "reda";
      $this->point .= "{$point["latitude"]},{$point["longitude"]},{$point["icontype"]}%7C";
    }
    $this->point = substr($this->point,0,strlen($this->point)-3);
    
    return true;
  }
  
  //横と縦サイズ、ズームレベルをセットする
  public function setSize($width,$height,$zoom) {
     if (is_numeric($width)) {
       $this->width = (int)$width;
     }
     if (is_numeric($height)) {
       $this->height = (int)$height;
     }
     if (is_numeric($zoom)) {
       $this->zoom = (int)$zoom;
     }
  }
  
  //画像を出力するメソッド
  public function viewPicture() {
    $query = "";
    $query .= $this->geturl . " &center=" . $this->center . " &size=" . $this->width . "x" . $this->height . 
    " &zoom=" . $this->zoom . " &" . $this->point;
    header("Content-type: image/gif");
    readfile($query);
  }

}


最後にクラスを読み込み、設定を行うメソッドを使い、画像を表示するメソッドを実行するスクリプトを作成すると完成です。


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

$points = array();
$points[] = array('latitude' => 35.707701,'longitude' => 139.761787,'icontype' => "greena");
$points[] = array('latitude' => 35.706847,'longitude' => 139.762618,'icontype' => "redb");
$points[] = array('latitude' => 35.706764,'longitude' => 139.762515,'icontype' => "bluec");
$points[] = array('latitude' => 35.705764,'longitude' => 139.762515,'icontype' => "bluez");
$gmap = new GoogleMapPictureView();
$gmap->setCenterPoints("35.707215","139.762162",$points);
$gmap->setSize("240","240",'16');
$gmap->viewPicture();
?>


サンプルは、以下のQRコードを携帯で読み込んで内容を確認できます。


実際に実行した画面では、以前のものと見た目では違いはありません。
では、実際にはどちらを使うほうがよいのでしょうか?
自分なりにまとめた、メリットとデメリットをあげて比べてみることにします。

■正式に公開された方について
メリット
・規約に違反することがなければ、自由に使える
・正式に認められた方式であること

デメリット
・出力画像形式までは選択できず、GIFだけである
 →携帯用といっているのに出力形式が1種類というのはちょっと残念
・必ずAPIキーが必要になる
・出力画像サイズ(バイト数)が大きい

■以前の方法について(http://blog.asial.co.jp/332
メリット
・JPG,GIF,PNGの3種類の出力方法を選択できる
・設定での制限がない(サイズ指定など
APIキーは必要ない

デメリット
・正式には認められた方法ではないため、いつ廃止されるかわからない
・正式な規約がないので、どこまでのことをしてよいのか?(アクセス数や商用利用など
・出力画像サイズ(バイト数)が大きい


どちらかというとやはり認められた方法を使うことをお勧めしますが、出力やサイズの制限が掛かります。
個人のサイトなどで使用する場合は、設定オプションや出力形式なども選択できるので、
「以前の方法」がよいと思います。
使用する際には、必ずサイトの特性と両方のメリットとデメリットを考えて使用するようにしましょう。

どちらを使用するにあたって、携帯で地図が閲覧できるようになることは、
とても魅力的なコンテンツを作成することができるようになります。

上記の地図表示方法を上手に利用して、
よりよい携帯コンテンツの作成に励んでみてはいかがでしょうか^^