Android: metersToEquatorPixelsが便利

GoogleMapを使ったアプリを開発中なのだけれども、指定地点から円を描きたいな〜と思っていた。円を描くこと自体は、CircleOverlayクラスを作って書けたのだけれども、問題は半径である。ピクセルで指定しなければならない。でも、ZoomLevelによって縮尺は変わるので、一体1ピクセルが何メートルなのかをどうやって出せばいいのだろうかと考えていたのだが、ふと同僚が持っているAndroidプログラミング入門を見たら、いちいち計算しなくてもメソッド一発で取得できることがわかった!1時間半も悩んだのに〜!!

private class CircleOverlay extends Overlay {
	private GeoPoint mPoint;
	
	public CircleOverlay(GeoPoint point){
		mPoint = point;
	}
	
	@Override
	public void draw(Canvas canvas, MapView mapView, boolean shadow) {
		super.draw(canvas, mapView, shadow);
		if (!shadow) {
			Projection projection = mapView.getProjection();
			Point point = new Point();
			projection.toPixels(mPoint, point);
			
			float pixels = projection.metersToEquatorPixels(10000);
			
			Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
			paint.setColor(Color.RED);
			paint.setAlpha(80);
			canvas.drawCircle(point.x, point.y, pixels, paint);
		}
	}
	
	@Override
	public boolean onTap(GeoPoint point, MapView mapView) {
		mPoint = point;
		return super.onTap(point, mapView);
	}
}

ズームしたら自動的に半径のサイズも変わってくれたのを確認。
すごく便利じゃないか!!


タグ Android, GoogleMaps, Java | パーマリンク.

コメント・トラックバック一覧

  1. なお says:

    リンボウ君こんにちは!
    言ったかどうか忘れたけど今は福岡勤務。もともと福岡出身だから丁度よかったりして。毎日片道8キロの自転車通勤しています。でも太ったけど(しかもハゲたし)。ほんじゃあ頑張ってね。

  2. >なおさん
    お久しぶりです!
    福岡に行かれたというのは某Kさんから聞いてました。
    自転車通勤されてるのに太ったって!(しかもハゲたって…)
    お酒の飲み過ぎじゃないですか〜???
    でも元気そうでなによりです!(^^)
    また松山来られる時は連絡ください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です