Geolocalização e mapas em Kotlin: bibliotecas, ferramentas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução à geolocalização e mapas em Kotlin

Kotlin é uma linguagem de programação moderna, amplamente utilizada para o desenvolvimento de aplicativos Android. Trabalhar com geolocalização e mapas é uma das principais funcionalidades dos aplicativos móveis. Neste artigo, veremos as principais bibliotecas e ferramentas para integrar mapas, obter coordenadas do usuário e traçar rotas em Kotlin.



1. Google Maps SDK para Android

Google Maps é o serviço mais popular para exibição de mapas. Para usá-lo em Kotlin, é necessário adicionar a dependência no build.gradle:

dependencies {    implementation 'com.google.android.gms:play-services-maps:18.2.0'    implementation 'com.google.android.gms:play-services-location:21.0.1'}


Após adicionar a chave da API no manifesto, é possível exibir o mapa em um fragmento:

import com.google.android.gms.maps.*import com.google.android.gms.maps.model.*

class MapsFragment : SupportMapFragment(), OnMapReadyCallback { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) getMapAsync(this) }

override fun onMapReady(googleMap: GoogleMap) { val sydney = LatLng(-33.852, 151.211) googleMap.addMarker(MarkerOptions().position(sydney).title("Sydney")) googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f)) }}


2. Obtendo a localização atual

Para trabalhar com geolocalização, utiliza-se o Fused Location Provider. Exemplo de obtenção da última localização conhecida:

import com.google.android.gms.location.*

class LocationHelper(private val context: Context) { private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)

fun getLastLocation() { fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? -> location?.let { val lat = it.latitude val lng = it.longitude Log.d("Location", "Latitude: $lat, Longitude: $lng") } } }}


Para rastreamento contínuo, use LocationRequest e LocationCallback:

val locationRequest = LocationRequest.Builder(    Priority.PRIORITY_HIGH_ACCURACY, 10000L).build()

val locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult) { for (location in locationResult.locations) { // Processar novas coordenadas } }}

fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())


3. OpenStreetMap e a biblioteca osmdroid

Se você precisa de uma alternativa gratuita ao Google Maps, use osmdroid. Adicione a dependência:

dependencies {    implementation 'org.osmdroid:osmdroid-android:6.1.18'}


Exemplo de exibição de mapa e marcador:

import org.osmdroid.config.Configurationimport org.osmdroid.tileprovider.tilesource.TileSourceFactoryimport org.osmdroid.views.MapViewimport org.osmdroid.util.GeoPointimport org.osmdroid.views.overlay.Marker

class OsmMapActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Configuration.getInstance().userAgentValue = packageName setContentView(R.layout.activity_osm)

val mapView = findViewById(R.id.map) mapView.setTileSource(TileSourceFactory.MAPNIK) mapView.controller.setZoom(15.0) val startPoint = GeoPoint(55.7558, 37.6173) // Moscou mapView.controller.setCenter(startPoint)

val marker = Marker(mapView) marker.position = startPoint marker.title = "Moscou" marker.snippet = "Verme

Recommendations