masat999's posterous http://masat999.posterous.com Most recent posts at masat999's posterous posterous.com Tue, 18 Jan 2011 04:20:00 -0800 Google Map API + Geocoding API on Android http://masat999.posterous.com/google-map-api-geocoding-api-on-android http://masat999.posterous.com/google-map-api-geocoding-api-on-android

AndroidにはGoogle APIアドオンがあるので、単純な地図アプリの実装は簡単ですよね。

ここではそのプラスアルファ編として、Geocoding API を利用して住所から緯度・経度を取得し、MapControllerを操作する方法について説明したいと思います。

// リクエストパラメータを設定する
String url = "http://maps.google.com/maps/api/geocode/xml?address=%s&region=%s&language=%s&sensor=true";
Locale locale = Locale.getDefault();
url = String.format(url, address, locale.getCountry(), locale.getLanguage());

// Androidでテキストボックスから住所文字列を取得する場合
String address = URLEncoder.encode(((EditText)findViewById(R.id.address)).getText().toString());

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(new HttpGet(url));
client.getConnectionManager().shutdown();

// レスポンスがHttpStatus.SC_OKを返したら、XmlPullParserで処理する。(Android2.2以降ならXPathも使えるはず)
XmlPullParser parser = Xml.newPullParser();
parser.setInput(response.getEntity().getContent(), "UTF-8");
for (int e = parser.getEventType(); e != XmlPullParser.END_DOCUMENT; e = parser.next()) {
    // 略
}

// ViewPortから適切なズームサイズを設定する
int latSapn = Math.abs(/*//viewport/southwest/lat}*/ - /*//viewport/northeast/lat*/);
int lngSpan = Math.abs(/*//viewport/southwest/lng*/ - /*//viewport/northeast/lng*/);
mapController.zoomToSpan(latSpan, lngSpan);

// Locationを地図の中心に設定する
mapController.animateTo(new GeoPoint(/*//location/lat*/, /*//location/lng*/));

XmlPullParserでの処理についてやnullチェックなど、諸々を割愛してしまいましたが、要はXMLデータが取得できたら、中心となる<location>だけでなくズームサイズの設定に必要な<viewport>も返してくれているよ、ということです。

このviewportがなければ、パッと見とんでもないところに中心座標が移動してしまったように見えることがあります。例えばaddress=Hawaiiを渡してみてください。locationは海のど真ん中を返すので、ズームサイズが適切でないと島が見えずにバグったかと思ってしまいますよ。

あとは、これを別スレッドで処理するなど、モッサリ感満載の動作にならないようにケースバイケースで対処すれば大丈夫だと思います。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/881492/27350_100001241700967_5524_n.jpg http://posterous.com/users/YrBcdfy4Gpb masat999 masat999
Tue, 30 Nov 2010 20:26:39 -0800 Android タブレットサイズの設定 http://masat999.posterous.com/android http://masat999.posterous.com/android

iPad から始まり GALAXY Tab やら GALAPAGOS Tablet やらと、にわかに熱くなってきたタブレット型デバイス。

「さらっと開発できへんの?」と上司に聞かれまして、ちょいと AVD の設定いじれば解像度なんか関係無いと思っていたら甘かったです。そんな記録。

おさらいしておくと、Eclipse上でVirtual Deviceの設定を編集する場合は、簡単2ステップ。

  1. "Android SDK and AVD Manager > Virtual Devices"を開く
  2. 新規ボタンでウィンドウ開いて、名前・ターゲット等々を設定

GALAXY Tabの解像度は1024x600ということなので、2.でResolution(解決、と何故か訳されてる)で1024x600って設定すればできちゃうんじゃないの?って思ってました。

ところがエミュレータが起動しない。

実はSDKにバンドルされている解像度以外のものはSkinを自分で用意しなければダメ、ということだそうで。

GALAXY TabのSkinはSamsungから公式にAdd-onとして提供されていました。リポジトリーサイトを使ってAVD Managerからリモートインストールできるので、導入はとっても簡単でした。(手順はサイトに記載されてますので割愛します。)
Samsung GALAXY Tab Add-on

ついでにソニエリ公式のXperia X10のSkinはこちら。ダウンロードして{android-sdk-home}/add-onsに自分でデプロイする必要があるみたいです。
Sony Ericsson | developer WORLD | Xperia X10 add-on for the Android SDK

さて先日発売日が決まったばかりのGALAPAGOS Tablet。標準外の解像度だという理由で?Android Marketも使えないそうですね。TSUTAYA GALAPAGOSとの云々だとか、どうも臭う…開発中に想定外のトラブルとか怖いなぁ…。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/881492/27350_100001241700967_5524_n.jpg http://posterous.com/users/YrBcdfy4Gpb masat999 masat999
Mon, 15 Nov 2010 22:53:00 -0800 AndroidでGoogle Mapなアプリ製作中 http://masat999.posterous.com/androidgoogle-map http://masat999.posterous.com/androidgoogle-map

AndroidでGoogleMapと連携するアプリ作ってました。ま、位置ゲーみたいなネタアプリです。
(外部公開するかどうかは未定)

Sc-2

さ、次はiアプリ版も作るか、なんて意識が移ったところで気づいたのが

Google Map API 使えへん・・・

急いで調べてみたところ、モバイルGoogle MapアプリからKMLをパラメータで読みこむことで解決。自分で一からモバイルGoogle Map実装するなんて時間の無駄でアホらしい。つーかそもそもできるかどうかもわからんしwww

Androidでも同じことできたんちゃうの?な疑問に改めてAPIドキュメントを読み返したが、今のところAPIではKMLはサポートされてないようなのでほぼ保留。XMLのparse処理を独自スキーマからKMLに変更するぐらいかな。

とにかくサーバー側でのXML掃き出しがKMLに準拠していれば、他にも使い回しが利くはず…。

時間ができたら iアプリ編と兼ねてTipsなんかも載せてみたいと思う今日この頃です。(遠い目)

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/881492/27350_100001241700967_5524_n.jpg http://posterous.com/users/YrBcdfy4Gpb masat999 masat999