Geolocalización y mapas en Kotlin: bibliotecas, herramientas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a la geolocalización y mapas en Kotlin

Kotlin es un lenguaje de programación moderno, ampliamente utilizado para el desarrollo de aplicaciones Android. Trabajar con geolocalización y mapas es una de las capacidades clave de las aplicaciones móviles. En este artículo, revisaremos las principales bibliotecas y herramientas para integrar mapas, obtener las coordenadas del usuario y construir rutas en Kotlin.



1. Google Maps SDK para Android

Google Maps es el servicio más popular para mostrar mapas. Para usarlo en Kotlin, es necesario agregar la dependencia en 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'}


Después de agregar la clave API en el manifiesto, se puede mostrar el mapa en un 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("Sídney")) googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f)) }}


2. Obtención de la ubicación actual

Para trabajar con geolocalización se utiliza Fused Location Provider. Ejemplo de obtención de la última ubicación conocida:

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", "Latitud: $lat, Longitud: $lng") } } }}


Para el seguimiento continuo, use LocationRequest y 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) { // Procesamiento de nuevas coordenadas } }}

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


3. OpenStreetMap y la biblioteca osmdroid

Si necesita una alternativa gratuita a Google Maps, use osmdroid. Configuración:

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


Ejemplo de visualización de mapa y 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) // Moscú mapView.controller.setCenter(startPoint)

val marker = Marker(mapView) marker.position = startPoint marker.title = "Moscú" marker.snippet = "Roja"

Recommendations