El Arsenal de Android – Mapas

EasyRoutes le permite rastrear rutas fácilmente a través de la API de direcciones de Google Maps.

Nota: Debe generar una clave de API desde la consola de Google con la API de indicaciones y agregar el permiso de INTERNET en el manifiesto.

Configurar

Gradle: agregue su build.gradle raíz.

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

Agregue la dependencia en su aplicación build.gradle.

dependencies {
         implementation 'com.github.AntonioHReyes:EasyRoutes:$version'
 }

si tiene el siguiente error:

Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'build.gradle'

cambie su configuración. Gradle a:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
        maven { url 'https://jitpack.io' }
    }
}

De lo contrario, debe usar la biblioteca directamente en su proyecto.

USAR

Primero debe definir una instancia de EasyRoutesDirections con la que pueda pasar propiedades para consultar la API de Google Directions.

un ejemplo completo de propiedades:

val placeDirections = EasyRoutesDirections(
            originPlace = "Ixhuatlán del café, Veracruz, México",
            destinationPlace = "Hermosillo, Sonora, México",
            apiKey = getString(R.string.google_maps_key),
            waypointsLatLng = arrayListOf(
                LatLng(20.077550759401632, -98.36895687240255),
                LatLng(19.43488491844211, -99.13136781301444)
            ),
            waypointsPlaces = arrayListOf(
                "Santiago de Queretaro",
                "Aguascalientes"
            ),
            showDefaultMarkers= false,
            transportationMode = TransportationMode.WALKING
        )

Puede mezclar lugares de origen y destino LatLng y String.

val placeAndLatLng = EasyRoutesDirections(
            originPlace = "Oaxaca",
            destinationLatLng = LatLng(19.417708496429597, -102.05174097597963),
            apiKey = getString(R.string.google_maps_key)
        )

val latLngAndPlace = EasyRoutesDirections(
    originLatLng = LatLng(19.417708496429597, -102.05174097597963),
    destinationPlace = "Merida, Yucatan, México",
    apiKey = getString(R.string.google_maps_key)
)

Nota: No es posible definir dos orígenes o dos destinos.

una descripción de las propiedades:

Parámetro Chico Descripción
api_key String Necesario. Tu clave de API de Google Cloud
originLatLng LatLng Tu origen en los valores de latitud y longitud
originPlace String Su origen en formato String, por ejemplo Oaxaca
destinationLatLng LatLng Su destino en valores de latitud y longitud
destinationPlace String Su destino en formato String por ejemplo Aguascalientes
waypointsLatLng Array<LatLng> Especifica una serie de posiciones intermedias en valores de latitud y longitud
waypointsPlaces Array<String> Especifica una matriz de posiciones intermedias en formato de cadena
transportationMode TransportationMode Especifique que el modo de transporte que se utilizará de forma predeterminada es CONDUCCIÓN
showDefaultMarkers Boolean Marcar para mostrar marcadores predefinidos en el origen y el destino

posteriormente es necesario definir un EasyDrawer Builder para personalizar la ruta.

val routeDrawer = EasyRoutesDrawer.Builder(mMap)
            .pathWidth(10f)
            .pathColor(Color.GREEN)
            .geodesic(true)
            .previewMode(false)
            .build()

una descripción de las propiedades:

Parámetro Chico Descripción
pathWidth Float El ancho de su camino dibujado por defecto es 12f
pathColor Int El color de su ruta por defecto es Color.MAGENTA
geodesic Boolean Especifica si dibujar cada segmento de esta polilínea como una geodésica es verdadero por defecto
previewMode Boolean Especifique la propiedad para dibujar la ruta si es verdadero selecciona la vista general La polilínea predeterminada es verdadera

Nota: si desea visualizar la ruta con precisión, use previewMode en falso.

puede pasar una polilínea personalizada para un mejor manejo.

val customPolylineOptions = PolylineOptions()
customPolylineOptions.color(ContextCompat.getColor(this@MapsActivity, R.color.red))
customPolylineOptions.width(15f)

val routeDrawerWithCustomPolyline = EasyRoutesDrawer.Builder(mMap, customPolylineOptions)
            .previewMode(false)
            .build()

finalmente use una función de extensión de mapa para el dolor de ruta.

mMap.drawRoute(
    context = this@MapsActivity,
    easyRoutesDirections = placeDirections,
    routeDrawer = routeDrawer,
    markersListCallback = {markers -> markersList.addAll(markers) },
    googleMapsLink = { url -> Log.d("GoogleLink", url)}
){ legs ->
    legs?.forEach {
        Log.d("Point startAddress:", it?.startAddress.toString())
        Log.d("Point endAddress:", it?.endAddress.toString())
        Log.d("Distance:", it?.distance.toString())
        Log.d("Duration:", it?.duration.toString())
    }
}

puedes usar markersListCallback para que los marcadores de origen y destino se pinten de forma predeterminada. puedes usar googleMapsLink para obtener la URL de Google Maps con la ruta. puedes usar legsCallback para obtener la distancia y la duración de los puntos de la ruta.

complemento que puedes usar getGoogleMapsLink para obtener una URL de Google Maps con la ruta:

binding.mapsDirections.setOnClickListener { 
    val url = getGoogleMapsLink(placeDirections) //EasyRouteDirections instance like parameter

    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    startActivity(intent) //Open google maps native app
}

puede eliminar la ruta y los marcadores con:

routeDrawer.removeRoute()
routeDrawerWithCustomPolyline.removeRoute()

markersList.forEach { 
    it.remove()
}

Captura de pantalla

Cómprame un café

Desarrollado por

Antonio Huerta Reyes – antonio.huertaryes@gmail.com

Antonio Huerta

.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *