Imaginary Code

from kougaku-navi.net

Processingでお手軽にGoogleマップから画像を取得する

 Google Mapper for ProcessingというGoogleマップから地図画像を取得するためのProcessing用のライブラリがあります.ごくシンプルな機能しかありませんが,とても簡単に扱えるので遊んでみてください.

使い方

 上記の配布サイトに行くと,Downloadと書かれたところに投げやりにjarファイル(googleMapper.jar)が置いてあるので,それをダウンロードします.Processingを起動して,スケッチ上にgoogleMapper.jarをドラッグ&ドロップすればそのスケッチで利用可能になります.普段使いするならば,Processing/libraries/googleMapper/library/というフォルダ構成を作ってそこに置くのが良いでしょう.

 コードはこんな感じです.短い.恐ろしく短い.何の冗談かと.

import googlemapper.*;

GoogleMapper gMapper;
PImage mapImage;

void setup() {
  size(640, 480);
  
  double mapCenterLat = 35.709961;               // 緯度
  double mapCenterLon = 139.810858;              // 経度
  int    zoomLevel = 16;                         // ズームレベル
  String mapType = GoogleMapper.MAPTYPE_HYBRID;  // 表示の種類
  int    mapWidth = width;                       // 横サイズ   
  int    mapHeight = height;                     // 縦サイズ
  
  // インスタンスの作成
  gMapper  = new GoogleMapper(mapCenterLat, mapCenterLon, zoomLevel, mapType, mapWidth, mapHeight);
  
  //マップ画像の取得
  mapImage = gMapper.getMap();
}
 
void draw() {
  image(mapImage, 0, 0); // 画像の描画
}

実行するとこんな感じ.ズームレベルと画像サイズを変更すれば,見える範囲を変更できます.

上記サンプルコードではスカイツリーの緯度・経度を指定しています.任意の場所の緯度・経度が知りたければ,以下のサイトなどでチェックしてください.

マップの種類は以下のパラメータから選べます.

  GoogleMapper.MAPTYPE_ROADMAP    // 通常の地図
  GoogleMapper.MAPTYPE_SATELLITE  // 航空写真
  GoogleMapper.MAPTYPE_HYBRID     // 航空写真+地名
  GoogleMapper.MAPTYPE_TERRAIN    // 地形

あと,緯度経度⇔スクリーン座標変換のメソッドが用意されています.例えばこんな感じで相互変換できます.

  // 画像上の座標値(x,y)から経度・緯度を算出
  println("longitude = " + gMapper.x2lon(320));
  println("latitude  = " + gMapper.y2lat(240));
 
  // 経度・緯度から対応する画像上の座標値を算出する
  println("x = " + gMapper.lon2x(139.810858));
  println("y = " + gMapper.lat2y(35.709961));

 かつてGoogleマップを背景に使った縦スクロールのシューティングゲームゼビウス的な感じの)がありましたが,そういうのをProcessingで作ってみると面白いかもしれませんね.あとはGPSモジュールと連動させるのも面白そう.