osmdroid ile android harita uygulamaları – 1

Merhaba, bu yazıda Android için harita kütüphaneleri arasında en güzel ve kolay alternatiflerden birisi olan OSMDroid ile bir harita uygulaması nasıl yaparız, harita üzerine marker nasıl ekleriz, haritanın taban kaplamasını nasıl değiştiririz gibi basitten ilerleyen bir uygulama geliştireceğiz. İkinci yazımızda ise OSMDroid ile rota çizdirme ve navigasyon konusuna değineceğiz.

Öncelikle OSMDroid uygulaması geliştirmek için aşağıdaki linkten 3 .jar uzantılı dosyayı indirip Eclipse’de açtığımız projemizin libs klasörü altına kopyalıyoruz.

https://github.com/berkanuslu/osmbonuspack/releases/tag/1.0

Arayüz (layout) dosyamızın içerisine MapView nesnemizi yerleştirelim.

<org.osmdroid.views.MapView
 android:id="@+id/map"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" />

Şimdi de arazüyü çağırdımız .java dosyasında onCreate metodu içerisinde aşağıdaki gibi MapView nesnemizi tanımlıyor ve bazı ön ayarlar yapıyoruz.

MapView map = (MapView) findViewById(R.id.map);
map.setTileSource(TileSourceFactory.MAPNIK);
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);

Yukarıdaki kod ile arayüzdeki MapView nesnemizi kodla bağladık ve alt tabanındaki kaplamayı TileSourceFactory.MAPNIK olarak verdik. Bu default olarak tanımlı gelen bir alt taban, bunun gibi tüm Google, Yahoo, Bing harita kaynaklarını yükletebilirsiniz. Daha sonra haritamızın üzerine bir yakınlaştırma (zoom) kontrolü eklenmesini ve çift dokunma gibi olaylarla yakınlaştırma (zoom) yapabilme özelliğini ekliyoruz.

GeoPoint startPoint = new GeoPoint(39.8970091,32.7735279); //odtu teknokent
GeoPoint endPoint = new GeoPoint(39.865172,32.737028); //hacettepe teknokent

Haritamızı tanımlayıp ayarlarını yaptıktan sonra şimdi Başlangıç ve Bitiş noktalarını belirleyeceğiz ve bu noktalara birer Marker ekleyerek ilk yazıyı sonlandıracağız. İkinci yazımızda ise eklediğimiz bu başlangıç ve bitiş noktaları arasında rota çizdireceğiz.

Marker startMarker = new Marker(map);
startMarker.setPosition(startPoint);
startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
map.getOverlays().add(startMarker);

Marker endMarker = new Marker(map);
endMarker.setPosition(endPoint);
endMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
map.getOverlays().add(endMarker);

Yukarıdaki kodla birlikte Marker sınıfında bir nesne türetip oluşturduğumuz MapView nesnesini Marker’a parametre olarak gönderiyoruz. Marker’ın pozisyonu için az önce oluşturduğumuz başlangıç ve bitiş noktalarını .setPosition() metodu ile Marker nesnesine tanımlıyoruz. Daha sonra da MapView nesnemizin getOverlays() metodu ile oluşturduğumuz Marker’ı Overlay listesine ekliyoruz. Overlay burada bir Marker olabileceği gibi bir Poligon, Çizgi, vb. de olabilir. Dolayısıyla onlar da aynı yöntemle haritaya eklenecektir.

GÜNCELLEME: Son olarak harita üzerinde yakınlaştırma (zoom) yapmak ve haritayı startPoint ile tanımladığımız başlangıç noktasına ortalamak için aşağıdaki gibi IMapController kullanıyoruz.

IMapController mapController = map.getController();
mapController.setZoom(12);
mapController.setCenter(startPoint);

Uygulamayı çalıştırdığımızda haritamızın ekrana geldiğini ve aşağıdaki gibi bir görüntü aldığımızı göreceksiniz.

İkinci yazıda bu iki pozisyon arasında rota çizdireceğiz.