Codelab ini adalah bagian dari kursus Android Lanjutan di Kotlin. Anda akan mendapatkan manfaat maksimal dari kursus ini jika menyelesaikan codelab secara berurutan, tetapi ini tidak bersifat wajib. Semua codelab kursus tercantum di halaman landing codelab Android Lanjutan di Kotlin.
Membangun aplikasi dengan Google Maps memungkinkan Anda menambahkan fitur ke aplikasi, seperti citra satelit, kontrol UI yang andal untuk peta, pelacakan lokasi, dan penanda lokasi. Anda dapat menambahkan nilai ke Google Maps standar dengan menampilkan informasi dari set data Anda sendiri, seperti lokasi area memancing atau mendaki yang terkenal. Anda juga dapat membuat game yang memungkinkan pemain menjelajahi dunia fisik, seperti dalam perburuan harta karun atau bahkan game augmented reality.
Dalam pelajaran ini, Anda akan membuat aplikasi Google Maps bernama Wander yang menampilkan peta yang disesuaikan dan menunjukkan lokasi pengguna.
Prasyarat
Pengetahuan tentang hal-hal berikut:
- Cara membuat aplikasi Android dasar dan menjalankannya menggunakan Android Studio.
- Cara membuat dan mengelola resource, seperti string.
- Cara memfaktorkan ulang kode dan mengganti nama variabel menggunakan Android Studio.
- Cara menggunakan peta Google sebagai pengguna.
- Cara menyetel izin waktu proses.
Yang akan Anda pelajari
- Cara mendapatkan kunci API dari Konsol API Google dan mendaftarkan kunci ke aplikasi Anda
- Cara mengintegrasikan Google Maps di aplikasi Anda
- Cara menampilkan berbagai jenis peta
- Cara menentukan gaya Google Map
- Cara menambahkan penanda ke peta
- Cara mengizinkan pengguna menempatkan penanda pada lokasi menarik (POI)
- Cara mengaktifkan pelacakan lokasi
- Cara membuat aplikasi
Wander
, yang memiliki Google Map yang disematkan - Cara membuat fitur kustom untuk aplikasi Anda, seperti penanda dan gaya
- Cara mengaktifkan pelacakan lokasi di aplikasi Anda
Dalam codelab ini, Anda akan membuat aplikasi Wander
, yang menampilkan peta Google dengan gaya kustom. Aplikasi Wander memungkinkan Anda menjatuhkan penanda ke lokasi, menambahkan overlay, dan melihat lokasi Anda secara real time.
Maps SDK for Android memerlukan kunci API. Untuk mendapatkan kunci API, daftarkan project Anda di halaman API & Services. Kunci API terikat ke sertifikat digital yang menautkan aplikasi ke penulisnya. Untuk mengetahui informasi selengkapnya tentang penggunaan sertifikat digital dan penandatanganan aplikasi, lihat Menandatangani aplikasi.
Dalam codelab ini, Anda akan menggunakan kunci API untuk sertifikat debug. Sertifikat debug tidak aman berdasarkan desainnya, seperti yang dijelaskan dalam Menandatangani build debug Anda. Aplikasi Android yang dipublikasikan dan menggunakan Maps SDK for Android memerlukan kunci API kedua: kunci untuk sertifikat rilis. Untuk mengetahui informasi selengkapnya tentang cara mendapatkan sertifikat rilis, lihat Mendapatkan Kunci API.
Android Studio menyertakan template Aktivitas Google Maps, yang menghasilkan kode template yang berguna. Kode template mencakup file google_maps_api.xml yang berisi link yang menyederhanakan perolehan kunci API.
Langkah 1: Buat project Wander dengan template peta
- Buat project Android Studio baru.
- Pilih template Aktivitas Google Maps.
- Beri nama project
Wander
. - Tetapkan level API minimum ke API 19. Pastikan bahasanya adalah Kotlin.
- Klik Selesai.
- Setelah aplikasi selesai dibuat, lihat project Anda dan file terkait peta berikut yang dibuat Android Studio untuk Anda:
google_maps_api.xml—Anda menggunakan file konfigurasi ini untuk menyimpan kunci API Anda. Template ini menghasilkan dua file google_maps_api.xml: satu untuk debug dan satu untuk rilis. File untuk kunci API sertifikat debug terletak di src/debug/res/values. File untuk kunci API sertifikat rilis terletak di src/release/res/values. Dalam codelab ini, Anda hanya menggunakan sertifikat debug.
activity_maps.xml—File tata letak ini berisi satu fragmen yang mengisi seluruh layar. Class SupportMapFragment
adalah subclass dari class Fragment
. SupportMapFragment
adalah cara paling sederhana untuk menempatkan peta di aplikasi. Ini adalah wrapper di sekitar tampilan peta untuk menangani kebutuhan siklus proses yang diperlukan secara otomatis.
Anda dapat menyertakan SupportMapFragment
dalam file tata letak menggunakan tag <fragment>
di ViewGroup
mana pun, dengan atribut name
tambahan.
android:name="com.google.android.gms.maps.SupportMapFragment"
MapsActivity.java—File MapsActivity.kt membuat instance SupportMapFragment
dalam metode onCreate()
, dan menggunakan getMapAsync
()
kelas untuk menginisialisasi sistem peta dan tampilan secara otomatis. Aktivitas yang berisi SupportMapFragment
harus menerapkan antarmuka OnMapReadyCallback
dan metode onMapReady()
antarmuka tersebut. Metode onMapReady()
dipanggil saat peta dimuat.
Langkah 2: Dapatkan kunci API
- Buka file google_maps_api.xml versi debug.
- Dalam file, cari komentar dengan URL yang panjang. Parameter URL mencakup informasi spesifik tentang aplikasi Anda.
- Salin dan tempel URL ke browser.
- Ikuti perintah untuk membuat project di halaman API & Layanan. Karena parameter dalam URL yang diberikan, halaman akan otomatis mengaktifkan Maps SDK for Android.
- Klik Buat Kunci API.
- Di halaman berikutnya, buka bagian Kunci API, lalu klik kunci yang baru saja Anda buat.
- Klik Batasi Kunci dan pilih Maps SDK for Android untuk membatasi penggunaan kunci pada aplikasi Android.
- Salin kunci API yang dibuat. Nama ini diawali dengan "
AIza"
. - Di file
google_maps_api.xml
, tempelkan kunci ke dalam stringgoogle_maps_key
di tempat yang bertuliskanYOUR_KEY_HERE
. - Jalankan aplikasi Anda. Anda akan melihat peta yang disematkan di aktivitas Anda dengan penanda yang ditetapkan di Sydney, Australia. (Penanda Sydney adalah bagian dari template dan Anda dapat mengubahnya nanti.)
Langkah 3: Ganti nama mMap
MapsActivity
memiliki lateinit
var
pribadi bernama mMap
, yang berjenis GoogleMap
. Untuk mengikuti konvensi penamaan Kotlin, ubah nama mMap
menjadi map
.
- Di
MapsActivity
, klik kananmMap
, lalu klik Refactor > Rename...
- Ubah nama variabel menjadi
map
.
Perhatikan bagaimana semua referensi ke mMap
dalam fungsi onMapReady()
juga berubah menjadi map
.
Google Maps menyertakan beberapa jenis peta: normal, hibrid, satelit, medan, dan "tidak ada" (untuk tidak menampilkan peta sama sekali).
Peta normal | Peta satelit | Peta hybrid | Peta medan |
Setiap jenis peta memberikan berbagai jenis informasi. Misalnya, saat menggunakan peta untuk navigasi di dalam mobil, akan lebih baik jika Anda melihat nama jalan, sehingga Anda dapat menggunakan opsi normal. Saat mendaki, peta medan dapat membantu Anda memutuskan seberapa jauh lagi Anda harus mendaki untuk mencapai puncak.
Dalam tugas ini, Anda akan:
- Tambahkan panel aplikasi dengan menu opsi yang memungkinkan pengguna mengubah jenis peta.
- Pindahkan lokasi awal peta ke lokasi rumah Anda sendiri.
- Menambahkan dukungan untuk penanda, yang menunjukkan satu lokasi di peta dan dapat menyertakan label.
Menambahkan menu untuk jenis peta
Pada langkah ini, Anda akan menambahkan panel aplikasi dengan menu opsi yang memungkinkan pengguna mengubah jenis peta.
- Untuk membuat file XML menu baru, klik kanan direktori res dan pilih New > Android Resource File.
- Dalam dialog, beri nama file
map_options
. - Pilih Menu untuk jenis resource.
- Klik Oke.
- Di tab Code, ganti kode dalam file baru dengan kode berikut untuk membuat opsi menu peta. Jenis peta "none" tidak disertakan karena "none" tidak akan menampilkan peta sama sekali. Langkah ini menyebabkan error, tetapi Anda akan menyelesaikannya di langkah berikutnya.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/normal_map"
android:title="@string/normal_map"
app:showAsAction="never" />
<item
android:id="@+id/hybrid_map"
android:title="@string/hybrid_map"
app:showAsAction="never" />
<item
android:id="@+id/satellite_map"
android:title="@string/satellite_map"
app:showAsAction="never" />
<item
android:id="@+id/terrain_map"
android:title="@string/terrain_map"
app:showAsAction="never" />
</menu>
- Di
strings.xml
, tambahkan resource untuk atributtitle
guna mengatasi error.
<resources>
...
<string name="normal_map">Normal Map</string>
<string name="hybrid_map">Hybrid Map</string>
<string name="satellite_map">Satellite Map</string>
<string name="terrain_map">Terrain Map</string>
<string name="lat_long_snippet">Lat: %1$.5f, Long: %2$.5f</string>
<string name="dropped_pin">Dropped Pin</string>
<string name="poi">poi</string>
</resources>
- Di
MapsActivity
, ganti metodeonCreateOptionsMenu()
dan inflate menu dari file resourcemap_options
.
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.map_options, menu)
return true
}
- Di
MapsActivity.kt
, ganti metodeonOptionsItemSelected()
. Ubah jenis peta menggunakan konstanta jenis peta untuk mencerminkan pilihan pengguna.
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
// Change the map type based on the user's selection.
R.id.normal_map -> {
map.mapType = GoogleMap.MAP_TYPE_NORMAL
true
}
R.id.hybrid_map -> {
map.mapType = GoogleMap.MAP_TYPE_HYBRID
true
}
R.id.satellite_map -> {
map.mapType = GoogleMap.MAP_TYPE_SATELLITE
true
}
R.id.terrain_map -> {
map.mapType = GoogleMap.MAP_TYPE_TERRAIN
true
}
else -> super.onOptionsItemSelected(item)
}
- Jalankan aplikasi.
- Klik
untuk mengubah jenis peta. Perhatikan perubahan tampilan peta di antara mode yang berbeda.
Secara default, callback onMapReady()
menyertakan kode yang menempatkan penanda di Sydney, Australia, tempat Google Maps dibuat. Callback default juga menganimasikan peta untuk menggeser ke Sydney.
Dalam tugas ini, Anda membuat kamera peta bergerak ke rumah Anda, melakukan zoom ke tingkat yang Anda tentukan, dan menempatkan penanda di sana.
Langkah 1: Zoom ke rumah Anda dan tambahkan penanda
- Dalam file
MapsActivity.kt
, temukan metodeonMapReady()
. Hapus kode di dalamnya yang menempatkan penanda di Sydney dan memindahkan kamera. Sekarang metode Anda akan terlihat seperti ini.
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
}
- Temukan lintang dan bujur rumah Anda dengan mengikuti petunjuk ini.
- Buat nilai untuk lintang dan nilai untuk bujur, lalu masukkan nilai float-nya.
val latitude = 37.422160
val longitude = -122.084270
- Buat objek
LatLng
baru bernamahomeLatLng
. Di objekhomeLatLng
, teruskan nilai yang baru saja Anda buat.
val homeLatLng = LatLng(latitude, longitude)
- Buat
val
untuk menentukan seberapa besar Anda ingin melakukan zoom pada peta. Gunakan tingkat zoom 15f.
val zoomLevel = 15f
Tingkat zoom mengontrol seberapa besar Anda melakukan zoom pada peta. Daftar berikut memberi Anda gambaran tentang tingkat detail yang ditampilkan setiap tingkat zoom:
1
: Dunia5
: Daratan luas/benua10
: Kota15
: Jalan20
: Bangunan
- Pindahkan kamera ke
homeLatLng
dengan memanggil fungsimoveCamera()
pada objekmap
dan teruskan objekCameraUpdate
menggunakanCameraUpdateFactory.newLatLngZoom()
. Teruskan objekhomeLatLng
danzoomLevel
.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(homeLatLng, zoomLevel))
- Tambahkan penanda ke peta di
homeLatLng
.
map.addMarker(MarkerOptions().position(homeLatLng))
Metode akhir akan terlihat seperti ini:
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
//These coordinates represent the latitude and longitude of the Googleplex.
val latitude = 37.422160
val longitude = -122.084270
val zoomLevel = 15f
val homeLatLng = LatLng(latitude, longitude)
map.moveCamera(CameraUpdateFactory.newLatLngZoom(homeLatLng, zoomLevel))
map.addMarker(MarkerOptions().position(homeLatLng))
}
- Jalankan aplikasi Anda. Peta akan bergeser ke rumah Anda, melakukan zoom ke tingkat yang diinginkan, dan menempatkan penanda di rumah Anda.
Langkah 2: Izinkan pengguna menambahkan penanda menggunakan klik lama
Pada langkah ini, Anda menambahkan penanda saat pengguna menyentuh dan menahan lokasi di peta.
- Buat stub metode di
MapsActivity
bernamasetMapLongClick()
yang menggunakanGoogleMap
sebagai argumen. - Lampirkan pemroses
setOnMapLongClickListener
ke objek peta.
private fun setMapLongClick(map:GoogleMap) {
map.setOnMapLongClickListener { }
}
- Di
setOnMapLongClickListener()
, panggil metodeaddMarker()
. Teruskan objekMarkerOptions
baru dengan posisi yang ditetapkan keLatLng
yang diteruskan.
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener { latLng ->
map.addMarker(
MarkerOptions()
.position(latLng)
)
}
}
- Di akhir metode
onMapReady()
, panggilsetMapLongClick()
denganmap
.
override fun onMapReady(googleMap: GoogleMap) {
...
setMapLongClick(map)
}
- Jalankan aplikasi Anda.
- Sentuh lama peta untuk menempatkan penanda di suatu lokasi.
- Ketuk penanda, yang akan memusatkannya di layar.
Langkah 3: Tambahkan jendela info untuk penanda
Pada langkah ini, Anda menambahkan InfoWindow
yang menampilkan koordinat penanda saat penanda diketuk.
- Di
setMapLongClick()setOnMapLongClickListener()
, buatval
untuksnippet
. Cuplikan adalah teks tambahan yang ditampilkan setelah judul. Cuplikan Anda menampilkan lintang dan bujur penanda.
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener { latLng ->
// A snippet is additional text that's displayed after the title.
val snippet = String.format(
Locale.getDefault(),
"Lat: %1$.5f, Long: %2$.5f",
latLng.latitude,
latLng.longitude
)
map.addMarker(
MarkerOptions()
.position(latLng)
)
}
}
- Di
addMarker()
, tetapkantitle
penanda ke Dropped Pin menggunakan resource stringR.string.
dropped_pin
. - Tetapkan
snippet
penanda kesnippet
.
Fungsi yang sudah selesai akan terlihat seperti ini:
private fun setMapLongClick(map: GoogleMap) {
map.setOnMapLongClickListener { latLng ->
// A Snippet is Additional text that's displayed below the title.
val snippet = String.format(
Locale.getDefault(),
"Lat: %1$.5f, Long: %2$.5f",
latLng.latitude,
latLng.longitude
)
map.addMarker(
MarkerOptions()
.position(latLng)
.title(getString(R.string.dropped_pin))
.snippet(snippet)
)
}
}
- Jalankan aplikasi Anda.
- Sentuh lama peta untuk memasang penanda lokasi.
- Ketuk penanda untuk menampilkan jendela info.
Langkah 4: Tambahkan pemroses POI
Secara default, lokasi menarik (POI) muncul di peta bersama ikonnya. POI mencakup taman, sekolah, gedung pemerintahan, dan lainnya. Jika jenis peta disetel ke normal
, POI bisnis juga akan muncul di peta. POI bisnis mewakili bisnis, seperti toko, restoran, dan hotel.
Pada langkah ini, Anda akan menambahkan GoogleMap.OnPoiClickListener
ke peta. Pemroses klik ini menempatkan penanda di peta segera setelah pengguna mengklik POI. Pelistik klik juga menampilkan jendela info yang berisi nama POI.
- Buat stub metode di
MapsActivity
bernamasetPoiClick()
yang menggunakanGoogleMap
sebagai argumen. - Dalam metode
setPoiClick()
, tetapkanOnPoiClickListener
padaGoogleMap
yang diteruskan.
private fun setPoiClick(map: GoogleMap) {
map.setOnPoiClickListener { poi ->
}
}
- Di
setOnPoiClickListener()
, buatval poiMarker
untuk penanda . - Tetapkan ke penanda menggunakan
map.addMarker()
denganMarkerOptions
yang menetapkantitle
ke nama POI.
private fun setPoiClick(map: GoogleMap) {
map.setOnPoiClickListener { poi ->
val poiMarker = map.addMarker(
MarkerOptions()
.position(poi.latLng)
.title(poi.name)
)
}
}
- Di fungsi
setOnPoiClickListener()
, panggilshowInfoWindow()
dipoiMarker
untuk segera menampilkan jendela info.
poiMarker.showInfoWindow()
Kode akhir untuk fungsi setPoiClick()
akan terlihat seperti ini.
private fun setPoiClick(map: GoogleMap) {
map.setOnPoiClickListener { poi ->
val poiMarker = map.addMarker(
MarkerOptions()
.position(poi.latLng)
.title(poi.name)
)
poiMarker.showInfoWindow()
}
}
- Di akhir
onMapReady()
, panggilsetPoiClick()
dan teruskanmap
.
override fun onMapReady(googleMap: GoogleMap) {
...
setPoiClick(map)
}
- Jalankan aplikasi Anda dan temukan POI, seperti taman atau kedai kopi.
- Ketuk POI untuk menempatkan penanda di atasnya dan menampilkan nama POI di jendela info.
Anda dapat menyesuaikan Google Maps dengan berbagai cara, sehingga peta Anda memiliki tampilan dan nuansa yang unik.
Anda dapat menyesuaikan objek MapFragment
menggunakan atribut XML yang tersedia, seperti yang Anda lakukan saat menyesuaikan fragmen lainnya. Namun, pada langkah ini, Anda akan menyesuaikan tampilan dan nuansa konten MapFragment
, menggunakan metode pada objek GoogleMap
.
Untuk membuat gaya visual yang disesuaikan untuk peta, Anda membuat file JSON yang menentukan cara fitur dalam peta ditampilkan. Anda tidak perlu membuat file JSON ini secara manual. Google menyediakan Wizard Gaya Visual Maps Platform, yang membuat JSON untuk Anda setelah Anda mengatur gaya visual peta. Dalam tugas ini, Anda akan menata peta dengan tema retro, yang berarti peta menggunakan warna vintage dan Anda menambahkan jalan berwarna.
Langkah 1: Buat gaya untuk peta Anda
- Buka https://mapstyle.withgoogle.com/ di browser Anda.
- Pilih Buat Gaya.
- Pilih Retro.
- Klik Opsi Lainnya.
- Di daftar Feature type, pilih Road > Fill.
- Ubah warna jalan menjadi warna apa pun yang Anda pilih (seperti merah muda).
- Klik Selesai.
- Salin kode JSON dari dialog yang dihasilkan dan, jika Anda mau, simpan di catatan teks biasa untuk digunakan pada langkah berikutnya.
Langkah 2: Tambahkan gaya ke peta Anda
- Di Android Studio, di direktori
res
, buat direktori resource dan beri namaraw
. Anda menggunakan resource direktoriraw
seperti kode JSON. - Buat file di
res/raw
bernamamap_style.json
. - Tempelkan kode JSON yang disimpan ke file resource baru.
- Di
MapsActivity
, buat variabel classTAG
di atas metodeonCreate()
. Ini digunakan untuk tujuan pencatatan.
private val TAG = MapsActivity::class.java.simpleName
- Juga di
MapsActivity
, buat fungsisetMapStyle()
yang menerimaGoogleMap
. - Di
setMapStyle()
, tambahkan bloktry{}
. - Di blok
try{}
, buatval success
untuk keberhasilan penataan gaya. (Anda menambahkan blok catch berikut.) - Di blok
try{}
, tetapkan gaya JSON ke peta, panggilsetMapStyle()
pada objekGoogleMap
. Teruskan objekMapStyleOptions
, yang memuat file JSON. - Tetapkan hasil ke
success
. MetodesetMapStyle()
menampilkan boolean yang menunjukkan status keberhasilan parsing file gaya dan menyetel gaya.
private fun setMapStyle(map: GoogleMap) {
try {
// Customize the styling of the base map using a JSON object defined
// in a raw resource file.
val success = map.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this,
R.raw.map_style
)
)
}
}
- Tambahkan pernyataan if untuk
success
yang salah. Jika penataan gaya tidak berhasil, cetak log bahwa penguraian telah gagal.
private fun setMapStyle(map: GoogleMap) {
try {
...
if (!success) {
Log.e(TAG, "Style parsing failed.")
}
}
}
- Tambahkan blok
catch{}
untuk menangani situasi file gaya yang tidak ada. Di blokcatch
, jika file tidak dapat dimuat, maka akan munculResources.NotFoundException
.
private fun setMapStyle(map: GoogleMap) {
try {
...
} catch (e: Resources.NotFoundException) {
Log.e(TAG, "Can't find style. Error: ", e)
}
}
Metode yang sudah selesai akan terlihat seperti cuplikan kode berikut:
private fun setMapStyle(map: GoogleMap) {
try {
// Customize the styling of the base map using a JSON object defined
// in a raw resource file.
val success = map.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this,
R.raw.map_style
)
)
if (!success) {
Log.e(TAG, "Style parsing failed.")
}
} catch (e: Resources.NotFoundException) {
Log.e(TAG, "Can't find style. Error: ", e)
}
}
- Terakhir, panggil metode
setMapStyle()
dalam metodeonMapReady()
dengan meneruskan objekGoogleMap
Anda.
override fun onMapReady(googleMap: GoogleMap) {
...
setMapStyle(map)
}
- Jalankan aplikasi Anda.
- Setel peta ke mode
normal
dan gaya baru akan terlihat dengan tema retro dan jalan berwarna pilihan Anda.
Langkah 3: Beri gaya penanda Anda
Anda dapat mempersonalisasi peta lebih lanjut dengan mengatur gaya penanda peta. Pada langkah ini, Anda akan mengubah penanda merah default menjadi sesuatu yang lebih keren.
- Dalam metode
onMapLongClick()
, tambahkan baris kode berikut keMarkerOptions()
konstruktor untuk menggunakan penanda default, tetapi mengubah warnanya menjadi biru.
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
Sekarang onMapLongClickListener()
terlihat seperti ini:
map.setOnMapLongClickListener { latLng ->
// A snippet is additional text that's displayed after the title.
val snippet = String.format(
Locale.getDefault(),
"Lat: %1$.5f, Long: %2$.5f",
latLng.latitude,
latLng.longitude
)
map.addMarker(
MarkerOptions()
.position(latLng)
.title(getString(R.string.dropped_pin))
.snippet(snippet)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
)
}
- Jalankan aplikasi. Penanda yang muncul setelah Anda mengklik lama kini berwarna biru. Perhatikan bahwa penanda POI masih berwarna merah karena Anda tidak menambahkan gaya ke metode
onPoiClick()
.
Salah satu cara untuk menyesuaikan peta Google adalah dengan menggambar di atasnya. Teknik ini berguna jika Anda ingin menandai jenis lokasi tertentu, seperti tempat memancing yang populer.
- Bentuk: Anda dapat menambahkan polyline, poligon, dan lingkaran ke peta.
- Objek
GroundOverlay
:Overlay bumi adalah gambar yang disematkan pada peta. Tidak seperti penanda, overlay bumi berorientasi pada permukaan Bumi, bukan pada layar. Memutar, memiringkan, atau melakukan zoom pada peta akan mengubah orientasi gambar. Overlay bumi berguna jika Anda ingin menetapkan satu gambar pada satu area di peta.
Langkah: Menambahkan overlay bumi
Dalam tugas ini, Anda akan menambahkan overlay tanah berbentuk Android ke lokasi rumah Anda.
- Download image Android ini dan simpan di folder
res/drawable
Anda. (Pastikan nama filenya adalahandroid.png
.)
- Di
onMapReady()
, setelah panggilan untuk memindahkan kamera ke posisi rumah Anda, buat objekGroundOverlayOptions
. - Tetapkan objek ke variabel bernama
androidOverlay
.
val androidOverlay = GroundOverlayOptions()
- Gunakan metode
BitmapDescriptorFactory.fromResource()
untuk membuat objekBitmapDescriptor
dari resource gambar yang didownload. - Teruskan objek
BitmapDescriptor
yang dihasilkan ke metodeimage()
objekGroundOverlayOptions
.
val androidOverlay = GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(R.drawable.android))
- Buat
float overlaySize
untuk lebar overlay yang diinginkan dalam meter. Untuk contoh ini, lebar100f
berfungsi dengan baik.
Tetapkan properti position
untuk objek GroundOverlayOptions
dengan memanggil metode position()
, lalu teruskan objek homeLatLng
dan overlaySize
.
val overlaySize = 100f
val androidOverlay = GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(R.drawable.android))
.position(homeLatLng, overlaySize)
- Panggil
addGroundOverlay()
pada objekGoogleMap
dan teruskan objekGroundOverlayOptions
Anda.
map.addGroundOverlay(androidOverlay)
- Jalankan aplikasi.
- Ubah nilai
zoomLevel
menjadi 18f untuk melihat gambar Android sebagai overlay.
Pengguna sering menggunakan Google Maps untuk melihat lokasi mereka saat ini. Untuk menampilkan lokasi perangkat di peta, Anda dapat menggunakan lapisan data lokasi.
Lapisan data lokasi menambahkan Lokasiku ke peta. Saat pengguna mengetuk tombol, peta akan berpusat pada lokasi perangkat. Lokasi ditampilkan sebagai titik biru jika perangkat diam dan sebagai tanda V biru jika perangkat sedang bergerak.
Dalam tugas ini, Anda akan mengaktifkan lapisan data lokasi.
Langkah: Meminta izin akses lokasi
Mengaktifkan pelacakan lokasi di Google Maps memerlukan satu baris kode. Namun, Anda harus memastikan bahwa pengguna telah memberikan izin lokasi (menggunakan model izin runtime).
Pada langkah ini, Anda meminta izin akses lokasi dan mengaktifkan pelacakan lokasi.
- Di file
AndroidManifest.xml
, verifikasi bahwa izinFINE_LOCATION
sudah ada. Android Studio menyisipkan izin ini saat Anda memilih template Google Maps.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- Di
MapsActivity
, buat variabel classREQUEST_LOCATION_PERMISSION
.
private val REQUEST_LOCATION_PERMISSION = 1
- Untuk memeriksa apakah izin diberikan, buat metode di
MapsActivity
yang disebutisPermissionGranted()
. Dalam metode ini, periksa apakah pengguna telah memberikan izin.
private fun isPermissionGranted() : Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
}
- Untuk mengaktifkan pelacakan lokasi di aplikasi Anda, buat metode di
MapsActivity
yang disebutenableMyLocation()
yang tidak menggunakan argumen dan tidak menampilkan apa pun. Di dalamnya, periksa izinACCESS_FINE_LOCATION
. Jika izin diberikan, aktifkan lapisan lokasi. Jika tidak, minta izin.
private fun enableMyLocation() {
if (isPermissionGranted()) {
map.isMyLocationEnabled = true
}
else {
ActivityCompat.requestPermissions(
this,
arrayOf<String>(Manifest.permission.ACCESS_FINE_LOCATION),
REQUEST_LOCATION_PERMISSION
)
}
}
- Panggil
enableMyLocation()
dari callbackonMapReady()
untuk mengaktifkan lapisan lokasi.
override fun onMapReady(googleMap: GoogleMap) {
...
enableMyLocation()
}
- Ganti metode
onRequestPermissionsResult()
. JikarequestCode
sama denganREQUEST_LOCATION_PERMISSION
izin diberikan, dan jika arraygrantResults
tidak kosong denganPackageManager.PERMISSION_GRANTED
di slot pertamanya, panggilenableMyLocation()
.
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray) {
if (requestCode == REQUEST_LOCATION_PERMISSION) {
if (grantResults.contains(PackageManager.PERMISSION_GRANTED)) {
enableMyLocation()
}
}
}
- Jalankan aplikasi Anda. Akan ada dialog yang meminta akses ke lokasi perangkat. Lanjutkan dan berikan izin.
Peta kini menampilkan lokasi perangkat saat ini menggunakan titik biru. Perhatikan bahwa ada tombol lokasi. Jika Anda menjauhkan peta dari lokasi Anda dan mengklik tombol ini, peta akan dipusatkan kembali ke lokasi perangkat.
Download kode untuk codelab yang sudah selesai.
$ git clone https://github.com/googlecodelabs/android-kotlin-geo-maps
Atau, Anda dapat mendownload repositori sebagai file zip, mengekstraknya, dan membukanya di Android Studio.
- Untuk menggunakan Maps API, Anda memerlukan kunci API dari Konsol Google API.
- Di Android Studio, penggunaan template Google Maps Activity akan menghasilkan
Activity
dengan satuSupportMapFragment
dalam tata letak aplikasi. Template ini juga menambahkanACCESS_FINE_PERMISSION
ke manifes aplikasi, menerapkanOnMapReadyCallback
di aktivitas Anda, dan mengganti metodeonMapReady()
yang diperlukan.
Untuk mengubah jenis peta GoogleMap
saat runtime, gunakan metode GoogleMap.setMapType()
. Google Maps dapat berupa salah satu jenis peta berikut:
- Normal: Peta jalan umum. Menampilkan jalan, beberapa fitur yang dibuat manusia, dan fitur alami penting, seperti sungai. Label jalan dan fitur juga terlihat.
- Hybrid: Data foto satelit dengan tambahan peta jalan. Label jalan dan fitur juga terlihat.
- Satelit: Data foto. Label jalan dan fitur tidak terlihat.
- Medan: Data topografi. Peta ini menyertakan warna, garis kontur, dan label, serta bayangan perspektif. Beberapa jalan dan label juga terlihat.
- Tidak Ada: Tidak ada ubin peta dasar.
Tentang Google Maps:
- Penanda adalah indikator untuk lokasi geografis tertentu.
- Saat diketuk, perilaku default penanda adalah menampilkan jendela info dengan informasi tentang lokasi.
- Secara default, tempat menarik (POI) muncul pada peta dasar bersama ikonnya. POI mencakup taman, sekolah, gedung pemerintahan, dan lainnya.
- Selain itu, POI bisnis (toko, restoran, hotel, dan lainnya) muncul secara default di peta jika jenis peta adalah
normal
. - Anda dapat merekam klik pada POI menggunakan
OnPoiClickListener
. - Anda dapat mengubah tampilan visual hampir semua elemen Peta Google menggunakan Panduan Gaya Visual. Wizard Gaya Visual membuat file JSON yang Anda teruskan ke Google Maps menggunakan metode
setMapStyle()
. - Anda dapat menyesuaikan penanda dengan mengubah warna default, atau mengganti ikon penanda default dengan gambar kustom.
Informasi penting lainnya:
- Gunakan overlay bumi untuk menyematkan gambar ke lokasi geografis.
- Gunakan objek
GroundOverlayOptions
untuk menentukan gambar, ukuran gambar dalam meter, dan posisi gambar. Teruskan objek ini ke metodeGoogleMap.addGroundOverlay()
untuk menyetel overlay ke peta. - Jika aplikasi Anda memiliki izin
ACCESS_FINE_LOCATION
, Anda dapat mengaktifkan pelacakan lokasi dengan menyetelmap.isMyLocationEnabled = true
. - Hal ini tidak dibahas dalam codelab ini, tetapi Anda dapat memberikan informasi tambahan tentang lokasi menggunakan Google Street View, yang merupakan foto panorama lokasi tertentu yang dapat dijelajahi.
Dokumentasi developer Android:
Dokumen referensi:
Untuk link ke codelab lain dalam kursus ini, lihat halaman landing codelab Android Lanjutan di Kotlin.