expo-location & GPS
Deteksi lokasi user — latitude, longitude, dan altitude
Tujuan Pembelajaran
- Mampu menggunakan expo-location untuk mendapatkan lokasi user
- Memahami foreground vs background location
- Mengerti permission dan akurasi location
Analogi
GPS = Alamat di Peta:
- Latitude = koordinat horizontal (garis lintang)
- Longitude = koordinat vertikal (garis bujur)
- Accuracy = seberapa yakin posisinya (10m vs 100m)
- Foreground = update lokasi saat app dibuka
- Background = update lokasi saat app di belakang
GPS seperti alamat di peta — latitude/longitude menentukan posisi, accuracy menentukan presisi. Foreground vs background menentukan kapan update.
Penjelasan Konsep
expo-location menyediakan akses ke GPS dan network-based location. Dua mode: (1) Foreground — app aktif di depan. (2) Background — app di belakang atau device locked.
Install: npx expo install expo-location. Plugin: expo-location dengan locationAlwaysAndWhenInUsePermission.
API dasar: (1) getCurrentPositionAsync(options) — lokasi saat ini, satu kali. Options: accuracy (lowest-low-balanced-high-highest-best). (2) watchPositionAsync(options, callback) — subscribe ke perubahan lokasi. Return subscriber object — subscriber.remove() untuk berhenti.
Accuracy: (1) Lowest — cell tower, 3000m. (2) Low — WiFi, 1000m. (3) Balanced — GPS + WiFi, 100m. (4) High — GPS, 10m. (5) Best — semua sensor, <10m. Trade-off: semakin akurat, semakin boros baterai.
Geocoding: reverseGeocodeAsync({ latitude, longitude }) — konversi koordinat ke alamat. geocodeAsync('Jakarta') — konversi alamat ke koordinat.
Background location: butuh config tambahan. expo-task-manager untuk define task yang jalan di background. startLocationUpdatesAsync('TASK_NAME', options) untuk mulai tracking background. Penting: iOS butuh capability background location di provisioning profile.
Inti yang Perlu Dipahami
Bagian ini berfokus pada mampu menggunakan expo-location untuk mendapatkan lokasi user., memahami foreground vs background location., dan mengerti permission dan akurasi location. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca expo-location & GPS, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
GPS seperti alamat di peta — latitude/longitude menentukan posisi, accuracy menentukan presisi. Foreground vs background menentukan kapan update. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.
Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.
Saat Melihat Contoh Kode
Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. requestForegroundPermissionsAsync sebelum akses lokasi. getCurrentPositionAsync dengan accuracy Balanced. location.coords berisi latitude, longitude, accuracy, altitude.
Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.
Konteks dalam Perjalanan Belajar
Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.
Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.
Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.
Contoh Kode
import * as Location from "expo-location";
import { useEffect, useState } from "react";
import { View, Text, Pressable } from "react-native";
export default function LocationScreen() {
const [location, setLocation] = useState<Location.LocationObject | null>(null);
const getLocation = async () => {
const { status } = await Location.requestForegroundPermissionsAsync();
if (status !== "granted") return;
const loc = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy.Balanced });
setLocation(loc);
};
return (
<View>
<Pressable onPress={getLocation}><Text>Dapatkan Lokasi</Text></Pressable>
{location && <Text>{location.coords.latitude}, {location.coords.longitude} ±{location.coords.accuracy}m</Text>}
</View>
);
}Penjelasan Kode
Prompt AI
Implementasikan fitur 'Nearby Places': user dapatkan lokasi saat ini → reverse geocode → tampilkan alamat → fetch nearby places dari API (restoran, SPBU, ATM).
Pertanyaan Reflektif
Aplikasi apa yang paling sering kamu beri izin lokasi? Apakah kamu merasa izin tersebut sepadan dengan value yang diberikan?