Bir önceki yazıda android platformu için maps api kurulumunu ele almıştık şimdi ise harita uygulamalarında kullanıcı tarafından bir bölgenin seçilmesi ve seçilen bölgenin işaretlenmesi,işaretlenen bölgenin enlem ve boylam verilerinin alınması bu enlem ve boylam bilgisi ile o alanın eyalet ülke posta kodu gibi bilgilerinin nasıl alınabileceğine bakacağız.Ön şart ise bir önceki video anlatımına bakmış olmak yada maps api kurulumunu gerçekleştirmiş olmaktır.
Önceki Yazı:Android google maps api v2 kullanımı ve api anahtarı alma
Marker:
Marker denilen şeyi mutlaka görmüşsünüzdür haritalarda sıklıkla kullanılan ve seçtiğiniz konumu belirtir nitelikle çıkan ikondur.Varsayılan olarak google maps için aşağıdaki şekildedir.
Şimdi bunu nasıl yapabileceğimize bakalım.Projemizi oluşturduğumuzda bizim için varsayılan olarak bir marker ekleyecektir bu seçilen konuma göre değil setup fonksiyonu içerisinde yapmaktadır.
private void setUpMap() { mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); }
bu varsayılan marker için verilen enlem ve boylam gördüğünüz üzere (LatLng olarak belirtilir) 0 enlem ve 0 boylam olarak verilmiştir title olarak ise Marker verilmiştir.Activity çalıştığında bu fonksiyon çağrılıyor ve marker oluşturuluyor.Şimdi kendi kendimiz oluşturalım.
Bunun için ilk olarak mMap olarak aldığımız GoogleMap tipi için onClick eventi oluşturacağız.Bu metot LatLng tipinde yani enlem ve boylamı barındıracak bir tip alır,bu tip ile oranın konumunu alabiliriz,enlem ve boylam double tipindedir.
... List<Address> addresses = null; Marker marker = null; double lat=0, lng=0; //Haritaya tıklandığında konumu al ve marker ekle mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { //clear fonksiyonu ile harita üzerinde daha önceden oluşturulmuş işaretciler temizlenir mMap.clear(); lat = latLng.latitude; lng = latLng.longitude; if (marker != null) { marker.remove(); } //geocoder verilen enlem ve boylamdaki adresi bir array olarak döndürmektedir Geocoder geocoder = new Geocoder(MapsActivity.this, Locale.getDefault()); try { addresses = geocoder.getFromLocation(lat, lng, 1); } catch (IOException e) { e.printStackTrace(); } String cityName = addresses.get(0).getAddressLine(0); String stateName = addresses.get(0).getAddressLine(1); String countryName = addresses.get(0).getAddressLine(2); //----------------------------------------------- //marker ekleme Toast.makeText(getApplicationContext(), cityName + stateName + countryName, Toast.LENGTH_SHORT).show(); marker = mMap.addMarker(new MarkerOptions() .position(latLng)//enlem ve boylam .title("")//isim .icon(BitmapDescriptorFactory.fromResource(R.drawable.markercizimi))//local bir icon .snippet(cityName + " " + stateName + " " + countryName)); //----------------------------------------------- } }); ...
Ek olarak haritada gördüğünüz + – yani zoom butonlarını açmak için
//zoom butonlar mMap.getUiSettings().setZoomControlsEnabled(true);
Setup metodu içerisine ekleyebilirsiniz.Karşılaştığınız sorunları yazabilirsiniz elimden geldiğinde yardımcı olmaya çalışırım.