Android

2011年2月16日水曜日

GoogleMapをIntentで表示する。

GoogleMapをIntentで表示するだけなら簡単なのだが、パラメータの渡し方に色々とくせがあるようです。

まず、GoogleMapをIntentで起動し表示する基本的なコードは次の通りです。


public class GoogleMapTestActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  
  String mapurl = "geo:38.230844,140.323316";  //←ここの書き方で動作が微妙に変わる!

  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_VIEW);  intent.setClassName("com.google.android.apps.maps","com.google.android.maps.MapsActivity");  intent.setData(Uri.parse(mapurl));
  startActivity(intent);
 }
}
ここで、mapurlの部分の書き方によりいろんなパターンが指定できます。
ちなみにこの情報はGoogleMap アプリのバージョンで変わる可能性があります。
  1. 座標指定

  2. mapurl = "geo:latitude,longitude"と指定した場合、 指定位置を中心とした地図を表示する。
    その位置にPinは表示しない。
    戻るボタン一回で元アプリに戻る。

  3. ピンを立てたい

  4. mapurl = "geo:0,0?q=latitude,longitude"と指定した場合、 最初に(0,0)を指定、つまり現在位置の地図を表示する。
    その後、latitude,longitudeで指定した位置を検索し検索位置を中心とした地図に移動する。
    (検索位置への移動はアニメーション効果あり。)
    0,0の代わりにlatitude,longitudeを指定すれば移動アニメーションは発生しないが、やはり動作は2段階になる。
    指定位置にはピンを表示する。
    戻るボタンは一回目で検索前の画面(つまりピンがない状態)に戻り、 2回目で元のアプリに戻る。
    プログラム的には微妙に使いにくい。

  5. ズーム指定

  6. mapurl = "geo:latitude,longitude?z=xx"でズーム指定ができます。
    xxは1~23で1を指定すると全世界表示、23で最大拡大になります。
    ただし、位置を指定して?z=1を指定するとエラーになることがある!
    あくまでめやすですが、13~15で市町村サイズ・10~11で都道府県サイズ・6で日本全土サイズくらい。
    今のところ、上記2の検索とズーム指定は組み合わせできないようだ…。
と言うことで、IntentでGoogleMapを表示してみたけど、やはりキチンとした表示を行うならMapViewを使って自ら制御するしかない??

0 件のコメント:

コメントを投稿