Mustafa Ferhan Akman

Android: Google Maps API’leri ile Çalışmak – 3

Posted in Android, Makale & Döküman, Programlama by ferhanakman on 29/06/2009

Bu bölümde, ekranda gösterdiğimiz harita üzerine bazı işlemleri gerçekleştirmeye başlayacağız.  Bu yazıda, dünya haritası üzerinde gezinmeyi ve harita üzerinde istediğimiz yerlere noktalar koymayı öğreneceğiz.

İlk işlemimiz, gösterdiğimiz haritayı, Android ile sağa sola kaydırmak olsun. Bunun için MapProcess classımıza aşağıdaki kodu ekliyoruz.

map.setClickable(true);

Bundan sonra yapacağımız işlemler, haritanın istediğimiz yerlerine çeşitli noktalar koymak için olacaktır. İstersek bunu ilerletip haritanın istediğimiz herhangi bir yeri üzerine iğne, araba resmi vs gibi çeşitli iconlarda koyabiliriz.

Yeni bir class oluşturalım. Ben ismini MapsOverlay olarak belirledim.  Bu class benim harita üzerine bir şeyler çizmemi sağlayacak. Aşağıdaki classı oluşturduktan sonra, MapsProcess classına dönüp, çizdiğim şekilleri haritaya ekleyeceğim.

public class MapsOverlay extends Overlay{
int lat, lng, rad = 5;
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
// lat long kordinatlarını GeoPoint’e çeviriyor veya tam tersi
Projection projection = mapView.getProjection();
Paint paint = new Paint();
Point myPoint = new Point();
paint.setAntiAlias(true);
paint.setFakeBoldText(true);
if (shadow == false) {
// own adress
paint.setARGB(255, 255, 255, 0);
/* ankaranın kordinatları */
lat = (int) (39 * 1E6);
lng = (int) (33 * 1E6);
GeoPoint point2 = new GeoPoint( lat,lng );
projection.toPixels(point2,myPoint);
RectF oval2 = new RectF(myPoint.x-rad, myPoint.y-rad,
myPoint.x+rad, myPoint.y+rad);
canvas.drawOval(oval2, paint);
}
}
}
public class MapsOverlay extends Overlay{
	int lat, lng, rad = 5;

	@Override
	public void draw(Canvas canvas, MapView mapView, boolean shadow) {
		// TODO Auto-generated method stub
		super.draw(canvas, mapView, shadow);
		Projection projection = mapView.getProjection();

		Paint paint = new Paint();
		Point myPoint = new Point();

		paint.setAntiAlias(true);
		paint.setFakeBoldText(true);

		if (shadow == false) {

			paint.setARGB(255, 255, 255, 0);

			/* ankaranın kordinatları */
			lat = (int) (39 * 1E6);
			lng = (int) (33 * 1E6);

			GeoPoint point = new GeoPoint( lat,lng );
			projection.toPixels(point,myPoint);
			RectF oval = new RectF(myPoint.x-rad, myPoint.y-rad,
					myPoint.x+rad, myPoint.y+rad);
			canvas.drawOval(oval, paint);
		}

		}
	}

Kodlara baktığımıda, ilk göze çarpan Overlay’ın extend edildiğidir. Bu class extend ettikten sonra, draw method’unu kullanarak, çizmimizi gerçekleştireceğiz. Ben ekrana bir yuvark çizeceğim için, bir adet rad (radius) değeri belirledim.  Noktayı hangi kordinat üzerine koyacağıma karar vermek için, Ankara’nın nerede olduğunu Google aracılığı ile öğrendim ve enlem, boylam değerlerimi lat ve lng değişkenleri içerisinde tuttum.

Kordinatı Google MAPs’in anlayacağı formata çevirmemiz gerekiyor. Bunun için classından Projection faydalanıyoruz. Belirlediğim noktaları önce Geopoint değeri olarak yazıyoruz ve projection sayesinde, pixel değeri olarak myPoint değişkeni üzerine geri döndürüyoruz.

Son olarak yukarıdaki işlemleri MapsProcess classından önce çağırıp, sonra ekleyerek; ekranda gözükmesini sağlayacağız.

	protected void onCreate(Bundle icicle) {
		// TODO Auto-generated method stub
		super.onCreate(icicle);
		setContentView(R.layout.maps);

		map = (MapView) findViewById(R.id.map_view);
		map.setClickable(true);
		MapsOverlay mo = new MapsOverlay();
		map.getOverlays().add(mo);

	}

son olarak ekran çıktımızda da gördüğümüz üzere, Ankaranın üzerine sarı bir işaret koyduk.

android-maps3

Görüldüğü gibi çok basit!
Yararlı olması dileği ile…

Yorum Yapın